#include "b6x.h" #include "regs.h" #include "drvs.h" #include "dbg.h" #include "bledef.h" #include "app.h" #include "sftmr.h" #include "prf_sess.h" #include "sys_config.h" void HardFault_Handler(void){ debug("HardFault_Handler\r\n"); NVIC_SystemReset(); } #define FLASH_INFO_CODE_ADDR (FLASH_BASE + 0x08) #define OTA_BANK_A_BASE (0x18004000) #define OTA_BANK_B_BASE (0x18020000) #define OTA_BANK_A (OTA_BANK_A_BASE - FLASH_BASE) #define OTA_BANK_B (OTA_BANK_B_BASE - FLASH_BASE) BLE_GRB_Data_t BLE_WS2812_GRBs; extern void app_ble_procedure(void); //************************************************ #define IWDT_WINDOW (2*32768) //32.768KHz 1S // //看门狗配置 // void IWDT_IRQHandler(void) // { // iwdt_feed();//喂狗 // } static void iwdtInit(void) { // iwdt_init(IWDT_INTEN_BIT | IWDT_CR_DFLT); iwdt_init(IWDT_CR_DFLT); iwdt_conf(IWDT_WINDOW); // NVIC_EnableIRQ(IWDT_IRQn); __enable_irq(); } static void sysInit(void) { // Todo config, if need iwdt_disable(); #if (1 ==BLE_ENABLE) rcc_ble_en(); #endif rcc_adc_en(); rcc_fshclk_set(FSH_CLK_DPSC42); APBMISC->XOSC16M_CTRL.XOSC16M_CAP_TR = 0x22; } static void devInit(void) { uint16_t rsn = rstrsn(); // dbgInit(); // debug("Start(rsn:0x%X)...\r\n", rsn); #if (1 ==BLE_ENABLE) // Init BLE App app_init(rsn); #endif sftmr_init(); iwdtInit(); #if (1 ==BLE_ENABLE) rf_pa_set(0x0C); #endif } #if (1 ==BLE_ENABLE) uint16_t Front_data=0; uint16_t Back_data=0; #endif #if (1 ==BLE_ENABLE) uint8_t str[30]={0,0},str_len=0; static tmr_tk_t test_timer_handler(tmr_id_t id){ (void)(id); // uint16_t adc_data; // adc_data = sadc_read(SADC_CH_AIN3, 0); // str_len =sprintf((char *)str, "\nBAT0 = %.2f V /%d\n", get_bat_voltage(),adc_data); // uart_send(UART1_PORT,str_len,str); // adc_data = sadc_read(SADC_CH_AIN7, 0); // str_len =sprintf((char *)str, "ACC = %d %% /%d\n", get_in_acc_percent(),adc_data); // uart_send(UART1_PORT,str_len,str); // GRB_WS2812_Write_GRBs(WS2812_GRBs.len ,WS2812_GRBs.GRBs); // GRB_WS2812_Write_color(BLE_WS2812_GRBs.len,BLE_WS2812_GRBs.GRBs); #if (1 ==BLE_ENABLE) str_len=0; str[str_len++]=0xa5; str[str_len++]=(Front_data)&0xff; str[str_len++]=(Front_data>>8)&0xff; str[str_len++]=(Back_data)&0xff; str[str_len++]=(Back_data>>8)&0xff; str[str_len]=0; for(uint8_t i=1;iACC_CCR_BUSY); fshc_erase(offset, FSH_CMD_ER_SECTOR); GLOBAL_INT_RESTORE(); } void write_cfg(SYS_CONF_t *sys_config_info_t){ flash_sector_erase(bank); flash_write(bank, (uint32_t *)sys_config_info_t,sizeof(SYS_CONF_t)/sizeof(uint32_t)); } int main(void) { sysInit(); devInit(); // Global Interrupt Enable GLOBAL_INT_START(); uint32_t curr_code_addr = RD_32(FLASH_INFO_CODE_ADDR); if(curr_code_addr == OTA_BANK_A_BASE) { bank = OTA_BANK_B; } else if(curr_code_addr == OTA_BANK_B_BASE) { bank = OTA_BANK_A; } // read config // read flash flash_read(bank, (uint32_t *)(&sys_conf_info),sizeof(sys_conf_info)/sizeof(uint32_t)); if(0xA5 !=sys_conf_info.HEAD){ sys_conf_info.HEAD=0xA5; sys_conf_info.M_mode_sLim = M_DEFAULT_sLim,//read flash sys_conf_info.U_mode_sLim = U_DEFAULT_sLim,//read flash sys_conf_info.AUTO_Brake_Distance =DEF_AUTO_Brake_Distance,//自动刹车距离 sys_conf_info.AUTO_Speed_Cut_Distance =DEF_AUTO_Speed_Cut_Distance,//自动减速距离 sys_conf_info.AUTO_Brake_Distance_B =DEF_AUTO_Brake_Distance,//自动刹车距离 sys_conf_info.AUTO_Speed_Cut_Distance_B =DEF_AUTO_Speed_Cut_Distance,//自动减速距离 write_cfg(&sys_conf_info); } app_uart_Init(UART1_PORT,9600,PA06,PA07);//上位机//倒车雷达 // app_uart_Init(UART2_PORT,9600,20,PA03); app_control_init(); app_radar_init(); Time_Event_Init(); uint8_t str[50]={0,0},str_len=0; str_len =sprintf((char *)str, "HEAD=%#X,M_s=%d,U_s=%d\n Brake=%d,Speed_Cut=%d\n Brake_B=%d,Speed_Cut_B=%d\n OKzsxfly", sys_conf_info.HEAD, sys_conf_info.M_mode_sLim, sys_conf_info.U_mode_sLim, sys_conf_info.AUTO_Brake_Distance, sys_conf_info.AUTO_Speed_Cut_Distance, sys_conf_info.AUTO_Brake_Distance_B, sys_conf_info.AUTO_Speed_Cut_Distance_B); uart_send(UART1_PORT,str_len,str); GRB_WS2812_Init(); // GRB_WS2812_Write_color(WS2812_GRBs.len,0xff); // bootDelayMs(1000); // GRB_WS2812_Write_color(WS2812_GRBs.len,0x00); // bootDelayMs(1000); // GRB_WS2812_Write_color(WS2812_GRBs.len,0xff00); // bootDelayMs(1000); // GRB_WS2812_Write_color(WS2812_GRBs.len,0x00); // bootDelayMs(1000); // GRB_WS2812_Write_color(WS2812_GRBs.len,0xff0000); // bootDelayMs(1000); BAT_Message_Init(); #if (1 ==BLE_ENABLE) // ADC初始化 sftmr_start(20, test_timer_handler); #endif while(1){ // SoftTimer Polling sftmr_schedule(); #if (1 ==BLE_ENABLE) // Schedule Messages & Events ble_schedule(); #endif // User's Procedure // app_ble_procedure(); Control_procedure(); iwdt_feed();//喂狗 } }