mirror of
https://github.com/rtlduino/RTL8710AF_GCC.git
synced 2024-11-23 09:44:15 +00:00
228 lines
6.2 KiB
C
228 lines
6.2 KiB
C
/*
|
|
* 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 "rtl8195a.h"
|
|
#include "build_info.h"
|
|
#ifdef PLATFORM_FREERTOS
|
|
#include "FreeRTOS.h"
|
|
#include "task.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
|
|
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");
|
|
*/
|
|
}
|
|
|
|
#ifdef CONFIG_APP_DEMO
|
|
#include "device.h"
|
|
#include "gpio_api.h" // mbed
|
|
|
|
_WEAK int main(void)
|
|
{
|
|
gpio_t gpio_led;
|
|
|
|
#ifndef CONFIG_WITHOUT_MONITOR
|
|
ReRegisterPlatformLogUart();
|
|
#endif
|
|
|
|
// Init LED control pin
|
|
gpio_init(&gpio_led, PC_5);
|
|
gpio_dir(&gpio_led, PIN_OUTPUT); // Direction: Output
|
|
gpio_mode(&gpio_led, PullNone); // No pull
|
|
while(1){
|
|
gpio_write(&gpio_led, !gpio_read(&gpio_led));
|
|
RtlMsleepOS(1000);
|
|
}
|
|
|
|
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);
|
|
// 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__);
|
|
#elif defined ( __GNUC__ )
|
|
// 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__);
|
|
#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"
|
|
}
|