CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

spi在rtos无法正常运行 GR551x

已解决

jia****com

2021-08-20 14:36

在无rtos的情况下,显示屏使用spi dma方式,采用async函数可以正常发送;

但是在引入freertos后,aysnc函数则一直处于死循环while中

app_spi_transmit_async(APP_SPI_ID_MASTER, &cmd, 1);
while(master_tx_done == 0);

0收藏

0赞成

最佳答案

Barton

2021-08-23 16:42

你好,

在SPI初始化过程中,会调用FreeRTOS的相关API,这些API调用后,FreeRTOS会通过设置BASEPRI的方式禁止中断,在任务开始调度后(调用vTaskStartScheduler()),会重新使能中断。


因此,在FreeRTOS环境下,需要在调度开始后才能调用SPI的相关操作接口。

0条评论

1赞成

0收藏

您的评论

Barton

2021-08-20 18:27

你好,

这个接口我之前用过,没有碰到过这个问题,请问你使用的是哪个版本的sdk呢?

建议:

1、注意调用 app_spi_transmit_async的函数返回值是否正确;

2、只在一个task中操作spi,还是多个task中有操作,会不会是重入导致的异常;

0条评论

0赞成

0收藏

您的评论

jia****com

2021-08-21 12:02

非常感谢您的回复

我在1.6.09和1.6.10上都试了,dma配置的是 通道 0和1,没有成功。

app_spi_transmit_async 返回的是 APP_DRV_SUCCESS

这个函数是在初始化的时候,也就是创建task之前调用的,

1条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注