false

false

EN

spi在rtos无法正常运行 【已解决】

jia****com

2021-08-20 14:36:26

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

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

app_spi_transmit_async(APP_SPI_ID_MASTER, &cmd, 1); 
 while(master_tx_done == 0);
最佳答案

Barton

2021-08-23 16:42:07

你好,

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


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

0条评论

您的评论

Barton

2021-08-20 18:27:21

你好,

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

建议:

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

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

0条评论

您的评论

jia****com

2021-08-21 12:02:04

非常感谢您的回复

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

app_spi_transmit_async 返回的是 APP_DRV_SUCCESS

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

1条评论

您的评论

共 3条记录
1

您的回答