msp430的spi模块分别具有接收和发送中断,主机想通过spi获得从机的一个字符,且尽可能的利用中断方式,以实现低功耗,如何编写这样的流程呢?(我看网上的示例,基本都是用的轮询的方式来实现的,效率较低)。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
msp430的spi模块分别具有接收和发送中断,主机想通过spi获得从机的一个字符,且尽可能的利用中断方式,以实现低功耗,如何编写这样的流程呢?(我看网上的示例,基本都是用的轮询的方式来实现的,效率较低)。
恩,这个是官方例程。感谢。
其实我主要的疑问是如何封装spi的传输方式,例程中spi中断与系统的主任务交织在了一起。我想用一种方式把它独立出来,以实现spi硬件操作的封装,然后上层芯片传输协议封装成抽象功能,主程序任务对芯片功能的调用。
因此中断函数中最好不出现主任务中的东西,主任务中也最好不出现对硬件寄存器的操作。
我粗略有一个想法,是这样的:
1. 对于主设备来说,spi硬件操作发送和接收应该是一个整体,不能像uart一样发送功能和接收功能分开设计。因此就需要封装函数是一个带有发送字符串与接收期望数据的结合函数。
(其实这样也符合实际使用环境,对芯片的操作就是:通讯-应答,通讯-应答,通讯-应答这样成对出现的过程)
2. 而由于msp430的接收中断和发送中断又是分离的。因此发送需要一个字符串来存储发送序列,而发送完成并不代表接收完成,需要在接收函数中产生一个事件来标志通讯的完成,并且存储接收的数据。
(ps. 我总觉得对于spi主设备来说,这两个中断合并为一个中断更好一些,便于封装,因为spi:发送总伴随着接收,发送完成即接收完成。两个中断合并对于spi主设备向从设备索要数据更加方便:发送完即处理接收的数据。而现在两个中断经常不同步,好像接收中断更晚一些,这样一个相关性很大的动作被分解在两个中断函数中了,这两个中断函数之间就需要全局变量来传递信息)
3. 芯片的驱动层面除了安排发送内容,还需申请接收空间。将这两方面的指针传递给spi硬件操作函数,然后进入低功耗模式。spi硬件的发送中断顺序发送数据,spi接收中断顺序接收数据并产生唤醒事件,来继续启动驱动层面后续的工作。
本人粗糙想法,不知是否有更好的解决方法,指点一二。