113 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /****************************************************************************
 | ||
|  | 
 | ||
|  | Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. | ||
|  | 
 | ||
|  | This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT | ||
|  | be copied by any method or incorporated into another program without | ||
|  | the express written consent of Aerospace C.Power. This Information or any portion | ||
|  | thereof remains the property of Aerospace C.Power. The Information contained herein | ||
|  | is believed to be accurate and Aerospace C.Power assumes no responsibility or | ||
|  | liability for its use in any way and conveys no license or title under | ||
|  | any patent or copyright and makes no representation or warranty that this | ||
|  | Information is free from patent or copyright infringement. | ||
|  | 
 | ||
|  | ****************************************************************************/ | ||
|  | 
 | ||
|  | #include "os_types.h"
 | ||
|  | #include "iot_img_hdr.h"
 | ||
|  | #include "os_mem.h"
 | ||
|  | #include "iot_wdg.h"
 | ||
|  | #include "iot_io.h"
 | ||
|  | #include "dbg_io.h"
 | ||
|  | 
 | ||
|  | #include "clk.h"
 | ||
|  | #include "ahb.h"
 | ||
|  | #include "ddrc.h"
 | ||
|  | #include "flash.h"
 | ||
|  | #include "ana.h"
 | ||
|  | 
 | ||
|  | #define APP_RAM_ADDR   0x0ffe0000
 | ||
|  | #define APP_FLASH_ADDR 0x1c008000
 | ||
|  | 
 | ||
|  | #define REG32(a)        (*((volatile uint32_t *)(a)))
 | ||
|  | //#define SP_DEBUG_UART_PORT 3
 | ||
|  | 
 | ||
|  | static int app_image_copy( ) | ||
|  | { | ||
|  |     uint8_t *dst= (uint8_t*)APP_RAM_ADDR; | ||
|  |     uint8_t *src = (uint8_t*)APP_FLASH_ADDR; | ||
|  |     static char block[64]; | ||
|  |     imgHdr hdr = {0}; | ||
|  | 
 | ||
|  |     os_mem_cpy(block, src, sizeof(imgHdr)); | ||
|  | 
 | ||
|  |     img_header_construct(&hdr, block); | ||
|  | 
 | ||
|  |     os_mem_cpy(dst, src + sizeof(imgHdr), iot_imghdr_get_imgSize(&hdr)); | ||
|  | 
 | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | static int app_core_start() | ||
|  | { | ||
|  |     ahb_core0_set_start(APP_RAM_ADDR); | ||
|  | 
 | ||
|  |     ahb_core0_enable(); | ||
|  | 
 | ||
|  |     ahb_core0_reset(); | ||
|  | 
 | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | void sp_boot_hw_init() | ||
|  | { | ||
|  |     //disable auto-baud;
 | ||
|  |     REG32(0x44001020) &= ~0x1; | ||
|  |     REG32(0x50000008) |= 0x80; | ||
|  | 
 | ||
|  |     //change CPU core to 150M.
 | ||
|  |     clk_core_freq_set(CPU_FREQ_150M); | ||
|  | 
 | ||
|  |     //uart init;
 | ||
|  |     //dbg_uart_init_port(3, 1);
 | ||
|  | 
 | ||
|  |     //flash init;
 | ||
|  |     flash_init(1); | ||
|  | 
 | ||
|  |     // disable cache
 | ||
|  |     ahb_cache_disable(); | ||
|  | #if RUN_IN_PSRAM
 | ||
|  |     //ddr init;
 | ||
|  |     ddr_cache_init(); | ||
|  | #else
 | ||
|  |     ahb_set_cache_buffer_mode(); | ||
|  | #endif
 | ||
|  |     // enable ahb cache
 | ||
|  |     ahb_cache_enable(); | ||
|  |     //ahb_cache_reset();
 | ||
|  | 
 | ||
|  | #if RUN_IN_PSRAM
 | ||
|  |     //enable dmc cache;
 | ||
|  |     ahb_dmc_cache_enable(); | ||
|  | #endif
 | ||
|  |      //cache space init;
 | ||
|  |     ahb_cache_fill_valid_space(); | ||
|  | } | ||
|  | 
 | ||
|  | void sp_boot_load_sbl() | ||
|  | { | ||
|  |     app_image_copy(); | ||
|  | 
 | ||
|  |     app_core_start(); | ||
|  | } | ||
|  | 
 | ||
|  | void sp_boot_main_loop() | ||
|  | { | ||
|  |     //disable cpu1's wdt;
 | ||
|  |     wdg_deinit(HAL_WDG_CPU_1); | ||
|  | 
 | ||
|  |     while(1){ | ||
|  |         __asm volatile ("nop"); | ||
|  |     } | ||
|  | } |