英飞凌
直播中

刘辉

7年用户 1056经验值
私信 关注

在PWM中断中通过SPI发送数据失败的原因?

您好:最近在电机开发过程中,用SPI控制MOS驱动,打开关闭电机。            在PWM中断中通过SPI发送数据会出现如下问题。         1.采用Cy_SCB_SPI_Transfer函数发送,查询发送状态,位始终处于发送中的状态,导致程序一直停在此处,不在中断中发送就能发送完成。         2.采用Cy_SCB_SPI_WriteArray函数可以在PWM中断中完成发送,但是不能同步读取SPI接收的数据。      

回帖(1)

李涛

2024-5-23 17:04:25
在PWM中断中通过SPI发送数据失败的原因可能有以下几点:

1. 中断优先级问题:在嵌入式系统中,中断优先级是非常重要的。如果PWM中断的优先级高于SPI中断,那么在PWM中断中执行SPI操作可能会导致SPI中断被阻塞,从而无法正常发送数据。解决方法是调整中断优先级,确保SPI中断能够被及时处理。

2. 中断嵌套问题:在某些情况下,PWM中断中可能会触发其他中断,导致中断嵌套。这可能会导致SPI操作无法正常进行。解决方法是检查代码,确保没有其他中断被触发,或者调整中断优先级,避免中断嵌套。

3. SPI时钟速率问题:SPI通信需要在特定的时钟速率下进行。如果在PWM中断中执行SPI操作,可能会导致SPI时钟速率发生变化,从而影响数据传输。解决方法是检查SPI时钟设置,确保在PWM中断中执行SPI操作时,时钟速率保持稳定。

4. SPI缓冲区问题:在SPI通信中,数据需要在发送和接收缓冲区中进行传输。如果在PWM中断中执行SPI操作,可能会导致缓冲区溢出或不足,从而影响数据传输。解决方法是检查SPI缓冲区设置,确保在PWM中断中执行SPI操作时,缓冲区大小足够。

5. 代码逻辑问题:在PWM中断中执行SPI操作时,可能存在代码逻辑错误,导致数据无法正常发送。解决方法是仔细检查代码,确保在PWM中断中执行SPI操作时,代码逻辑正确。

针对您提到的两个问题,我提供以下建议:

1. 对于Cy_SCB_SPI_Transfer函数发送问题,您可以尝试调整中断优先级,确保SPI中断能够被及时处理。同时,检查SPI时钟设置和缓冲区设置,确保它们在PWM中断中执行SPI操作时保持稳定和足够。

2. 对于Cy_SCB_SPI_WriteArray函数同步读取SPI接收数据问题,您可以尝试使用SPI的DMA(直接内存访问)功能,将接收到的数据直接传输到内存中,从而实现同步读取。此外,还可以检查SPI时钟速率和缓冲区设置,确保它们在PWM中断中执行SPI操作时保持稳定和足够。

总之,解决PWM中断中通过SPI发送数据失败的问题,需要从中断优先级、中断嵌套、SPI时钟速率、缓冲区设置和代码逻辑等方面进行排查和调整。希望这些建议对您有所帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分