完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我正在使用PIC32 MX170F256B。我使用SPI外设作为8位模式的主控器,具有增强的缓冲模式使能。这应该为TX和RX提供16字节FIFO。我有一个例程,通过SPI传输多个字节的数据,当然,RX FIFO将包含一个虚拟字节,用于我发送的每个字节。稍后,在代码中,我有一个从SPI读取数据的例程。为了正确地读取数据,我需要清除从我以前发送的RX FIFO中的虚拟字节。显然,我可以在for循环中这样做,但我想知道是否有一种更简单(更快)的方法来清除RX FIFO中的数据。有一件事我还没有测试是什么发生在FIFOS中的数据时,SPI外围设备被禁用,然后重新启用。不幸的是,关于增强缓冲模式的文档不是很广泛…谢谢!
|
|
相关推荐
3个回答
|
|
嗨,依赖无证行为作为省时器是很危险的,不仅可能在不同系列的芯片之间改变,而且在硅修订之间甚至会改变。节省时间的一种方法是使用DMA通道进行读取——在做任何操作之前配置DMA通道。当一个字节变为可用的时候,兴读它(把它放在一个单字节变量的暂存内存地址)。停止/禁用DMA通道,然后执行任何实际需要读取响应或将配置更改为指向您希望真正读取到的位置的操作。这可能是最有效的方法,但是确实需要一些配置。如果您提前知道需要读取多少字节才能为每个字节划线=SPIxBUF;scratch=SPIxBUF;...这些不会被优化,因为SPIxBUF在处理器头文件中被声明为易失性的,并且它节省了for循环的开销。还使用case:select语句,如果至少知道最大可能的字节数,则会失败:pseudocode.(numbytes send)case 10scratch=SPIxBUF;case 9scratch=SPIxBUF;....(注意,我跳过了‘中断’语句,导致10字节执行10和9和8和7……)祝你们好运!
|
|
|
|
没有必要把它分配给一个哑变量(不管怎样,分配很容易被优化),只要DOXPIXBUF;
|
|
|
|
我不知道XC32,但是大多数编译器所做的只是简单地将SFR读入一个工作寄存器,然后丢弃它,这通常是一个指令,而不是两个或更多的指令。
|
|
|
|
只有小组成员才能发言,加入小组>>
5238 浏览 9 评论
2028 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3204 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
774浏览 1评论
664浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
592浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
674浏览 0评论
574浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:00 , Processed in 1.540661 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号