[Bootloader]
- ML402: do baudrate init in board_init() - use faster memcpy - print CPU info - provide extra diagnostic during SREC load git-svn-id: http://moon:8086/svn/mips@176 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
@@ -52,5 +52,7 @@ uint32_t getBootOffset(uint32_t sel)
|
|||||||
|
|
||||||
void board_init(void)
|
void board_init(void)
|
||||||
{
|
{
|
||||||
|
volatile uint32_t *pBaud = (uint32_t)SYS_UART_BAUD;
|
||||||
|
|
||||||
|
*pBaud = UART_CALC_BAUD(460800);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include <board.h>
|
#include <board.h>
|
||||||
|
#include <string.h>
|
||||||
#include "libsys.h"
|
#include "libsys.h"
|
||||||
#include "srec.h"
|
#include "srec.h"
|
||||||
#include "../cfiflash.h"
|
#include "../cfiflash.h"
|
||||||
@@ -52,9 +53,11 @@ void Exec_at(void *pEntry)
|
|||||||
|
|
||||||
__asm
|
__asm
|
||||||
(
|
(
|
||||||
// Enable User Mode and Interrupts on RFE
|
// On RFE:
|
||||||
// Exception Vector = 0xBFC00080
|
// (KUp = 1): Enable User Mode
|
||||||
"li $26, 0x1000000C\n"
|
// (IEp = 0): Disable Interrupts
|
||||||
|
// (BEV = 1): Exception Vector = 0xBFC00080
|
||||||
|
"li $26, 0x10000008\n"
|
||||||
"mtc0 $26, $12\n"
|
"mtc0 $26, $12\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -108,7 +111,6 @@ void Exec_RE_at(void *pEntry)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_IMG_SIZE (1024*1024) // bytes
|
#define MAX_IMG_SIZE (1024*1024) // bytes
|
||||||
#define FLASH_USE_BLOCK 1
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -133,7 +135,9 @@ int main(int argc, char *argv[])
|
|||||||
*pGPIO_DATA = GPIO_0_DFLT_DATA;
|
*pGPIO_DATA = GPIO_0_DFLT_DATA;
|
||||||
block_sel = 0x7F & (uint32_t)((*pGPIO_DATA >> GPIO_0_ALIGN_DIP) & GPIO_0_MASK_DIP);
|
block_sel = 0x7F & (uint32_t)((*pGPIO_DATA >> GPIO_0_ALIGN_DIP) & GPIO_0_MASK_DIP);
|
||||||
|
|
||||||
sputs("\nMIPS bootloader\n");
|
sputs("\nMIPS bootloader 2.0\n");
|
||||||
|
PrintCPUinfo();
|
||||||
|
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
if (IS_ERROR(flash_find(&flash, SYS_FLASH_IO)))
|
if (IS_ERROR(flash_find(&flash, SYS_FLASH_IO)))
|
||||||
{
|
{
|
||||||
@@ -193,12 +197,19 @@ int main(int argc, char *argv[])
|
|||||||
switch (srec_state)
|
switch (srec_state)
|
||||||
{
|
{
|
||||||
case srec_data:
|
case srec_data:
|
||||||
|
result = -1;
|
||||||
|
if ((srec.addr + srec.size) > MAX_IMG_SIZE)
|
||||||
|
{
|
||||||
|
sputs("O");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy((uint32_t*)srec.addr, srec.data, srec.size);
|
||||||
if ((srec.addr + srec.size) > haddr)
|
if ((srec.addr + srec.size) > haddr)
|
||||||
|
{
|
||||||
haddr = srec.addr + srec.size;
|
haddr = srec.addr + srec.size;
|
||||||
|
}
|
||||||
pMem = (uint8_t*)srec.addr;
|
result = 0;
|
||||||
for (i=0; i < srec.size; i++)
|
|
||||||
*pMem++ = srec.data[i];
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -252,6 +263,7 @@ int main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
sputs("E");
|
||||||
result = -1;
|
result = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -19,14 +19,11 @@ const uart_if_t uart_if[2] =
|
|||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Low-level I/O
|
// Low-level I/O
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
#define CALC_BAUD(b) \
|
|
||||||
(((10*CPU_FREQ_HZ)/((16*b) + 5))/10 - 1)
|
|
||||||
|
|
||||||
void UART_setbaud(void const *pInst, uint32_t baudrate)
|
void UART_setbaud(void const *pInst, uint32_t baudrate)
|
||||||
{
|
{
|
||||||
uart_if_t *pReg = (uart_if_t*)pInst;
|
uart_if_t *pReg = (uart_if_t*)pInst;
|
||||||
|
|
||||||
*pReg->pBAUD = CALC_BAUD(baudrate);
|
*pReg->pBAUD = UART_CALC_BAUD(baudrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
int UART_readchar(void const *pInst)
|
int UART_readchar(void const *pInst)
|
||||||
|
|||||||
@@ -16,6 +16,9 @@
|
|||||||
#ifndef UART_H
|
#ifndef UART_H
|
||||||
#define UART_H
|
#define UART_H
|
||||||
|
|
||||||
|
#define UART_CALC_BAUD(b) \
|
||||||
|
(((10*CPU_FREQ_HZ)/((16*b) + 5))/10 - 1)
|
||||||
|
|
||||||
typedef struct _suart_if_t
|
typedef struct _suart_if_t
|
||||||
{
|
{
|
||||||
volatile uint32_t *pCTRL;
|
volatile uint32_t *pCTRL;
|
||||||
|
|||||||
Reference in New Issue
Block a user