bleSDK_expansion_board/projects/blezongkong/src/main.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();//喂狗
}
}