APP DSPI驱动
该驱动仅适用于GR5526和GR5x25。
宏定义
APP_DSPI_PIN_ENABLE
| 描述 | 值 |
|---|---|
| DSPI引脚使能 |
1 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
APP_DSPI_PIN_DISABLE
| 描述 | 值 |
|---|---|
| DSPI引脚不使能 |
0 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
结构体
app_dspi_pin_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_io_type_t type |
设置IO类型 |
同app_io_evt_t中描述 |
| app_io_mux_t mux |
设置IO映射功能 |
参考app_io_init_t结构体,具体映射模式根据芯片Datasheet中的Pin Mux进行选择 |
| uint32_t pin |
设置IO引脚 |
参考app_io_init_t结构体,具体根据芯片Datasheet中DSPI资源进行选择 |
| app_io_pull_t pull |
设置IO上拉/下拉/浮空 |
该参数的取值可以是下列值中的任意一个:
|
| uin8_t enable |
开启或关闭PIN |
该参数的取值可以是下列值中的任意一个:
|
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
app_dspi_pin_cfg_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_dspi_pin_t cs |
DSPI CS引脚配置 |
参考app_dspi_pin_t结构体 |
| app_dspi_pin_t clk |
DSPI CLOCK引脚配置 |
参考app_dspi_pin_t结构体 |
| app_dspi_pin_t mosi |
DSPI MOSI引脚配置 |
参考app_dspi_pin_t结构体 |
| app_dspi_pin_t miso |
DSPI MISO引脚配置 |
参考app_dspi_pin_t结构体 |
| app_dspi_pin_t dcx |
DSPI DCX引脚配置 |
参考app_dspi_pin_t结构体 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
dspi_init_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| uint32_t data_size |
DSPI数据宽度 |
该参数的取值可以是下列值中的任意一个:
|
| uint32_t baud_rate |
DSPI波特率预分频器值,该值将用于配置发送和接收SCK时钟 |
该参数的取值可以是下列值中的任意一个:
|
| uint32_t dspi_mode |
DSPI接口模式 |
该参数的取值可以是下列值中的任意一个:
|
详细信息请参考文件:SDK_Folder\drivers\inc\hal\gr55xx_hal_dspi.h。
app_dspi_dma_cfg_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| dma_channel_t channel | DSPI DMA传输通道 | 同app_dma_params_t中通道描述 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
app_dspi_params_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_dspi_pin_cfg_t pin_cfg |
DSPI引脚功能设置 |
参考app_dspi_pin_cfg_t结构体 |
| app_dspi_dma_cfg_t dma_cfg |
DSPI传输方式选择 |
参考app_dspi_dma_cfg_t结构体 |
| dspi_init_t init |
DSPI初始化参数配置 |
参考dspi_init_t结构体 |
| bool is_soft_cs |
是否通过软件控制CS片选引脚 |
|
| dspi_env_t dspi_env |
仅用于记录初始化设备的句柄、相关参数和信号量等,不需要配置 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
app_dspi_evt_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_dspi_evt_type_t type |
串口事件类型 |
该参数的取值可以是下列值中的任意一个:
|
| union { uint32_t error_code; uint16_t size; }data; |
说明: 若事件类型为传输错误,此处返回错误号; 若事件类型为发送完成,此处显示已传输的数据大小 |
DSPI错误号及对应含义如下:
|
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
app_dspi_command_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| uint32_t instruction |
DSPI指令 |
需要发送的命令数据 |
| uint32_t instruction_size |
DSPI指令位宽 |
需要发送的命令数据位宽,一般取值为:
|
| uint32_t data_size |
DSPI数据位宽 |
需要发送的数据位宽,一般取值为:
|
| uint32_t length |
DSPI发送的数据长度,单位:字节 |
0x0 ~ 0xFFFFFFFF |
详细信息请参考文件:SDK_Folder\drivers\inc\hal\gr55xx_hal_dspi.h。
枚举
app_dspi_evt_type_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_DSPI_EVT_ERROR = 0 |
DSPI发送错误事件 |
| APP_DSPI_EVT_TX_CPLT = 1 |
DSPI发送完成事件 |
| APP_DSPI_EVT_ABORT = 3 |
DSPI中止传输事件 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
app_dspi_state_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_DSPI_INVALID = 0 |
DSPI不可用 |
| APP_DSPI_ACTIVITY = 1 |
DSPI激活 |
| APP_DSPI_SLEEP = 2 |
DSPI睡眠 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
app_dspi_dma_state_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_DSPI_DMA_INVALID | DSPI DMA不可用 |
| APP_DSPI_DMA_ACTIVITY | DSPI DMA激活 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h。
接口函数
| API | 芯片 | ||||
|---|---|---|---|---|---|
| GR551x | GR5526 | GR5x25 | GR533x | GR5405 | |
| app_dspi_init |
N |
Y |
Y |
N |
N |
| app_dspi_deinit |
N |
Y |
Y |
N |
N |
| app_dspi_command_transmit_sync |
N |
Y |
Y |
N |
N |
| app_dspi_command_transmit_async |
N |
Y |
Y |
N |
N |
| app_dspi_command_sync |
N |
Y |
Y |
N |
N |
| app_dspi_command_async |
N |
Y |
Y |
N |
N |
| app_dspi_transmit_sync |
N |
Y |
Y |
N |
N |
| app_dspi_transmit_async |
N |
Y |
Y |
N |
N |
| app_dspi_get_handle |
N |
Y |
Y |
N |
N |
| app_dspi_config_mode |
N |
Y |
Y |
N |
N |
| app_dspi_config_data_size |
N |
Y |
Y |
N |
N |
| app_dspi_abort |
N |
Y |
Y |
N |
N |
| app_dspi_abort_it |
N |
Y |
Y |
N |
N |
app_dspi_init
| 函数原型 | uint16_t app_dspi_init(app_dspi_params_t *p_params, app_dspi_evt_handler_t evt_handler) |
|---|---|
| 功能说明 | 初始化DSPI |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 | 回调函数形式参照typedef void (*app_dspi_evt_handler_t)(app_dspi_evt_t *p_evt); HAL层已经实现中断标志位的清理,用户不用关心中断标志的清理。 |
app_dspi_deinit
| 函数原型 | uint16_t app_dspi_deinit(void) |
|---|---|
| 功能说明 | 反初始化DSPI |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_command_transmit_sync
| 函数原型 | uint16_t app_dspi_command_transmit_sync(app_dspi_command_t *p_cmd, uint8_t *p_data, uint32_t timeout) |
|---|---|
| 功能说明 | DSPI轮询方式(同步)发送数据,带控制命令封装 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_command_transmit_async
| 函数原型 | uint16_t app_dspi_command_transmit_async(app_dspi_command_t *p_cmd, uint8_t *p_data) |
|---|---|
| 功能说明 | DSPI中断方式(异步)发送数据,带控制命令封装 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_command_sync
| 函数原型 | uint16_t app_dspi_command_sync(app_dspi_command_t *p_cmd, uint32_t timeout) |
|---|---|
| 功能说明 | DSPI轮询方式(同步)发送命令 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_command_async
| 函数原型 | uint16_t app_dspi_command_async (app_dspi_command_t *p_cmd) |
|---|---|
| 功能说明 | DSPI中断方式(异步)发送命令 |
| 输入参数 | p_cmd:命令、数据参数的结构体指针 |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_transmit_sync
| 函数原型 | uint16_t app_dspi_transmit_sync(uint8_t *p_data, uint32_t length, uint32_t timeout) |
|---|---|
| 功能说明 | DSPI轮询方式(同步)发送数据 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_transmit_async
| 函数原型 | uint16_t app_dspi_transmit_async(uint8_t *p_data, uint32_t length) |
|---|---|
| 功能说明 | DSPI中断方式(异步)发送数据 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_get_handle
| 函数原型 | dspi_handle_t *app_dspi_get_handle(void) |
|---|---|
| 功能说明 | 获取当前DSPI句柄 |
| 返回值 | dspi_handle_t:DSPI句柄结构体 |
| 备注 |
app_dspi_config_mode
| 函数原型 | uint16_t app_dspi_config_mode(uint32_t mode) |
|---|---|
| 功能说明 |
配置DSPI传输方式:
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_config_data_size
| 函数原型 | uint16_t app_dspi_config_data_size(uint32_t data_size) |
|---|---|
| 功能说明 | 配置DSIP传输数据位宽 |
| 输入参数 | data_size:需要传输的数据位宽,可取(DSPI_DATASIZE_04_BITS ~ DSPI_DATASIZE_32_BITS)参数中的一个 |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_abort
| 函数原型 | uint16_t app_dspi_abort(void) |
|---|---|
| 功能说明 | DSPI中止传输(阻塞方式) |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_abort_it
| 函数原型 | uint16_t app_dspi_abort_it(void) |
|---|---|
| 功能说明 | DSPI中止传输(非阻塞方式,可根据回调函数获取终止完成的状态) |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
DMA接口函数
| API | 芯片 | ||||
|---|---|---|---|---|---|
| GR551x | GR5526 | GR5x25 | GR533x | GR5405 | |
| app_dspi_dma_init |
N |
Y |
Y |
N |
N |
| app_dspi_dma_deinit |
N |
Y |
Y |
N |
N |
| app_dspi_dma_command_transmit_async |
N |
Y |
Y |
N |
N |
| app_dspi_dma_command_async |
N |
Y |
Y |
N |
N |
| app_dspi_dma_transmit_async |
N |
Y |
Y |
N |
N |
app_dspi_dma_init
| 函数原型 | uint16_t app_dspi_dma_init(app_dspi_params_t *p_params) |
|---|---|
| 功能说明 | 初始化DSPI DMA模式 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_dma_deinit
| 函数原型 | uint16_t app_dspi_dma_deinit(void) |
|---|---|
| 功能说明 | 反初始化DSPI DMA模式 |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_dma_command_transmit_async
| 函数原型 | uint16_t app_dspi_dma_command_transmit_async(app_dspi_command_t *p_cmd, uint8_t *p_data) |
|---|---|
| 功能说明 | DSPI以DMA方式(异步)发送数据。先发送命令,后发送数据 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_dma_command_async
| 函数原型 | uint16_t app_dspi_dma_command_async(app_dspi_command_t *p_cmd) |
|---|---|
| 功能说明 | DSPI以DMA方式(异步)发送命令 |
| 输入参数 | p_cmd:存放发送命令的buffer |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_dspi_dma_transmit_async
| 函数原型 | uint16_t app_dspi_dma_transmit_async(uint8_t *p_data, uint32_t length) |
|---|---|
| 功能说明 | DSPI以DMA方式(异步)发送数据 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
示例工程
DSPI刷屏测试
示例工程实现DSPI刷屏测试,定时刷新ST7789V屏幕,工程路径:SDK_Folder\projects\peripheral\dspi\app_dspi。该示例仅适用于GR5526、GR5525。
流程图
DSPI传输初始化参数给屏幕,实现屏幕初始化。最后将显示数据定时传输到屏幕,实现定时刷新屏幕。
初始化参数
app_dspi_params_t dspi_params = {
.pin_cfg = {
.cs = {
.type = APP_IO_TYPE_GPIOB,
.mux = APP_IO_MUX_2,
.pin = APP_IO_PIN_4,
.pull = APP_IO_NOPULL,
.enable = APP_DSPI_PIN_ENABLE,
},
.clk = {
.type = APP_IO_TYPE_GPIOB,
.mux = APP_IO_MUX_2,
.pin = APP_IO_PIN_0,
.pull = APP_IO_NOPULL,
.enable = APP_DSPI_PIN_ENABLE,
},
.mosi = {
.type = APP_IO_TYPE_GPIOB,
.mux = APP_IO_MUX_2,
.pin = APP_IO_PIN_1,
.pull = APP_IO_NOPULL,
.enable = APP_DSPI_PIN_ENABLE,
},
.miso = {
.type = APP_IO_TYPE_GPIOB,
.mux = APP_IO_MUX_2,
.pin = APP_IO_PIN_2,
.pull = APP_IO_NOPULL,
.enable = APP_DSPI_PIN_ENABLE,
},
.dcx = {
.type = APP_IO_TYPE_GPIOB,
.mux = APP_IO_MUX_2,
.pin = APP_IO_PIN_3,
.pull = APP_IO_NOPULL,
.enable = APP_DSPI_PIN_ENABLE,
},
},
.dma_cfg.channel = DMA_Channel0,
.init = {
.data_size = DSPI_DATASIZE_08_BITS,
.baud_rate = DSPI_BAUD_RATE_2P1PCLK,
. Init. baud_rate = DSPI_PROT_MODE_3W1L,
},
};
- pin_cfg:DSPI引脚配置
包含片选引脚CS、时钟引脚CLK、主出从入引脚MOSI、主入从出引脚MISO、控制引脚DCX,配置IO类型、PIN脚、上下拉模式和复用成DSPI引脚的复用模式。
- Init:DSPI传输参数配置
- Init.data_size:数据传输位宽
- Init.baud_rate:DSPI波特率预分频器值,选择2分频DSPI_BAUD_RATE_2P1PCLK,DSPI时钟等于串行时钟fPCLK除以预分频器值
- Init.Init.baud_rate:DSPI模式选用DSPI_PROT_MODE_3W1L,即3线1 lane
重要函数
- 初始化DSPI模块
ret = app_dspi_init(¶ms_t, app_dspi_evt_handler) - 配置DMA传输方式
ret = app_dspi_dma_init(¶ms_t) - 传输初始化参数
app_dspi_dma_command_transmit_async(&g_cmd, (uint8_t *)s_data_8) - 传输控制命令
app_dspi_dma_command_async(&g_cmd) - 初始化屏幕显示区域
app_dspi_display_coordinates(DSPI_ST7789V_X_START, DSPI_ST7789V_X_END, DSPI_ST7789V_Y_START, DSPI_ST7789V_Y_END) - 传输图像数据,刷新屏幕
app_dspi_display_write((uint8_t *)pixel, DSPI_POXEL_LEN * 2)
测试验证
- 硬件准备:LCD屏幕(型号:ST7789V)
- 测试步骤:
- 开发板连接LCD屏幕
- 下载运行程序,并打开串口调试助手查看打印日志
- 查看屏幕正常刷新显示,测试成功。