ESP32 SPI-slave 用中断实时采集外部AD值失败的问题

Owen977
Posts: 2
Joined: Tue Jun 14, 2022 8:55 am

ESP32 SPI-slave 用中断实时采集外部AD值失败的问题

Postby Owen977 » Tue Jun 14, 2022 9:19 am

大家好,我用ESP32 SPI slave实时采集外部AD值失败,若各位有相关经验,提供任何相关信息和建议都可能会帮到我,先在此表示感谢!
用ESP32作为SPI从机,实时采集外部AD数据,每隔一定时间,数据源转换完成通过DRDY引脚给ESP中断信号,ESP检测到中断后及时通过SPI实时读取AD值,需要在中断产生后马上响应并处理,若不及时读取将丢失数据 遇到的问题现象:AD数据输出时间仅32us左右,中断延迟响应,当处理中断执行中断函数时,AD数据已输出完毕已为时已晚,若无法及时处理数据,调用spi_slave_transmit读取出值全是0xFF
用示波器抓取波形,外部AD的时钟引脚和数据输出引脚波形正常。 示波器查看波形发现中断响应(调用spi_slave_transmit时)滞后DRDY外部中断产生,比如正常应在①后立即读取SPI,实际波形是在②以后才处理中断读取SPI。外部中断根据调用spi_slave_transmit采集AD值,示波器查看波形发现中断响应(调用spi_slave_transmit时)滞后DRDY外部中断,比如正常应在①后立即读取SPI,实际波形是在②以后才处理中断读取SPI。
目前我尝试过
1 直接在GPIO中断函数中调用spi_slave_transmit,结果是触发panic重启
2 创建二值信号量、read_data_task,在中断函数里释放信号量xSemaphoreGiveFromISR(semaphore_handle, &xHigherPriorityTaskWoken),任务中阻塞获取信号直到获取到就调用spi_slave_transmit,结果读出来仍错误
3 创建read_data_task,在读完spi后挂起当前任务,在中断函数xTaskResumeFromISR(xHandle)恢复任务
请问我需要怎么样修改代码来减小这个滞后的时间呢?
Attachments
示波器波形.jpg
示波器波形.jpg (41.33 KiB) Viewed 839 times

Who is online

Users browsing this forum: No registered users and 50 guests