From e886a258465ebd80df70b5e23cc0d09c06f24f22 Mon Sep 17 00:00:00 2001 From: Petr Smolik Date: Sat, 24 Apr 2010 22:05:56 +0200 Subject: [PATCH] iap_kvpb: create the library at the level arch not in the machine level. The library is shared by all machines. lpc17xx: iap, kvpb libraries bsp initializes ulan reduce warnings Signed-off-by: Petr Smolik --- arch/arm/generic/libs/Makefile.omk | 2 +- arch/arm/generic/libs/iap_kvpb/Makefile | 14 ++ arch/arm/generic/libs/iap_kvpb/Makefile.omk | 7 + .../iap => generic/libs/iap_kvpb}/iap_kvpb.c | 0 .../libs/iap_kvpb}/lpciap_kvpb.h | 0 arch/arm/generic/libs/misc/system_stub.c | 2 +- arch/arm/mach-lpc17xx/defines/LPC17xx.h | 9 + arch/arm/mach-lpc17xx/libs/Makefile.omk | 2 +- .../mach-lpc17xx/libs/hal/hal_machperiph.c | 2 +- .../mach-lpc17xx/libs/hal/hal_machperiph.h | 2 +- arch/arm/mach-lpc17xx/libs/iap/Makefile | 14 ++ arch/arm/mach-lpc17xx/libs/iap/Makefile.omk | 6 + arch/arm/mach-lpc17xx/libs/iap/iap.c | 109 ++++++++ arch/arm/mach-lpc17xx/libs/iap/lpciap.h | 8 + arch/arm/mach-lpc21xx/libs/iap/Makefile.omk | 11 +- arch/arm/mach-lpc21xx/libs/iap/iap.c | 4 +- .../config/{config.common => config.ulboot} | 12 +- board/arm/lpc17xx-common/defines/system_def.h | 39 ++- .../lpc17xx-common/libs/bspbase/bsp0hwinit.c | 237 ++++++++++++++++++ board/arm/lpc17xx-common/libs/bspbase/uart.h | 34 +-- .../libs/ldscripts/Makefile.omk | 2 +- .../libs/ldscripts/keyval_loc.h | 10 + .../libs/ldscripts/lpc1754.ld-boot | 23 +- .../libs/ldscripts/lpc1754.ld-cfg | 13 +- .../lpc17xx-common/libs/ldscripts/mem_loc.h | 8 + board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c | 2 +- 26 files changed, 513 insertions(+), 59 deletions(-) create mode 100644 arch/arm/generic/libs/iap_kvpb/Makefile create mode 100644 arch/arm/generic/libs/iap_kvpb/Makefile.omk rename arch/arm/{mach-lpc21xx/libs/iap => generic/libs/iap_kvpb}/iap_kvpb.c (100%) rename arch/arm/{mach-lpc21xx/libs/iap => generic/libs/iap_kvpb}/lpciap_kvpb.h (100%) create mode 100644 arch/arm/mach-lpc17xx/libs/iap/Makefile create mode 100644 arch/arm/mach-lpc17xx/libs/iap/Makefile.omk create mode 100644 arch/arm/mach-lpc17xx/libs/iap/iap.c create mode 100644 arch/arm/mach-lpc17xx/libs/iap/lpciap.h rename board/arm/lpc17xx-common/config/{config.common => config.ulboot} (78%) create mode 100644 board/arm/lpc17xx-common/libs/ldscripts/keyval_loc.h create mode 100644 board/arm/lpc17xx-common/libs/ldscripts/mem_loc.h diff --git a/arch/arm/generic/libs/Makefile.omk b/arch/arm/generic/libs/Makefile.omk index d833bce..0001b3e 100644 --- a/arch/arm/generic/libs/Makefile.omk +++ b/arch/arm/generic/libs/Makefile.omk @@ -1,3 +1,3 @@ # -*- makefile -*- -SUBDIRS = misc +SUBDIRS = misc iap_kvpb diff --git a/arch/arm/generic/libs/iap_kvpb/Makefile b/arch/arm/generic/libs/iap_kvpb/Makefile new file mode 100644 index 0000000..b22a357 --- /dev/null +++ b/arch/arm/generic/libs/iap_kvpb/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/arch/arm/generic/libs/iap_kvpb/Makefile.omk b/arch/arm/generic/libs/iap_kvpb/Makefile.omk new file mode 100644 index 0000000..fb9c753 --- /dev/null +++ b/arch/arm/generic/libs/iap_kvpb/Makefile.omk @@ -0,0 +1,7 @@ +# -*- makefile -*- + +ifeq ($(CONFIG_KEYVAL),y) +include_HEADERS = lpciap_kvpb.h +lib_LIBRARIES = lpciap_kvpb +lpciap_kvpb_SOURCES = iap_kvpb.c +endif diff --git a/arch/arm/mach-lpc21xx/libs/iap/iap_kvpb.c b/arch/arm/generic/libs/iap_kvpb/iap_kvpb.c similarity index 100% rename from arch/arm/mach-lpc21xx/libs/iap/iap_kvpb.c rename to arch/arm/generic/libs/iap_kvpb/iap_kvpb.c diff --git a/arch/arm/mach-lpc21xx/libs/iap/lpciap_kvpb.h b/arch/arm/generic/libs/iap_kvpb/lpciap_kvpb.h similarity index 100% rename from arch/arm/mach-lpc21xx/libs/iap/lpciap_kvpb.h rename to arch/arm/generic/libs/iap_kvpb/lpciap_kvpb.h diff --git a/arch/arm/generic/libs/misc/system_stub.c b/arch/arm/generic/libs/misc/system_stub.c index 3ec804c..81faf43 100644 --- a/arch/arm/generic/libs/misc/system_stub.c +++ b/arch/arm/generic/libs/misc/system_stub.c @@ -308,7 +308,7 @@ int _swistat(int fd, struct stat *st) clock_t _clock(void); clock_t _clock(void) { - clock_t timeval; + clock_t timeval=0; return timeval; } diff --git a/arch/arm/mach-lpc17xx/defines/LPC17xx.h b/arch/arm/mach-lpc17xx/defines/LPC17xx.h index 32e9844..e1d597b 100644 --- a/arch/arm/mach-lpc17xx/defines/LPC17xx.h +++ b/arch/arm/mach-lpc17xx/defines/LPC17xx.h @@ -24,6 +24,15 @@ #ifndef __LPC17xx_H__ #define __LPC17xx_H__ +/////////////////////////////////////////////////////////////////////////////// +// Keyval +#define KVPB_CHUNK_SIZE 16 + +/////////////////////////////////////////////////////////////////////////////// +// ISP_RAM2FLASH_BLOCK_SIZE for 17xx CPU +#ifndef ISP_RAM2FLASH_BLOCK_SIZE + #define ISP_RAM2FLASH_BLOCK_SIZE 256 +#endif /* ISP_RAM2FLASH_BLOCK_SIZE */ /** @addtogroup CMSIS_Configuration * @{ diff --git a/arch/arm/mach-lpc17xx/libs/Makefile.omk b/arch/arm/mach-lpc17xx/libs/Makefile.omk index 57d94a4..778cdc0 100644 --- a/arch/arm/mach-lpc17xx/libs/Makefile.omk +++ b/arch/arm/mach-lpc17xx/libs/Makefile.omk @@ -1,3 +1,3 @@ # -*- makefile -*- -SUBDIRS = hal +SUBDIRS = hal iap diff --git a/arch/arm/mach-lpc17xx/libs/hal/hal_machperiph.c b/arch/arm/mach-lpc17xx/libs/hal/hal_machperiph.c index bc93da9..92db817 100644 --- a/arch/arm/mach-lpc17xx/libs/hal/hal_machperiph.c +++ b/arch/arm/mach-lpc17xx/libs/hal/hal_machperiph.c @@ -55,7 +55,7 @@ /*---------------------------------------------------------------------------- Clock Variable definitions *----------------------------------------------------------------------------*/ -uint32_t system_frequency = IRC_OSC; /*!< System Clock Frequency (Core Clock) */ +unsigned int system_frequency = IRC_OSC; /*!< System Clock Frequency (Core Clock) */ void system_clock_init(void) { diff --git a/arch/arm/mach-lpc17xx/libs/hal/hal_machperiph.h b/arch/arm/mach-lpc17xx/libs/hal/hal_machperiph.h index 6d7fd68..e606e22 100644 --- a/arch/arm/mach-lpc17xx/libs/hal/hal_machperiph.h +++ b/arch/arm/mach-lpc17xx/libs/hal/hal_machperiph.h @@ -1,7 +1,7 @@ #ifndef _HAL_MACHPERIPH_H #define _HAL_MACHPERIPH_H -extern uint32_t system_frequency; +extern unsigned int system_frequency; #define PCLK (system_frequency/4) void system_clock_init(void); diff --git a/arch/arm/mach-lpc17xx/libs/iap/Makefile b/arch/arm/mach-lpc17xx/libs/iap/Makefile new file mode 100644 index 0000000..b22a357 --- /dev/null +++ b/arch/arm/mach-lpc17xx/libs/iap/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/arch/arm/mach-lpc17xx/libs/iap/Makefile.omk b/arch/arm/mach-lpc17xx/libs/iap/Makefile.omk new file mode 100644 index 0000000..b5db2c7 --- /dev/null +++ b/arch/arm/mach-lpc17xx/libs/iap/Makefile.omk @@ -0,0 +1,6 @@ +# -*- makefile -*- + +include_HEADERS = lpciap.h +lib_LIBRARIES = lpciap +lpciap_SOURCES = iap.c + diff --git a/arch/arm/mach-lpc17xx/libs/iap/iap.c b/arch/arm/mach-lpc17xx/libs/iap/iap.c new file mode 100644 index 0000000..b43653e --- /dev/null +++ b/arch/arm/mach-lpc17xx/libs/iap/iap.c @@ -0,0 +1,109 @@ +#include +#include +#include + +#define CMD_SUCCESS 0 +#define BUSY 11 + +#define IAP_CMD_PREPARE 50 +#define IAP_CMD_WRITE 51 +#define IAP_CMD_ERASE 52 +#define IAP_CMD_READ_PARTID 54 + +unsigned int command[5]; +unsigned int result[5]; + +#define IAP_LOCATION 0x1FFF1FF1 + +typedef void (*IAP)(unsigned int [],unsigned int[]); +IAP iap_entry = (IAP) IAP_LOCATION; + +static inline int addr2sec(unsigned long addr) +{ + if (addr<0x10000) { + return (addr>>12); + } else { + addr-=0x10000; + return (addr>>15)+16; + } +} + +int lpcisp_read_partid() +{ + command[0] = IAP_CMD_READ_PARTID; + iap_entry(command, result); + return result[1]; +} + +int lpcisp_prepare_sectors(unsigned char start, unsigned char end) +{ + command[0] = IAP_CMD_PREPARE; + command[1] = start; + command[2] = end; + + iap_entry(command, result); + + return (CMD_SUCCESS == *result); +} + +int lpcisp_erase_sectors(unsigned char start, unsigned char end) +{ + command[0] = IAP_CMD_ERASE; + command[1] = start; + command[2] = end; + command[3] = system_frequency/1000; + + iap_entry(command, result); + + return (CMD_SUCCESS == *result); +} + +int lpcisp_erase(void *addr, int len) +{ + int start,end; + unsigned long flags; + + start=addr2sec((unsigned long)addr); + end=addr2sec((unsigned long)addr+len-1); + + if (end #include #include +#ifdef CONFIG_KEYVAL + #include + #include + #include +#endif /* CONFIG_KEYVAL */ +#ifdef CONFIG_STDIO_COM_PORT + #include +#endif +#ifdef CONFIG_OC_UL_DRV_SYSLESS + #include + #include + #include + #include + #include + extern long int uld_jiffies; +#endif /* CONFIG_OC_UL_DRV_SYSLESS */ + /* timers */ volatile lt_ticks_t sys_timer_ticks; @@ -70,6 +87,215 @@ void timerInit(void) TIM0->TCR = 1; //Run timer 0 */ } +#ifdef CONFIG_STDIO_COM_PORT + +int uartcon_write(int file, const char * ptr, int len) +{ + int cnt; + unsigned char ch; + for(cnt=0;cntlen=0; + + if(ul_iac_mem_head_rd((uint8_t *)ibuff, msginfo->len,&mtype,&start,&len)) + return UL_IAC_RC_PROC; + + if (mtype==0x00) { + data->len=len; + data->buff=(char*)start; + return UL_IAC_RC_FREEMSG; + } + return UL_IAC_RC_PROC; +} + +int ul_iac_call_erm(struct ul_drv *udrv,ul_msginfo *msginfo,char *ibuff,ul_iac_data *data) +{ + uint32_t mtype,start,len; + + data->len=0; + + if(ul_iac_mem_head_rd((uint8_t *)ibuff, msginfo->len,&mtype,&start,&len)) + return UL_IAC_RC_PROC; + + #ifdef CONFIG_KEYVAL + if (mtype==0x01) { + lpcisp_erase((void*)start,len); + data->len=0; + return UL_IAC_RC_FREEMSG; + } + #endif /* CONFIG_KEYVAL */ + return UL_IAC_RC_PROC; +} + +int ul_iac_call_wrm(struct ul_drv *udrv,ul_msginfo *msginfo,char *ibuff,ul_iac_data *data) +{ + uint32_t mtype,start,len; + + data->len=0; + + if(ul_iac_mem_head_rd((uint8_t *)ibuff, msginfo->len,&mtype,&start,&len)) + return UL_IAC_RC_PROC; + + if (mtype==0x00) { + memcpy((void*)start,data->buff,data->len); + return UL_IAC_RC_FREEMSG; + } + #ifdef CONFIG_KEYVAL + if (mtype==0x01) { + lpcisp_write((char*)start, data->buff, ISP_RAM2FLASH_BLOCK_SIZE); + return UL_IAC_RC_FREEMSG; + } + #endif /* CONFIG_KEYVAL */ + return UL_IAC_RC_PROC; +} + + +int ul_iac_call_deb(struct ul_drv *udrv,ul_msginfo *msginfo,char *ibuff,ul_iac_data *data) +{ + uint32_t debcmd,mtype,start; + uint8_t *p=(uint8_t*)ibuff; + + if (msginfo->len<1) return UL_IAC_RC_PROC; + debcmd=*(p++); + switch (debcmd) { + case 0x10: /* goto */ + data->len=0; + if (msginfo->len<5) return UL_IAC_RC_PROC; + mtype=*(p++); + mtype+=*(p++)<<8; + start=*(p++); + start+=*(p++)<<8; + if(mtype&UL_MTYPE_START32BIT){ + mtype&=~UL_MTYPE_START32BIT; + if (msginfo->len<7) return UL_IAC_RC_PROC; + start+=(uint32_t)*(p++)<<16; + start+=(uint32_t)*(p++)<<24; + } + if (mtype==0x00) + ((void (*)())start)(); + default:break; + } + return UL_IAC_RC_PROC; +} + +int ul_iac_call_res(struct ul_drv *udrv,ul_msginfo *msginfo,char *ibuff,ul_iac_data *data) +{ + uint32_t rescmd,pass; + uint8_t *p=(uint8_t*)ibuff; + + if (msginfo->len<1) return UL_IAC_RC_PROC; + rescmd=*(p++); + switch (rescmd) { + case ULRES_CPU: /* CPU */ + data->len=0; + if (msginfo->len<3) return UL_IAC_RC_PROC; + pass=*(p++); + pass+=*(p++)<<8; + if (pass==0xaa55) { +// MEMMAP=MEMMAP_FLASH; + lpc_watchdog_init(1,10); /* 10ms */ + lpc_watchdog_feed(); + while(1); + } + default:break; + } + return UL_IAC_RC_PROC; +} + +int uLanInit() +{ + struct ul_drv *udrv; + + /* set rs485 mode for UART1 */ + PINCON->PINSEL4 = (PINCON->PINSEL4 & ~0x00000F0F) | 0x00000A0A; /* dsr(rxd), dtr(rs485_dir), rxd, txd */ + + udrv=ul_drv_new(UL_DRV_SYSLESS_PORT, /* port */ + UL_DRV_SYSLESS_IRQ, /* irq */ + UL_DRV_SYSLESS_BAUD, /* baud */ + UL_DRV_SYSLESS_MY_ADR_DEFAULT, /* my adr */ + #ifdef CONFIG_OC_UL_DRV_U450_VARPINS + #if defined(CONFIG_OC_UL_DRV_U450_VARPINS_DIRNEG) && defined(CONFIG_OC_UL_DRV_U450_VARPINS_MSRSWAP) + "16450-dirneg-msrswap", /* chip name */ + #elif defined(CONFIG_OC_UL_DRV_U450_VARPINS_MSRSWAP) + "16450-msrswap", /* chip name */ + #elif defined(CONFIG_OC_UL_DRV_U450_VARPINS_DIRNEG) + "16450-dirneg", /* chip name */ + #else + "16450", /* chip name */ + #endif + #else /*CONFIG_OC_UL_DRV_U450_VARPINS*/ + "16450", /* chip name */ + #endif /*CONFIG_OC_UL_DRV_U450_VARPINS*/ + 0); /* baud base - default */ + + if (udrv==NULL) + return -1; + + ul_drv_add_iac(udrv,UL_CMD_RDM,UL_IAC_OP_SND,ul_iac_call_rdm,NULL,0,0,NULL,0); + ul_drv_add_iac(udrv,UL_CMD_ERM,UL_IAC_OP_CALLBACK,ul_iac_call_erm,NULL,0,UL_IAC_BFL_CB_OFFLT,NULL,0); + ul_drv_add_iac(udrv,UL_CMD_WRM,UL_IAC_OP_REC,ul_iac_call_wrm,(char*)lpciap_buff,0,UL_IAC_BFL_CB_OFFLT,NULL,0); + ul_drv_add_iac(udrv,UL_CMD_DEB,UL_IAC_OP_CALLBACK,ul_iac_call_deb,NULL,0,UL_IAC_BFL_CB_OFFLT,NULL,0); + ul_drv_add_iac(udrv,UL_CMD_RES,UL_IAC_OP_CALLBACK,ul_iac_call_res,NULL,0,UL_IAC_BFL_CB_OFFLT,NULL,0); + + return ul_drv_add_dev(udrv); +} +#endif /* CONFIG_OC_UL_DRV_SYSLESS */ void _setup_board() { @@ -81,6 +307,17 @@ void _setup_board() lpc_watchdog_feed(); #endif /* WATCHDOG_ENABLED */ + #ifdef CONFIG_STDIO_COM_PORT + uart0Init( B57600 , UART_8N1, UART_FIFO_8); + init_system_stub(); + #endif /* CONFIG_STDIO_COM_PORT */ + // initialize the system timer timerInit(); + + #ifdef CONFIG_OC_UL_DRV_SYSLESS +// uld_debug_flg=0x3ff; + uLanInit(); + #endif /* CONFIG_OC_UL_DRV_SYSLESS */ + } diff --git a/board/arm/lpc17xx-common/libs/bspbase/uart.h b/board/arm/lpc17xx-common/libs/bspbase/uart.h index f13906c..8e7f0a7 100644 --- a/board/arm/lpc17xx-common/libs/bspbase/uart.h +++ b/board/arm/lpc17xx-common/libs/bspbase/uart.h @@ -11,6 +11,8 @@ #define INC_UART_H #include +#include "serial_reg.h" + /////////////////////////////////////////////////////////////////////////////// // use the following macros to determine the 'baud' parameter values @@ -32,26 +34,26 @@ /////////////////////////////////////////////////////////////////////////////// // Definitions for typical UART 'mode' settings -#define UART_8N1 (uint8_t)(ULCR_CHAR_8 + ULCR_PAR_NO + ULCR_STOP_1) -#define UART_7N1 (uint8_t)(ULCR_CHAR_7 + ULCR_PAR_NO + ULCR_STOP_1) -#define UART_8N2 (uint8_t)(ULCR_CHAR_8 + ULCR_PAR_NO + ULCR_STOP_2) -#define UART_7N2 (uint8_t)(ULCR_CHAR_7 + ULCR_PAR_NO + ULCR_STOP_2) -#define UART_8E1 (uint8_t)(ULCR_CHAR_8 + ULCR_PAR_EVEN + ULCR_STOP_1) -#define UART_7E1 (uint8_t)(ULCR_CHAR_7 + ULCR_PAR_EVEN + ULCR_STOP_1) -#define UART_8E2 (uint8_t)(ULCR_CHAR_8 + ULCR_PAR_EVEN + ULCR_STOP_2) -#define UART_7E2 (uint8_t)(ULCR_CHAR_7 + ULCR_PAR_EVEN + ULCR_STOP_2) -#define UART_8O1 (uint8_t)(ULCR_CHAR_8 + ULCR_PAR_ODD + ULCR_STOP_1) -#define UART_7O1 (uint8_t)(ULCR_CHAR_7 + ULCR_PAR_ODD + ULCR_STOP_1) -#define UART_8O2 (uint8_t)(ULCR_CHAR_8 + ULCR_PAR_ODD + ULCR_STOP_2) -#define UART_7O2 (uint8_t)(ULCR_CHAR_7 + ULCR_PAR_ODD + ULCR_STOP_2) +#define UART_8N1 (uint8_t)(UART_LCR_WLEN8 + UART_LCR_PARITY) +#define UART_7N1 (uint8_t)(UART_LCR_WLEN7 + UART_LCR_PARITY) +#define UART_8N2 (uint8_t)(UART_LCR_WLEN8 + UART_LCR_PARITY + UART_LCR_STOP) +#define UART_7N2 (uint8_t)(UART_LCR_WLEN7 + UART_LCR_PARITY + UART_LCR_STOP) +#define UART_8E1 (uint8_t)(UART_LCR_WLEN8 + UART_LCR_EPAR) +#define UART_7E1 (uint8_t)(UART_LCR_WLEN7 + UART_LCR_EPAR) +#define UART_8E2 (uint8_t)(UART_LCR_WLEN8 + UART_LCR_EPAR + UART_LCR_STOP) +#define UART_7E2 (uint8_t)(UART_LCR_WLEN7 + UART_LCR_EPAR + UART_LCR_STOP) +#define UART_8O1 (uint8_t)(UART_LCR_WLEN8) +#define UART_7O1 (uint8_t)(UART_LCR_WLEN7) +#define UART_8O2 (uint8_t)(UART_LCR_WLEN8 + UART_LCR_STOP) +#define UART_7O2 (uint8_t)(UART_LCR_WLEN7 + UART_LCR_STOP) /////////////////////////////////////////////////////////////////////////////// // Definitions for typical UART 'fmode' settings #define UART_FIFO_OFF (0x00) -#define UART_FIFO_1 (uint8_t)(UFCR_FIFO_ENABLE + UFCR_FIFO_TRIG1) -#define UART_FIFO_4 (uint8_t)(UFCR_FIFO_ENABLE + UFCR_FIFO_TRIG4) -#define UART_FIFO_8 (uint8_t)(UFCR_FIFO_ENABLE + UFCR_FIFO_TRIG8) -#define UART_FIFO_14 (uint8_t)(UFCR_FIFO_ENABLE + UFCR_FIFO_TRIG14) +#define UART_FIFO_1 (uint8_t)(UART_FCR_ENABLE_FIFO + UART_FCR_TRIGGER_1) +#define UART_FIFO_4 (uint8_t)(UART_FCR_ENABLE_FIFO + UART_FCR_TRIGGER_4) +#define UART_FIFO_8 (uint8_t)(UART_FCR_ENABLE_FIFO + UART_FCR_TRIGGER_8) +#define UART_FIFO_14 (uint8_t)(UART_FCR_ENABLE_FIFO + UART_FCR_TRIGGER_14) void uart0Init(uint16_t baud, uint8_t mode, uint8_t fmode); int uart0Putch(int ch); diff --git a/board/arm/lpc17xx-common/libs/ldscripts/Makefile.omk b/board/arm/lpc17xx-common/libs/ldscripts/Makefile.omk index 50b8494..01e6b77 100644 --- a/board/arm/lpc17xx-common/libs/ldscripts/Makefile.omk +++ b/board/arm/lpc17xx-common/libs/ldscripts/Makefile.omk @@ -2,4 +2,4 @@ lib_LDSCRIPTS = $(notdir $(wildcard $(SOURCES_DIR)/*.ld*)) -#include_HEADERS = mem_loc.h keyval_loc.h +include_HEADERS = mem_loc.h keyval_loc.h diff --git a/board/arm/lpc17xx-common/libs/ldscripts/keyval_loc.h b/board/arm/lpc17xx-common/libs/ldscripts/keyval_loc.h new file mode 100644 index 0000000..2ee23e5 --- /dev/null +++ b/board/arm/lpc17xx-common/libs/ldscripts/keyval_loc.h @@ -0,0 +1,10 @@ +#ifndef _KEYVAL_LOC_H +#define _KEYVAL_LOC_H + +extern int _keyval_start; +extern int _keyval_page_len; + +#define KEYVAL_START ((unsigned int)&_keyval_start) +#define KEYVAL_PAGE_LEN ((unsigned int)&_keyval_page_len) + +#endif /* _KVPB_LOC */ diff --git a/board/arm/lpc17xx-common/libs/ldscripts/lpc1754.ld-boot b/board/arm/lpc17xx-common/libs/ldscripts/lpc1754.ld-boot index 9d9a68c..aab0285 100644 --- a/board/arm/lpc17xx-common/libs/ldscripts/lpc1754.ld-boot +++ b/board/arm/lpc17xx-common/libs/ldscripts/lpc1754.ld-boot @@ -10,8 +10,6 @@ INCLUDE "lpc1754.ld-cfg" PROVIDE (_setup_board = 0); -irq_table_size_init = 4 * (16+33); - /* SECTION command : Define mapping of input sections */ /* into output sections. */ @@ -32,7 +30,7 @@ SECTIONS *(.gcc_except_table) *(.rodata .rodata*) *(.gnu.linkonce.r.*) - } >IROM + } >FLASHBOOT /******************************************/ /* .ctors .dtors are used for c++ constructors/destructors */ @@ -43,7 +41,7 @@ SECTIONS KEEP(*(SORT(.ctors.*))) KEEP(*(.ctors)) PROVIDE(__ctors_end = .); - } >IROM + } >FLASHBOOT .dtors : { @@ -57,9 +55,20 @@ SECTIONS /* End Of .text section */ _etext = .; _sifastcode = .; - } >IROM + } >FLASHBOOT + .keyval : + { + PROVIDE (_keyval_start = .); + PROVIDE (_keyval_page_len = KEYVAL_PAGE_LEN ); + }> KEYVAL + + .app : + { + PROVIDE (_mem_app_start = . ); + } > FLASHAPP + .irqarea (NOLOAD): { . = ALIGN (256); @@ -83,7 +92,7 @@ SECTIONS . = ALIGN (4); _efastcode = . ; _sidata = .; - } >IRAM0 AT>IROM + } >IRAM0 AT>FLASHBOOT /******************************************/ /* This used for USB RAM section */ @@ -106,7 +115,7 @@ SECTIONS . = ALIGN(4); _edata = . ; - } >IRAM0 AT>IROM + } >IRAM0 AT>FLASHBOOT /******************************************/ /* For no-init variables section */ diff --git a/board/arm/lpc17xx-common/libs/ldscripts/lpc1754.ld-cfg b/board/arm/lpc17xx-common/libs/ldscripts/lpc1754.ld-cfg index c03368d..953dda3 100644 --- a/board/arm/lpc17xx-common/libs/ldscripts/lpc1754.ld-cfg +++ b/board/arm/lpc17xx-common/libs/ldscripts/lpc1754.ld-cfg @@ -1,15 +1,18 @@ +KEYVAL_PAGE_LEN = 0x00001000; + +PROVIDE( __bbconf_pt_addr = 0 ); + MEMORY { /* LPC1754 : 128k ROM + 32k SRAM */ /*------------------------------ */ - /* On-chip ROM is a readable (r), executable region (x) */ - /* On-chip SRAM is a readable (r), writable (w) and */ - /* executable region (x) */ - /* Main ROM region - 128k for LPC1754 */ - IROM (rx) : ORIGIN = 0x00000000, LENGTH = 128k + /* Main ROM region - 128k for LPC1754 */ + FLASHBOOT (rx) : ORIGIN = 0x00000000, LENGTH = 0x0000E000 + KEYVAL (rx) : ORIGIN = 0x0000E000, LENGTH = 0x00002000 + FLASHAPP (rx) : ORIGIN = 0x00010000, LENGTH = 0x00010000 /* local static RAM - 16k for LPC1754 */ IRAM0 (rwx) : ORIGIN = 0x10000000, LENGTH = 16k diff --git a/board/arm/lpc17xx-common/libs/ldscripts/mem_loc.h b/board/arm/lpc17xx-common/libs/ldscripts/mem_loc.h new file mode 100644 index 0000000..77b24d1 --- /dev/null +++ b/board/arm/lpc17xx-common/libs/ldscripts/mem_loc.h @@ -0,0 +1,8 @@ +#ifndef _MEM_LOC_H +#define _MEM_LOC_H + +extern int _mem_app_start; + +#define MEM_APP_START ((unsigned int)&_mem_app_start) + +#endif /* _MEM_LOC */ diff --git a/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c b/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c index 408e591..d14c1cb 100644 --- a/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c +++ b/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c @@ -188,7 +188,7 @@ int ul_iac_call_rdm(struct ul_drv *udrv,ul_msginfo *msginfo,char *ibuff,ul_iac_d if (mtype==0x00) { data->len=len; - data->buff=(unsigned char*)start; + data->buff=(char*)start; return UL_IAC_RC_FREEMSG; } return UL_IAC_RC_PROC; -- 2.39.2