276 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			276 lines
		
	
	
		
			8.1 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.
 | ||
| 
 | ||
| ****************************************************************************/
 | ||
| /* os shim includes */
 | ||
| #include "os_types.h"
 | ||
| #include "os_task.h"
 | ||
| #include "os_utils.h"
 | ||
| 
 | ||
| /* common includes */
 | ||
| #include "iot_io.h"
 | ||
| #include "iot_bitops.h"
 | ||
| 
 | ||
| /* driver includes */
 | ||
| #include "iot_clock.h"
 | ||
| 
 | ||
| /* cli includes */
 | ||
| #include "iot_cli.h"
 | ||
| #include "iot_uart_h.h"
 | ||
| 
 | ||
| /* debug includes*/
 | ||
| #include "dbg_io.h"
 | ||
| 
 | ||
| #include "ahb.h"
 | ||
| #include "cpu.h"
 | ||
| #include "flash.h"
 | ||
| #include "snapshot.h"
 | ||
| #include "iot_busmon.h"
 | ||
| #include "iot_version.h"
 | ||
| 
 | ||
| int platform_init();
 | ||
| 
 | ||
| os_task_h snapshot_test_handle;
 | ||
| 
 | ||
| void test_init()
 | ||
| {
 | ||
|     /* init common modules */
 | ||
|     iot_bitops_init();
 | ||
| 
 | ||
|     /* init os related modules and utilities */
 | ||
|     os_utils_init();
 | ||
| 
 | ||
|     /* init dbglog module */
 | ||
|     iot_dbglog_init();
 | ||
| 
 | ||
|     /*init uart module*/
 | ||
|     iot_uart_init(1);
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * @brief snapshot_iram_test - 此函数为在ram中执行的测试函数
 | ||
|  *
 | ||
|  * @param cpu
 | ||
|  */
 | ||
| void snapshot_iram_test(uint32_t cpu)
 | ||
| {
 | ||
|     iot_printf("run on %s", (cpu == HAL_INTR_CPU_0)?("HAL_INTR_CPU_0"): \
 | ||
|                 ("HAL_INTR_CPU_1"));
 | ||
| }
 | ||
| 
 | ||
| void snapshot_task_1(void *arg)
 | ||
| {
 | ||
|     snapshot_config_t config;
 | ||
|     uint32_t ram_d_test = 0x12345677;
 | ||
|     uint32_t tmp = 0;
 | ||
| 
 | ||
|     config.cpu    = cpu_get_mhartid();
 | ||
|     config.assert = 0;
 | ||
| 
 | ||
|     if(iot_snapshot_run_check()) {
 | ||
|         iot_printf("Error : Snapshot is running.\r\n");
 | ||
|         while(1);
 | ||
|     }
 | ||
| 
 | ||
|     iot_snapshot_monitor_init();
 | ||
| 
 | ||
|     for(;;) {
 | ||
|         iot_printf("\r\n\r\n*******************************************\r\n");
 | ||
|         iot_printf("*******************************************\r\n");
 | ||
|         /* RAM D 读测试 */
 | ||
|         config.rw_mode = SNAPSHOT_MONITOR_READ;
 | ||
|         config.mask = (config.cpu == HAL_INTR_CPU_0)?(SNAPSHOT_CPU0_D_MON): \
 | ||
|                        (SNAPSHOT_CPU1_D_MON);
 | ||
|         config.data_low_limit  = (uint32_t)&ram_d_test;
 | ||
|         config.data_high_limit = (uint32_t)&ram_d_test;
 | ||
|         iot_snapshot_monitor_config(&config);
 | ||
|         /*iot_snapshot_monitor_enable()与iot_snapshot_monitor_disable()用于确定
 | ||
|           需要监视的范围,若无结束范围,不需要调用iot_snapshot_monitor_disable()*/
 | ||
|         iot_snapshot_monitor_enable();
 | ||
|         iot_printf("1 - RAM D R Test\r\n");
 | ||
|         tmp = ram_d_test + 1;
 | ||
|         iot_printf("tmp = 0x%08X", tmp);
 | ||
|         iot_snapshot_monitor_disable();
 | ||
|         iot_snapshot_monitor_get_status();
 | ||
| 
 | ||
|         /* RAM D 写测试 */
 | ||
|         config.rw_mode = SNAPSHOT_MONITOR_WRITE;
 | ||
|         config.mask = (config.cpu == HAL_INTR_CPU_0)?(SNAPSHOT_CPU0_D_MON): \
 | ||
|                        (SNAPSHOT_CPU1_D_MON);
 | ||
|         config.data_low_limit  = (uint32_t)&ram_d_test;
 | ||
|         config.data_high_limit = (uint32_t)&ram_d_test;
 | ||
|         iot_snapshot_monitor_config(&config);
 | ||
|         iot_snapshot_monitor_enable();
 | ||
|         iot_printf("\r\n\r\n2 - RAM D W Test\r\n");
 | ||
|         ram_d_test = 0x87654321;
 | ||
|         iot_printf("ram_d_test = 0x%08X", ram_d_test);
 | ||
|         iot_snapshot_monitor_disable();
 | ||
|         iot_snapshot_monitor_get_status();
 | ||
| 
 | ||
|         /* RAM I 测试 */
 | ||
|         config.rw_mode = SNAPSHOT_MONITOR_READ;
 | ||
|         config.mask = (config.cpu == HAL_INTR_CPU_0)?(SNAPSHOT_CPU0_I_MON): \
 | ||
|                        (SNAPSHOT_CPU1_I_MON);
 | ||
|         config.instruction_low_limit  = (uint32_t)snapshot_iram_test;
 | ||
|         config.instruction_high_limit = (uint32_t)snapshot_iram_test;
 | ||
|         iot_snapshot_monitor_config(&config);
 | ||
|         iot_snapshot_monitor_enable();
 | ||
|         iot_printf("\r\n\r\n3 - RAM I R Test\r\n");
 | ||
|         snapshot_iram_test(cpu_get_mhartid());
 | ||
|         iot_snapshot_monitor_disable();
 | ||
|         iot_snapshot_monitor_get_status();
 | ||
| 
 | ||
|         /* FLASH D 读测试 */
 | ||
|         config.rw_mode = SNAPSHOT_MONITOR_READ;
 | ||
|         config.mask = (config.cpu == HAL_INTR_CPU_0)?(SNAPSHOT_CPU0_D_MON): \
 | ||
|                        (SNAPSHOT_CPU1_D_MON);
 | ||
|         config.data_low_limit  = (uint32_t)iot_version_hex;
 | ||
|         config.data_high_limit = (uint32_t)iot_version_hex;
 | ||
|         iot_snapshot_monitor_config(&config);
 | ||
|         iot_snapshot_monitor_enable();
 | ||
|         iot_printf("\r\n\r\n4 - FLASH D R Test\r\n");
 | ||
|         tmp = *((volatile uint32_t *)iot_version_hex);
 | ||
|         iot_printf("tmp = 0x%08X", tmp);
 | ||
|         iot_snapshot_monitor_disable();
 | ||
|         iot_snapshot_monitor_get_status();
 | ||
| 
 | ||
|         /* FLASH D 写测试 */
 | ||
|         config.rw_mode = SNAPSHOT_MONITOR_WRITE;
 | ||
|         config.mask = (config.cpu == HAL_INTR_CPU_0)?(SNAPSHOT_CPU0_D_MON): \
 | ||
|                        (SNAPSHOT_CPU1_D_MON);
 | ||
|         config.data_low_limit  = (uint32_t)iot_version_hex;
 | ||
|         config.data_high_limit = (uint32_t)iot_version_hex;
 | ||
|         iot_snapshot_monitor_config(&config);
 | ||
|         iot_snapshot_monitor_enable();
 | ||
|         iot_printf("\r\n\r\n5 - FLASH D W Test\r\n");
 | ||
|         *((volatile uint32_t *)iot_version_hex) = tmp;
 | ||
|         iot_printf("tmp = 0x%08X", tmp);
 | ||
|         iot_snapshot_monitor_disable();
 | ||
|         iot_snapshot_monitor_get_status();
 | ||
| 
 | ||
|         /* FLASH I 测试 */
 | ||
|         config.rw_mode = SNAPSHOT_MONITOR_READ;
 | ||
|         config.mask = (config.cpu == HAL_INTR_CPU_0)?(SNAPSHOT_CPU0_I_MON): \
 | ||
|                         (SNAPSHOT_CPU1_I_MON);
 | ||
|         config.instruction_low_limit  = (uint32_t)iot_version_hex;
 | ||
|         config.instruction_high_limit = (uint32_t)iot_version_hex;
 | ||
|         iot_snapshot_monitor_config(&config);
 | ||
|         iot_snapshot_monitor_enable();
 | ||
|         iot_printf("\r\n\r\n6 - FLASH I R Test\r\n");
 | ||
|         tmp = iot_version_hex();
 | ||
|         iot_printf("iot_version_hex() = 0x%08X", tmp);
 | ||
|         iot_snapshot_monitor_disable();
 | ||
|         iot_snapshot_monitor_get_status();
 | ||
| 
 | ||
|         /* FLASH I ASSERT 测试 */
 | ||
|         config.assert = (config.cpu == HAL_INTR_CPU_0)?(SNAPSHOT_CPU0_I_MON): \
 | ||
|                          (SNAPSHOT_CPU1_I_MON);
 | ||
|         config.rw_mode = SNAPSHOT_MONITOR_READ;
 | ||
|         config.mask = (config.cpu == HAL_INTR_CPU_0)?(SNAPSHOT_CPU0_I_MON): \
 | ||
|                        (SNAPSHOT_CPU1_I_MON);
 | ||
|         config.instruction_low_limit  = (uint32_t)iot_version_hex;
 | ||
|         config.instruction_high_limit = (uint32_t)iot_version_hex;
 | ||
|         iot_snapshot_monitor_config(&config);
 | ||
|         iot_snapshot_monitor_enable();
 | ||
|         iot_printf("\r\n\r\n7 - FLASH I R ASSERT Test\r\n");
 | ||
|         tmp = iot_version_hex();
 | ||
|         iot_printf("iot_version_hex() = 0x%08X", tmp);
 | ||
|         iot_snapshot_monitor_disable();
 | ||
|         iot_snapshot_monitor_get_status();
 | ||
| 
 | ||
|         iot_printf("\r\n\r\n");
 | ||
| 
 | ||
|         os_delay(3000);
 | ||
|     }
 | ||
| 
 | ||
|     os_delete_task(snapshot_test_handle);
 | ||
| }
 | ||
| 
 | ||
| int32_t snapshot_task_init()
 | ||
| {
 | ||
|     /* start plc lib task */
 | ||
|     snapshot_test_handle = os_create_task(snapshot_task_1, NULL, 9);
 | ||
| 
 | ||
|     //create the tasks;
 | ||
|     if(snapshot_test_handle != NULL) {
 | ||
|         iot_printf("Task created successfully ..\r\n");
 | ||
|     }
 | ||
| 
 | ||
|     return 0;
 | ||
| }
 | ||
| 
 | ||
| int32_t iot_task_start()
 | ||
| {
 | ||
|     //start the tasks;
 | ||
|     os_start_kernel();
 | ||
| 
 | ||
|     return 0;
 | ||
| }
 | ||
| 
 | ||
| static int32_t iot_platform_init()
 | ||
| {
 | ||
|     /*platform intialization*/
 | ||
|     platform_init();
 | ||
| 
 | ||
|     //resource initializations;
 | ||
|     system_clock_init();
 | ||
| 
 | ||
|     dbg_uart_init();
 | ||
| 
 | ||
|     dbg_uart_stage1_init();
 | ||
| 
 | ||
|     return 0;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| int32_t iot_module_init(void)
 | ||
| {
 | ||
|     /* platform intialization */
 | ||
|     iot_platform_init();
 | ||
| 
 | ||
|     test_init();
 | ||
| 
 | ||
|     flash_init(1);
 | ||
| 
 | ||
|     /* cache enable */
 | ||
|     ahb_cache_disable();
 | ||
|     ahb_cache_enable();
 | ||
|     ahb_cache_reset();
 | ||
|     ahb_cache_fill_valid_space();
 | ||
| 
 | ||
|     /* create all the tasks */
 | ||
|     snapshot_task_init();
 | ||
| 
 | ||
|     iot_printf("starting...\n");
 | ||
| 
 | ||
|     return 0;
 | ||
| }
 | ||
| 
 | ||
| int32_t iot_module_start(void)
 | ||
| {
 | ||
|     int32_t res = 0;
 | ||
| 
 | ||
|     res = iot_task_start();
 | ||
| 
 | ||
|     return res;
 | ||
| }
 | ||
| 
 | ||
| int main(void)
 | ||
| {
 | ||
|     iot_module_init();
 | ||
| 
 | ||
|     iot_module_start();
 | ||
| 
 | ||
|     return 0;
 | ||
| }
 |