/* * Routines to access hardware * * Copyright (c) 2013 Realtek Semiconductor Corp. * * This module is a confidential and proprietary property of RealTek and * possession or use of this module requires written permission of RealTek. */ //#include "build_info.h" #include "rtl8195a.h" #ifdef PLATFORM_FREERTOS #include "FreeRTOS.h" #include "task.h" #include "platform_stdlib.h" // #include "rtl_lib.h" #endif #if defined (CONFIG_USB_EN) && defined(CONFIG_USB_HOST_ONLY) extern void _usb_init(void); #endif #if defined(CONFIG_SDIO_DEVICE_EN) && defined(CONFIG_SDIO_DEVICE_NORMAL) extern VOID HalSdioInit(VOID); #endif #if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK) extern void init_rom_wlan_ram_map(void); extern VOID wlan_network(VOID); #endif //3 Monitor App Function extern VOID RtlConsolInitRam(u32 Boot, u32 TBLSz, VOID *pTBL); #ifndef CONFIG_KERNEL extern VOID RtlConsolTaskRom(VOID *Data); #endif #ifndef CONFIG_WITHOUT_MONITOR extern COMMAND_TABLE UartLogRamCmdTable[]; extern u32 GetRamCmdNum(VOID); extern VOID UartLogIrqHandleRam(VOID * Data); #endif #ifdef CONFIG_APP_DEMO #define MAIN_APP_DEFAULT_STACK_SIZE 2048 #define MAIN_APP_DEFAULT_PRIORITY (tskIDLE_PRIORITY + 1) #endif #ifdef CONFIG_MBED_ENABLED extern void __libc_fini_array (void); extern void __libc_init_array (void); extern void SVC_Handler (void); extern void PendSV_Handler (void); extern void SysTick_Handler (void); #endif #ifndef CONFIG_WITHOUT_MONITOR static VOID ReRegisterPlatformLogUart( VOID ) { IRQ_HANDLE UartIrqHandle; //4 Register Log Uart Callback function UartIrqHandle.Data = (u32)NULL;//(u32)&UartAdapter; UartIrqHandle.IrqNum = UART_LOG_IRQ; UartIrqHandle.IrqFun = (IRQ_FUN) UartLogIrqHandleRam; UartIrqHandle.Priority = 5; //4 Register Isr handle InterruptUnRegister(&UartIrqHandle); InterruptRegister(&UartIrqHandle); #if !TASK_SCHEDULER_DISABLED RtlConsolInitRam((u32)RAM_STAGE,(u32)GetRamCmdNum(),(VOID*)&UartLogRamCmdTable); #else //RtlConsolInit(ROM_STAGE,GetRomCmdNum(),(VOID*)&UartLogRomCmdTable);// executing boot seq., //pUartLogCtl->TaskRdy = 1; RtlConsolInitRam((u32)ROM_STAGE,(u32)GetRamCmdNum(),(VOID*)&UartLogRamCmdTable); #endif } #endif // end of "#ifndef CONFIG_WITHOUT_MONITOR" VOID ShowRamBuildInfo(VOID) { /* DBG_8195A("=========================================================\n\n"); //DBG_8195A("Build Time: "UTS_VERSION"\n"); DBG_8195A("Build Time: "RTL8195AFW_COMPILE_TIME"\n"); DBG_8195A("Build Author: "RTL8195AFW_COMPILE_BY"\n"); DBG_8195A("Build Host: "RTL8195AFW_COMPILE_HOST"\n"); DBG_8195A("Build ToolChain Version: "RTL195AFW_COMPILER"\n\n"); DBG_8195A("=========================================================\n"); */ } #if 1 //def CONFIG_APP_DEMO #include "rtl8195a.h" //#include "device.h" //#include "gpio_api.h" // mbed typedef struct _UART_LOG_BUF_ { u8 BufCount; //record the input cmd char number. u8 UARTLogBuf[127]; //record the input command. } UART_LOG_BUF, *PUART_LOG_BUF; //MON_RAM_BSS_SECTION typedef struct _UART_LOG_CTL_ { u8 NewIdx; //+0 u8 SeeIdx; //+1 u8 RevdNo; //+2 u8 EscSTS; //+3 u8 ExecuteCmd; //+4 u8 ExecuteEsc; //+5 u8 BootRdy; //+6 u8 Resvd; //+7 PUART_LOG_BUF pTmpLogBuf; VOID *pfINPUT; PCOMMAND_TABLE pCmdTbl; u32 CmdTblSz; u32 CRSTS; u8 (*pHistoryBuf)[127]; u32 TaskRdy; u32 Sema; } UART_LOG_CTL, *PUART_LOG_CTL; extern volatile UART_LOG_CTL *pUartLogCtl; _WEAK int main(void) { HalPinCtrlRtl8195A(JTAG, 0, 1); DiagPrintf("\r\nRTL Console ROM: Start - press key 'Up', Help '?'\r\n"); while(pUartLogCtl->ExecuteEsc != 1); pUartLogCtl->RevdNo = 0; pUartLogCtl->BootRdy = 1; DiagPrintf("\r"); while(1) { while(pUartLogCtl->ExecuteCmd != 1 ); UartLogCmdExecute(pUartLogCtl); DiagPrintf("\r"); pUartLogCtl->ExecuteCmd = 0; } return 0; } #else //default main _WEAK int main(void) { // Init SDIO #if defined(CONFIG_SDIO_DEVICE_EN) && defined(CONFIG_SDIO_DEVICE_NORMAL) HalSdioInit(); #endif #ifndef CONFIG_WITHOUT_MONITOR ReRegisterPlatformLogUart(); #endif #if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK) wlan_network(); #else #if defined (CONFIG_USB_EN) && defined(CONFIG_USB_HOST_ONLY) _usb_init(); #endif #endif // end of else of "#if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK)" //3 4)Enable Schedule #if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED #ifdef PLATFORM_FREERTOS vTaskStartScheduler(); #endif #else RtlConsolTaskRom(NULL); #endif return 0; } #endif // end of #if CONFIG_APP_DEMO __weak void __low_level_init(void) { // weak function } #if defined ( __ICCARM__ ) #pragma section="SDRAM.bss" #pragma section="SDRAM.bss" #endif // The Main App entry point void _AppStart(void) { #ifdef CONFIG_MBED_ENABLED InterruptForOSInit((VOID*)SVC_Handler, (VOID*)PendSV_Handler, (VOID*)SysTick_Handler); __asm ( "ldr r0, =SystemInit\n" "blx r0\n" "ldr r0, =_start\n" "bx r0\n" ); for(;;); #else // It's Not Mbed BSP #ifdef CONFIG_KERNEL #endif // Disable debug info log of spiflash DBG_INFO_MSG_OFF(_DBG_SPI_FLASH_); #ifdef CONFIG_APP_DEMO #ifdef PLATFORM_FREERTOS xTaskCreate( (TaskFunction_t)main, "MAIN_APP__TASK", (MAIN_APP_DEFAULT_STACK_SIZE/4), (void *)NULL, MAIN_APP_DEFAULT_PRIORITY, NULL); vTaskStartScheduler(); #endif #else __low_level_init(); #if defined ( __ICCARM__ ) // __iar_data_init3 replaced by __iar_cstart_call_ctors, just do c++ constructor, __iar_cstart_call_ctors(NULL); #ifdef CONFIG_SDR_EN // clear SDRAM bss u8* __sdram_bss_start__ = (u8*)__section_begin("SDRAM.bss"); u8* __sdram_bss_end__ = (u8*)__section_end("SDRAM.bss"); //DiagPrintf("clean sdram bss %8x to %8x\n\r", __sdram_bss_start__, __sdram_bss_end__); if((int)__sdram_bss_end__-(int)__sdram_bss_start__ > 0) memset(__sdram_bss_start__, 0, (int)__sdram_bss_end__-(int)__sdram_bss_start__); #endif #elif defined ( __GNUC__ ) #ifdef CONFIG_SDR_EN // clear SDRAM bss extern u8 __sdram_bss_start__[]; extern u8 __sdram_bss_end__[]; //DiagPrintf("clean sdram bss %8x to %8x\n\r", __sdram_bss_start__, __sdram_bss_end__); if((int)__sdram_bss_end__-(int)__sdram_bss_start__ > 0) memset(__sdram_bss_start__, 0, (int)__sdram_bss_end__-(int)__sdram_bss_start__); #endif #else #error !!!!!!NOT Support this compiler!!!!!! #endif // force SP align to 8 byte not 4 byte (initial SP is 4 byte align) __asm( "mov r0, sp\n" "bic r0, r0, #7\n" "mov sp, r0\n" ); main(); #if defined ( __ICCARM__ ) // for compile issue, If user never call this function, Liking fail __iar_data_init3(); #endif #endif // end of #if CONFIG_APP_DEMO #endif // end of else of "#ifdef CONFIG_MBED_ENABLED" }