栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Raspberry Pi Pico C/C++ sdk 使用SPI中断

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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接收中断
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号