Raspberry Pi Pico C/C++ sdk 使用SPI中断
项目场景:
提示:这里简述项目相关背景:
Raspberry Pi Pico,使用SPI接收数据时,启用SPI中断
问题描述
提示:这里描述项目中遇到的问题:
Raspberry Pico官方C/C++ sdk中,关于SPI中断的阐述比较简略,可以找到的相关语句只有 hardware_irq部分: irq_set_exclusive_handler(uint num, irq_handler_t handler) irq_set_enabled(uint num, bool enabled); 使用这两个语句,设定SPI0通道的中断响应函数:
irq_set_exclusive_handler(SPI0_IRQ, on_spi_rx); irq_set_enabled(SPI0_IRQ, true);
测试中SPI中断并未响应。
原因分析:
提示:这里填写问题的分析:
参考Pico的UART中断设定方式,除了使用irq_set_enabled,还调用了uart_set_irq_enables (uart_inst_t *uart, bool rx_has_data, bool tx_needs_data)来开启uart中断。参考Pico官方Datasheet,SPI接收中断由spi rxfifo给出,需要从中断控制寄存器SSPIMSC写入控制位,来开启rx fifo的中断发出。
解决方案:
提示:这里填写该问题的具体解决方案:
在irq设置的基础上,加入SSPIMSC寄存器的写入,可以实现SPI接收中断。发送中断同理。
irq_set_exclusive_handler(SPI0_IRQ, on_spi_rx); irq_set_enabled(SPI0_IRQ, true); *((io_rw_32 *) (SPI0_BASE + SPI_SSPIMSC_OFFSET))=(1<<2); //设置SSPIMSC寄存器,打开fifo接收中断
下一篇:
NLP(十一):PaddlePaddle