245 lines
6.0 KiB
C
245 lines
6.0 KiB
C
#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;i<str_len;i++){
|
|
str[str_len] +=str[i];
|
|
}
|
|
str_len++;
|
|
str[str_len++]=0x5a;
|
|
sess_txd_send(app_env.curidx, str_len, str);
|
|
#endif
|
|
|
|
return 5;
|
|
}
|
|
#endif
|
|
|
|
|
|
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(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();//喂狗
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|