快捷搜索: 王者荣耀 脱发

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接收中断
经验分享 程序员 微信小程序 职场和发展