| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- #ifndef __BOARD_H__
- #define __BOARD_H__
- #include "stdint.h"
- #include "stdio.h"
- #include "hc32l19x.h"
- #include "clk_rst.h"
- #include "gpio.h"
- #include "prj_com.h"
- #include "SerPlot_drv.h"
- #include "wdg_drv.h"
- #include "stdlib.h"
- #include "lcd_disp.h" //add by yuewei 20260310
- #include <rtthread.h>
- //////////////////////////////版本号 调试开关等wxl20260416////////////////////////////////////////////
- #define VER_TYPE 1 // type, 1: ultrasound flow meter;
- #define VER_OPERATOR 1 // operator, 1: China Telecom;
- #define VER_MODULE 4 // module, 1: HC32_BC28;
- #define VER_FIRMWARE 1
- /////////////////////////////集中显示频繁使用的调试开关及其他宏定义wxl20260416//////////////////////////////
- #define BOOTLOADER_ENABLE // 从0x0000启动运行时,屏蔽该宏
- #define APP_DEBUG_PRINT // 调试打印开关
- // #define DEBUG_LOW_POWER
- //#define DOG_ENABLE // WXL2026-5-12
- // #define DEBUG_BILL
- // #define DEBUG_RESET_LOG_NOT_SEND // wxl2026-5-8 调试阶段,单片机初始运行不记日志,正常运行阶段记上电日志
- // #define DEBUG_SAVE_BAK 0
- // #define DEBUG_5MIN_REC 1
- // #define DEBUG_HOUR_REC 1
- // #define DEBUG_MONTH_REC 1
- // #define DEBUG_DAY_REC 1
- // #define DEBUG_LOG_WARM
- // #define DEBUG_PARAM
- // #define DEBUG_PATCH
- #define DEBUG_NB
- // #define DEBUG_BILL2
- // #define DEBUG_BILL
- // add by yuewei 20260305 end
- // #define RTC_INTERRUPT_TIME_5_S
- #define ARM_MATH_CM0PLUS
- #if defined(ARM_MATH_CM7) || defined(ARM_MATH_CM4) || defined(ARM_MATH_CM3) || defined(ARM_MATH_CM0) || defined(ARM_MATH_CM0PLUS)
- #include "arm_math.h"
- #else
- #include "math.h"
- #define fabsf(x) fabs(x)
- #endif
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #if defined(__CC_ARM) || defined(__CLANG_ARM)
- extern int Image$$ER_IROM1$$Base;
- extern int Image$$RW_IRAM1$$ZI$$Limit;
- #define VECT_TAB_OFFSET ((uint32_t)&Image$$ER_IROM1$$Base)
- #define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit)
- #elif __ICCARM__
- #pragma section = "CSTACK"
- #define HEAP_BEGIN (__segment_end("CSTACK"))
- #else
- extern int __bss_end;
- #define HEAP_BEGIN ((void *)&__bss_end)
- #endif
- #define HEAP_END ((void *)(0x20000000 + 0x07000))
- extern int Stack_Mem;
- #define MAIN_STACK_BEGIN ((void *)&Stack_Mem)
- #define MAIN_STACK_SIZE ((uint32_t)HEAP_BEGIN - (uint32_t)MAIN_STACK_BEGIN)
- #define RCL_38p4K_ENABLE
- // set EXT_CAP for 2uA power saving
- #define LCD_EXT_CAP
- // #define SYSCLK_4M_MODE
- // #define SYSCLK_8M_MODE
- #define SYSCLK_16M_MODE
- #define SLEEPDEEP_ENABLE
- #define DEBUG_ENABLE
- // #define USE_DEBUG_UART
- #define NVIC_PRIO_0 (0x00U)
- #define NVIC_PRIO_1 (0x01U)
- #define NVIC_PRIO_2 (0x02U)
- #define NVIC_PRIO_3 (0x03U)
- #define MUX_CH_NUM (4)
- // context_m0p.S
- /* 32bit CPU */
- // typedef long rt_base_t; /**< Nbit CPU related date type */
- extern rt_base_t rt_hw_interrupt_disable(void);
- extern void rt_hw_interrupt_enable(rt_base_t level);
- extern uint32_t SystemCoreClock; // System Clock Frequency (Core Clock)
- extern void SystemInit(void); // Initialize the system
- // extern void SystemCoreClockUpdate (void); // Update SystemCoreClock variable
- // board.c
- extern void IRQMutEnable(IRQn_Type IRQn, uint32_t Priority);
- extern void systick_init(void);
- extern void us_delay(uint32_t us);
- extern void CalExpireTime(uint32_t us);
- extern void WaitExpireTime(void);
- // finsh_drv.c
- #ifndef RCL_38p4K_ENABLE
- #define USART_BAUDRATE (8192)
- #else
- #define USART_BAUDRATE (9600)
- #endif
- #define SERPLOT_DMATX_OFF (0x0001u)
- #define YMODEM_UPGRADE_ON (0x0001u)
- #define CHECK_ITF_ON (0x0002u)
- typedef void (*uart_rx_itf)(uint8_t ch);
- typedef void (*ymodem_rx_itf)(uint8_t RxByte, void *arg);
- extern uint16_t Finsh_Uart_Mode;
- extern uint16_t SerPlot_Mode;
- extern int8_t get_nb_imei_code(void);
- extern int8_t at_cmd_send(uint8_t stat, char *cmd_str, char *ack, uint16_t retry_time, uint8_t time_out);
- extern void finsh_drv_init(void);
- extern void print_ch(char ch);
- extern void print_str(char *str);
- extern void DebugPrintStr(char *Str, uint16_t Len);
- extern uint16_t FinSh_Txbuf_Busy(void);
- extern void finsh_tx(volatile uint8_t *data, uint16_t len);
- extern void PutChar(char ch);
- extern void set_shell_rx_itf(uart_rx_itf itf);
- extern void set_check_rx_itf(uart_rx_itf itf);
- extern void set_ymodem_rx_itf(ymodem_rx_itf itf, void *arg);
- // dma_drv.c
- extern void DMA_ReqClkOn(void);
- extern void DMA_ReqClkOff(void);
- extern uint16_t DMA_Busy(void);
- // rtc_drv.c
- typedef struct
- {
- uint8_t year;
- uint8_t month;
- uint8_t day;
- uint8_t week;
- uint8_t hour;
- uint8_t minute;
- uint8_t second;
- uint8_t flag_1s : 1; // 1s
- uint8_t flag_1m : 1; // 1m
- uint8_t rsv : 6;
- } rtc_run_t;
- extern void get_rtc_run(rtc_run_t **rtc_run);
- extern void set_rtc_run(rtc_run_t *rtc_run);
- extern void rtc_init(rtc_run_t *rtc_run);
- extern void set_rtc_date(uint8_t year, uint8_t month, uint8_t day);
- extern void get_rtc_date(uint8_t *year, uint8_t *month, uint8_t *day);
- extern void set_rtc_time(uint8_t hour, uint8_t min, uint8_t sec);
- extern void get_rtc_time(uint8_t *hour, uint8_t *min, uint8_t *sec);
- extern uint32_t get_rtc_cnt_int(void);
- extern void set_rtc_cnt_int(uint32_t cnt_int);
- extern uint32_t get_tdc_rw_err_cnt(void);
- // low_pwr_drv.c
- extern void debug_stop(void);
- extern void exti_init(void);
- extern void EnterLowPower(void);
- // misc_drv.c
- // tdc_spi_drv.c
- extern void tdc_spi_init(void);
- extern void tdc_spi_wr_d32(uint8_t code, uint32_t data);
- extern void tdc_spi_wr_code(uint8_t code);
- extern uint32_t tdc_spi_rd_d32(uint8_t code);
- extern uint16_t tdc_spi_rd_d16(uint8_t code);
- extern uint8_t tdc_spi_rd_d8(uint8_t code);
- // lcd_drv.c
- // seg23:com0~com3
- #define LCD_STATUS_BAR1 (0x01000000u)
- #define LCD_STATUS_BAR2 (0x02000000u)
- #define LCD_STATUS_BAR3 (0x04000000u)
- #define LCD_STATUS_BAR4 (0x08000000u)
- // seg22:com0~com3
- #define LCD_STATUS_LEFT (0x00010000u)
- #define LCD_STATUS_INSTANT (0x00020000u)
- #define LCD_STATUS_FORWARD (0x00040000u)
- #define LCD_STATUS_BACKWARD (0x00080000u)
- // seg21:com0~com3
- #define LCD_STATUS_KPA (0x00000100u)
- #define LCD_STATUS_LOWPWR (0x00000200u)
- #define LCD_STATUS_SHUTDOWN (0x00000400u)
- #define LCD_STATUS_LADDER (0x00000800u)
- // seg20:com0~com3
- #define LCD_STATUS_HOUR (0x00000001u)
- #define LCD_STATUS_SLASH (0x00000002u)
- #define LCD_STATUS_DEGREE (0x00000004u)
- #define LCD_STATUS_YUAN (0x00000008u)
- #define LCD_STATUS_BAR5 (0x00000010u)
- #define LCD_STATUS_CIRCLE (0x00000020u)
- #define LCD_STATUS_CUM (0x00000040u)
- #define LCD_STATUS_M3 (0x00000080u)
- #define LCD_POINT4 (3)
- #define LCD_POINT5 (4)
- #define LCD_POINT6 (5)
- #define LCD_POINT7 (6)
- #define LCD_POINT8 (7)
- #define LCD_POINT9 (8)
- extern uint8_t DispMem_Symbol[5];
- extern uint32_t DispMem_Status;
- extern void lcd_init(void);
- extern void LCD_ClrAll(void);
- extern void LCD_ClrStatus(void); // add by HBR 20260604
- extern void LCD_ClrDec(void);
- extern void LCD_DispDec(uint32_t val, uint8_t pos, uint8_t dl);
- extern void LCD_DispDecAllPos(uint32_t val, uint8_t pos, uint8_t dl);
- extern void LCD_DispFloat(float val, uint8_t pos, uint8_t dl, uint8_t il);
- extern void LCD_DispDouble(double val, uint8_t pos, uint8_t dl, uint8_t il);
- extern void LCD_DispStr(char *str, uint8_t pos, uint8_t dl);
- extern void LCD_Update(void);
- extern void LCD_DispPoint(uint8_t num);
- // adc_drv.c
- extern volatile float McuTemp;
- extern volatile uint16_t McuVcc; // unit mV
- extern volatile uint16_t McuVbat; // unit mV
- // extern volatile uint16_t McuVTxbat; // unit mV
- extern volatile float WaterPressure; // unit MPa
- extern void adc_init(void);
- extern void adc_get(void);
- // eeprom_drv.c
- extern void eeprom_init(void);
- extern uint8_t EEPROM_WrPacket(uint8_t *Buf, uint16_t DLen);
- extern uint8_t EEPROM_RdPacket(uint8_t *Buf, uint16_t DLen);
- // mcu_flash_drv.c
- typedef struct
- {
- uint32_t addr;
- union U
- {
- uint32_t word;
- uint8_t byte[4];
- } u;
- uint8_t idx;
- } McuFlash_WP_t;
- extern void McuFlash_init(void);
- extern void McuFlash_WaitBusy(void);
- extern void McuFlash_Unlock(void);
- extern void McuFlash_Lock(void);
- #ifndef BOOTLOADER_ENABLE
- extern int8_t McuFlash_ErasePage(uint32_t addr);
- extern int8_t McuFlash_WordPP(uint32_t addr, uint32_t data);
- #else
- // the following functions implemented in bootloader, shared for APP
- typedef uint32_t (*upgrade_pkg_crc32_fpt)(const uint8_t *buf, uint32_t size);
- typedef void (*McuFlash_ErasePage_fpt)(uint32_t addr);
- typedef void (*McuFlash_WordPP_fpt)(uint32_t addr, uint32_t data);
- #define upgrade_pkg_crc32(x, y) (*((upgrade_pkg_crc32_fpt)(*(uint32_t *)0xc0u)))((x), (y))
- #define McuFlash_ErasePage(x) (*((McuFlash_ErasePage_fpt)(*(uint32_t *)0xc4u)))((x))
- #define McuFlash_WordPP(x, y) (*((McuFlash_WordPP_fpt)(*(uint32_t *)0xc8u)))((x), (y))
- #endif
- extern void McuFlash_EraseSegment(uint32_t start, uint32_t len);
- extern void McuFlash_OpenWP(uint32_t addr, McuFlash_WP_t *p);
- extern void McuFlash_Buf2WP(uint8_t *buf, uint32_t len, McuFlash_WP_t *p);
- extern void McuFlash_CloseWP(McuFlash_WP_t *p);
- // button_drv.c
- #define BTNKEY_TOUCH_FALL (0x00000010u)
- // #define BTNKEY_TOUCH_RISE (0x00000010u)
- extern uint32_t BtnKeyHistory;
- extern void ButtonInit(void);
- extern uint32_t ButtonGetEvents(void);
- // debug_uart_drv.c
- extern void debug_uart_init(void);
- // lpuart0_drv.c
- extern void lpuart0_drv_init(uint8_t baud);
- extern void lpuart0_tx_str(char *str);
- extern void lpuart0_set_rx_itf(uart_rx_itf itf);
- // nb_drv.c
- #define nb_tx_str lpuart0_tx_str
- // NB_EN: PF00(AF0)
- #define NB_EN_PIN_FUNC PF00_AF0
- #define NB_EN_GPIO_PORT GpioPortF
- #define NB_EN_GPIO_BITMASK GpioBitMsk0
- extern void nb_power_on(uint8_t baud);
- extern void nb_power_off(void);
- #define LOW_PWR_THRESHOLD (3200)
- // hardware_id_drv.c
- extern void HardwareIdInit(void);
- extern uint16_t GetHardwareId(void);
- // mux_drv.c
- void mux_init(void);
- void set_mux_ch(uint32_t ch);
- uint32_t get_mux_ch(void);
- #include "param.h"
- // add by yuewei 20260327 start
- // 输入滤波:速度 & 温度(越小越平滑)
- #define SPDLVL_FILTER_ALPHA 0.2f
- #define TEMP_FILTER_ALPHA 0.3f
- // 输出流量滤波(最终结果平滑)
- #define VOL_FILTER_ALPHA 0.15f
- // add by yuewei 20260327 end
- // add by yuewei 20260325 用于飞行时间差低通平滑滤波
- #define DIFF_TOFF_FILTER_ALPHA 0.5f
- // add by yuewei 20260325 用于防止APSR二次修正来回跳变
- #define APSR_MAX_STEP 0.01f
- // add by yuewei 20260305 start
- // #define APP_DEBUG_PRINT
- #ifdef APP_DEBUG_PRINT
- #define LOG(...) \
- do \
- { \
- rt_enter_critical(); \
- printf(__VA_ARGS__); \
- rt_exit_critical(); \
- } while (0)
- #else
- #define LOG(...) \
- do \
- { \
- } while (0)
- // #define LOG(...) rt_thread_mdelay(2) //do {} while(0)
- #endif
- // add by yuewei 20260309 to deal hongwai long data
- extern uint8_t HONGWAI_LONG_RX_FLAG;
- // add by yuewei 20260310 to show lcd all
- extern void lcd_show_all(void);
- // add by yuewei 20260310 to enter check mode when LcdPage is 'disp_time' and key long press 5 seconds
- extern en_lcd_page_t LcdPage;
- // add by yuewei 20260310 to enter check mode when LcdPage is 'disp_time' time and key long press 5 seconds
- extern void check_enter_check_mode_by_key_press(void);
- // add by yuewei 20260310 to exit check mode when LcdPage is 'disp_cumflow' and key long press 5 seconds
- extern void check_enter_normal_mode_by_key_press(void);
- // add by yuewei 20260318, for lcd display remain time
- extern uint16_t ot_count_down;
- // add by yuewei 20260319, TDC中断信号量
- extern struct rt_semaphore tdc_isr_sem;
- // add by yuewei 20260422, RTC中断信号量
- extern struct rt_semaphore rtc_isr_sem;
- // add by yuewei 20260422, RTC中断函数迁移出中断
- extern void rtc_interrupt_deal_tdc(void);
- // add by yuewei 20260319, TDC中断函数迁移出中断
- extern void tof_isr_convert_tof_to_flow(void);
- // add by yuewei 20260416, for lcd display pass
- extern void lcd_show_key_trigger_report_pass(void);
- // add by yuewei 20260424, for lcd display "ot-Err"
- extern uint8_t G_OT_ERROR_FLAG_CNT;
- // add by yuewei 20260424, for lcd display ot error
- extern void lcd_show_ot_error(void);
- // add by yuewei 20260416 to countdown LcdTimer per 1 second
- extern void lcd_timer_countdown(void);
- // add by yuewei 20260416, short key press toggle value,defalt: 0->display fw cumflow,1->display bw cumflow
- extern uint8_t g_lcd_display_check_bw_cum_flow;
- extern uint8_t lcd_disp_pass_flag; // wxl20260423 用于显示pass字段
- extern void tof_filter_init(uint8_t ch_num); // 20260429
- extern uint8_t G_STATIC_OT_SETTING_FLAG; // 20260429 正在设置静态OT,不进行飞行时间差滤波
- extern void set_rtc_interrupt_time(float time); // add by yuewei 20260519,设置RTC:多少秒钟进一次中断,time:0.5s, 1.0s, 1.5s, 2.0s...
- extern float get_rtc_interrupt_time(void); // add by yuewei 20260519,从 RTC->CR0 读取 PRDX 值,返回中断间隔秒数
- // add by wuxiaolin 20260313 start
- // param.h 参数和记录读写相关接口
- extern uint8_t get_param_firmware_ver(void); // 获取当前版本号
- // extern int8_t GetChNum(void);//获取超声波通道数
- extern int8_t set_hardware_para(HardWareParaDef *HardWarePara); // 设置硬件参数
- extern int8_t get_hardware_para(HardWareParaDef *HardWarePara); // 读取硬件参数
- extern int8_t set_patch_info(PATCH_INFO_DEF *patch_info); // 设置表端开始升级信息,收到升级指令后调用
- extern uint8_t write_diff_patch_to_flash(DIFF_PACKET_DEF *Packet); // 写差分包,收到差分包后调用
- extern int8_t set_server_ip_port_para(SERVER_IP_PORT_DEF *server_ip_para); // 设置服务器ip和端口号
- extern int8_t get_server_ip_port_para(SERVER_IP_PORT_DEF *server_ip_para); // 读取服务ip和端口号
- extern int8_t set_regular_report_para(REGULAR_REPORT_DEF *regular_report_para); // 设置定时上报周期和时间间隔
- extern int8_t get_regular_report_para(REGULAR_REPORT_DEF *regular_report_para); // 读取定时上报周期和时间间隔
- extern int8_t set_dma_regular_report_para(DMA_REGULAR_REPORT_DEF *dma_report_para); // 设置dma上报时间参数
- extern int8_t get_dma_regular_report_para(DMA_REGULAR_REPORT_DEF *dma_report_para); // 读取dma定时上报时间参数
- extern int8_t set_flow_alarm_para(FLOW_ALARM_PARA_DEF *flow_alarm_para); // 设置流量告警参数
- extern int8_t get_flow_alarm_para(FLOW_ALARM_PARA_DEF *flow_alarm_para); // 读取流量告警参数
- extern int8_t set_press_alarm_para(PRESS_ALARM_PARA_DEF *press_alarm_para); // 设置压力告警参数
- extern int8_t get_press_alarm_para(PRESS_ALARM_PARA_DEF *press_alarm_para); // 获取压力告警参数
- extern int8_t set_temp_alarm_para(TEMP_ALARM_PARA_DEF *temp_alarm_para); // 设施温度告警参数
- extern int8_t get_temp_alarm_para(TEMP_ALARM_PARA_DEF *temp_alarm_para); // 读取温度告警参数
- extern int8_t set_settlement_day_para(SETTLEMENT_DAY_DEF *settlement_day_para); // 设置表端结算日参数
- extern int8_t get_settlement_day_para(SETTLEMENT_DAY_DEF *settlement_day_para); // 读取表端结算日参数
- extern int8_t set_meter_bottom_data(METER_BOTTOM_DEF *bottom_data); // 设置表底读数
- extern int8_t get_18month_record_data(uint8_t *data); // 读取月结数据
- extern int8_t get_30day_record_data(uint8_t *data); // 读取日结数据
- extern int8_t get_hour_record_data(uint8_t year, uint8_t month, uint8_t day, uint8_t *data); // 读取时结数据
- extern int8_t get_5min_record_data(GET_5MIN_REOCORD_DEF *get_5min_record_data, uint16_t numb, uint8_t *data); // 读取5分钟密集数据
- extern int8_t get_log_record(uint8_t start, uint8_t num, uint8_t *data); // 读取日志数据 暂未实现
- extern int8_t set_channel_numb(uint8_t *numb); // 设置声道数
- extern int8_t get_channel_numb(uint8_t *numb); // 设置声道数
- extern int8_t get_device_addr(uint8_t *data); // 获取设备地址
- extern int8_t set_device_addr(uint8_t *data); // 设置表地址
- extern int8_t set_flow_para(FLOW_PARA_DEF *flow_para); // 设置流量参数
- extern int8_t get_flow_para(FLOW_PARA_DEF *flow_para); // 读取流量参数
- extern int8_t set_deltaTC_flow_para(DELTA_TC_FLOW_PARA_DEF *deltaTC_para); // 设置德尔塔TC流量参数
- extern int8_t get_deltaTC_flow_para(DELTA_TC_FLOW_PARA_DEF *deltaTC_para); // 读取德尔塔TC流量参数
- extern int8_t set_diameter_and_temp_compensation(DIAMETER_AND_TEMP_COMPENSATION_DEF *data); // 设置口径和温度补偿系数
- extern int8_t get_diameter_and_temp_compensation(DIAMETER_AND_TEMP_COMPENSATION_DEF *data); // 读取口径和温度补偿系数
- extern int8_t set_auto_match_level_para(AUTO_MATCH_LEVEL_PARA_DEF *data); // 设置自动匹配电平参数
- extern int8_t get_auto_match_level_para(AUTO_MATCH_LEVEL_PARA_DEF *data); // 获取自动匹配电平参数
- extern int8_t set_nbqr_para(NBQR_PARA_DEF *nbqr_para); // 设置nbqr参数
- extern int8_t get_nbqr_para(NBQR_PARA_DEF *nbqr_para); // 读取nbqr参数
- extern uint8_t G_TDC_DEEP_SLEEP;
- // add by wuxiaolin 20260313 end
- // extern uint8_t NB_RUN_UPDATE_FLAG;//wxl 2026-4-8 nb下载代码时,禁止长时间占用中断
- #ifdef DEBUG_LOW_POWER
- extern uint32_t get_time[32];
- extern uint8_t gtcnt;
- extern void get_internal_time(void);
- extern uint16_t tms;
- #define SYS_MS_CNT rt_tick_get()
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif
|