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;
							 | 
						|||
| 
								 | 
							
								}
							 |