AC63_BT_SDK/apps/common/include/ex_mcu_uart.h
2025-02-18 15:40:42 +08:00

114 lines
4.4 KiB
C

#ifndef __EX_MCU_UART_H__
#define __EX_MCU_UART_H__
#include "app_config.h"
#if TCFG_EX_MCU_ENABLE
#include "ex_mcu.h"
#include "fs.h"
#include "asm/clock.h"
#include "asm/gpio.h"
#define EX_MCU_APP_FILE_PATH SDFILE_RES_ROOT_PATH"ex_mcu.bin"
#if TCFG_EX_MCU_OS_ENABLE
//当前最大发送文件分块的长度为128字节每次
#define EX_MCU_APP_BUF_SIZE 150
#endif
//ex_mcu_uart_handle 操作句柄
struct ex_mcu_uart_handle {
struct ex_mcu_platform_data *data;
JL_UART_TypeDef *UART;
//当前波特率
u32 baudrate;
u32 file_cpu_acess_begin;
};
//=======================================================================//
// 公共操作部分 //
//=======================================================================//
u8 ucEx_mcu_reset(void);
u8 ucEx_mcu_exit(void);
//=======================================================================//
// 串口操作部分 //
//=======================================================================//
u8 ucEx_mcu_tx_rx_init(const struct ex_mcu_platform_data *data);
void vEx_mcu_set_baudrate(u32 baudrate);
void vEx_mcu_uart_tx_buf(u8 *uart_dma_buf, u32 dma_buf_len);
#if TCFG_EX_MCU_OS_ENABLE
u8 ucEx_mcu_uart_rx_init(u8 *uart_dma_buf, u32 dma_buf_len/* , u32 timeout*/);
u32 ulEx_mcu_uart_rx_buf(void);
u32 vEx_mcu_uart_tx_buf_client(u8 *uart_dma_buf, u32 dma_buf_len);
u32 ulEx_mcu_uart_rx_buf_client(u8 *uart_dma_buf, u32 dma_buf_len, u32 timeout);
#else
u32 ulEx_mcu_uart_rx_buf(u8 *uart_dma_buf, u32 dma_buf_len, u32 timeout);
#endif
//=======================================================================//
// 文件系统操作部分 //
//=======================================================================//
void *vEx_mcu_file_open(const char *file_path);
u32 ulEx_mcu_file_read(void *file, void *buf, u32 len);
u32 ulEx_mcu_file_seek(void *file, u32 offset);
//=======================================================================//
// 延时操作部分 //
//=======================================================================//
void vEx_mcu_udelay(unsigned int t);
void vEx_mcu_os_delay(unsigned int t);
//=======================================================================//
// 调用API部分 //
//=======================================================================//
u8 ucEx_mcu_uart_app_file_download(const char *file_app, u32 retry, u32 retry_timeout, u32 timeout);
//=======================================================================//
// 参数初始化部分 //
//=======================================================================//
//参数通过board_devices_init的ucEx_mcu_init(&ex_mcu_data);传递到底层ex_mcu.c
#define EX_MCU_PLATFORM_DATA_BEGIN(data) \
struct ex_mcu_platform_data data = {
#if TCFG_EX_MCU_OS_ENABLE
#define EX_MCU_PLATFORM_DATA_END() \
.hand_baudrate = 9600, \
.reset = ucEx_mcu_reset, \
.open = vEx_mcu_file_open, \
.read = ulEx_mcu_file_read, \
.seek = ulEx_mcu_file_seek, \
.tx_rx_init = ucEx_mcu_tx_rx_init, \
.tx_buf = vEx_mcu_uart_tx_buf, \
.tx_buf_client = vEx_mcu_uart_tx_buf_client, \
.rx_init = ucEx_mcu_uart_rx_init, \
.rx_buf = ulEx_mcu_uart_rx_buf, \
.rx_buf_client = ulEx_mcu_uart_rx_buf_client, \
.set_baudrate = vEx_mcu_set_baudrate, \
.exit = ucEx_mcu_exit, \
.delay = vEx_mcu_os_delay, \
};
#else
#define EX_MCU_PLATFORM_DATA_END() \
.hand_baudrate = 9600,\
.reset = ucEx_mcu_reset, \
.open = vEx_mcu_file_open, \
.read = ulEx_mcu_file_read, \
.seek = ulEx_mcu_file_seek, \
.tx_rx_init = ucEx_mcu_tx_rx_init, \
.tx_buf = vEx_mcu_uart_tx_buf, \
.rx_buf = ulEx_mcu_uart_rx_buf, \
.set_baudrate = vEx_mcu_set_baudrate, \
.delay = vEx_mcu_udelay, \
};
#endif
#endif /* #if TCFG_EX_MCU_ENABLE */
#endif /* #ifndef __EX_MCU_UART_H__ */