#include "b6x.h" #include "regs.h" #include "drvs.h" #include "dbg.h" #include "bledef.h" #include "app.h" #include "sftmr.h" #include "sys_config.h" #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 (32768) //32.768KHz 1S //看门狗配置 void IWDT_IRQHandler(void) { iwdt_feed();//喂狗 } static void iwdtInit(void) { iwdt_init(IWDT_INTEN_BIT | IWDT_CR_DFLT); iwdt_conf(IWDT_WINDOW); NVIC_EnableIRQ(IWDT_IRQn); __enable_irq(); } static void sysInit(void) { // Todo config, if need iwdt_disable(); // rcc_ble_en(); 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); // Init BLE App // app_init(rsn); sftmr_init(); iwdtInit(); // rf_pa_set(0x0C); } 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); // return 3; // } uint32_t bank; SYS_CONF_t sys_conf_info; __attribute__((section("ram_func.fshc."))) static void flash_sector_erase(uint32_t offset) { GLOBAL_INT_DISABLE(); while (SYSCFG->ACC_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(0xAA !=sys_conf_info.HEAD){ sys_conf_info.HEAD=0xAA; 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_control_init(); app_uart_Init(UART1_PORT,9600,PA06,PA07);//上位机//倒车雷达 // app_uart_Init(UART2_PORT,9600,20,PA03); 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", 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(); // ADC初始化 // sftmr_start(20, test_timer_handler); while(1){ // SoftTimer Polling sftmr_schedule(); // Schedule Messages & Events // ble_schedule(); // User's Procedure // app_ble_procedure(); Control_procedure(); } }