完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
问题是,在SPI1CON2bits.BUSY被清除之后,时钟似乎继续计时。初始化:Exchange 8bit-根据应用程序注释TB3157根据数据表p523,当TXR=RXR=1时,当BMODE=1时,每当RXFIFO未满并且TXFIF中存在数据时,就会发生数据传输。在实践中,只要RXFIFO未满,只要SPIxTxB寄存器被写入,数据就会被发送/接收,匹配老的8位微芯片设备上的SPI(MSSP)模块的功能和数据表p519:在数据传输过程中,SPI模块设置BUSY位。SpxCON2。用户可以轮询该位以确定SPI模块的当前状态,并了解通信何时完成。请注意,所附照片2“26K42-.y-config”显示了从选择(在从Exchange8bit退出时由软件控制)在所有8位被计时之前变高?这怎么会发生?肯定的是(SPI1CON2BITS=1);线路应该防止退出交换机8BIT?(附上照片1“26K22”-这就是我的目标。有趣的是,字节之间的暂停明显更大。还要注意,在MOSI(黄色跟踪)上,虽然两者都配置为“活动高”,但在旧图片上,它在字节之间浮动得很高。
|
|
相关推荐
13个回答
|
|
|
我已经使用了K42 SPI在从属模式中取得了良好的成功,但我还没有使用SPI主模式,所以我只是通过数据表。数据表似乎确实暗示,BUSY在最后一位被传输之前不应该变低,并且应用程序说明依赖于它,因为RXB在BUSY变低之后立即被读取。我想知道你们是否收到了很好的数据。由于BUSY看起来实际上处于低中字节,所以似乎接收的数据应该被损坏(因为您在紧接着读取RXB),新的SPI外围设备确实提供了许多其他方法来确定传输结束。SRMTIF(移位寄存器空标志)、RXBF(接收缓冲区满)或RXIF(接收中断标志)可以用来代替BUSY。在我的从代码中,我仅通过第一字节的中断来操作RXIF,并在中断期间轮询RXIF。
|
|
|
|
|
|
如果我是慈善的,我会说数据表中的这个小广告误导人,否则根据我使用PIC18F25K42(它与您的'26K42'具有相同的SPI模块)的经验,我会说这完全是错误的。提供给移位寄存器并开始移位。除非BUSY标志变为零,否则不应该再写一个字节。但是……正如您(和我)所发现的,事务没有完成。我使用SRMTIF标志来指示何时可以读取。我修改了您的交换函数,如下所示。调用序列如下(这里没有阅读,只是想显示测试SRMTIF的结果):其中,SPISS被定义为我已启用用于输出的GPIO位。也许还有其他方法,但是这个方法适合我。发表底线评论(如果允许的话):为什么你在初始化函数中写SP11TXBUF?你必须“启动泵”才能开始工作吗?如果一切都好的话,这真的是不必要的(甚至是一个bug)。可能没有伤害,没有犯规,但是这样的多余的东西混淆了文件和代码的未来维护者。问候,戴夫
|
|
|
|
|
|
很好。@ McBurnink,DaveW7X -谢谢。作为附加图像,SRMITF工作。它总是这样:新芯片,新数据表…随着时间的推移,错误会得到解决吗?从来没有完全快乐,不禁想知道SRMTIF是否没有空太慢…现在“时钟脉冲串”(字节)的持续时间至少和时钟脉冲本身的宽度一样宽。(比较早期的示例与仅忙)随时间增加。
|
|
|
|
|
|
初始化函数是在MCC中可配置的所有寄存器的复制/粘贴。我以此作为起点。在以后对上文发布的修订中,更正了一个错误:根据数据表,在设置“EN”(启用SPI1CON0)之后,不应该修改某些位。虽然修理并没有解决任何问题。;)
|
|
|
|
|
|
Microchip在十二月发布了RevB K42数据表,但我没有发现任何与SPI相关的明显变化。我与PIC数据表(至少8B)有爱/恨的关系。它们是全面的,并且应用程序和技术说明(尽管非常有用)不需要在一个文档中查看几乎所有的技术细节(除了编程规范)。我喜欢有一个文档,在那里我可以找到我需要的一切。缺点是数据表庞大而且难以维护,这是因为微芯片多年来抽出的零件数量巨大。因此,仇恨的一面——有很多错误。到目前为止,我对这个新家庭非常满意,并且没有发现什么可抱怨的(除了FVR)。但是我发现了一些数据表错误。
|
|
|
|
|
|
您的程序在获取下一个字节和从写/读函数调用和返回之间花费了多少时间?你的SPI时钟看起来有点像3.2兆赫。如果你看到2.5个USEC之间的突发,这有点像40指令与系统时钟的64兆赫。是的,它们加起来了。为了比较:我用一个简单的常量序列(甚至不保存返回值)的测试显示出在突发之间大约1.2微秒。(顺便说一下,这就是为什么我没有在小测试程序中保存返回字节的原因。我希望能够测量像这样的东西。)在我的测试中,从SS变低的时间到第一次爆发的开始,大约有七条指令。从最后一个时钟的末尾大约有十个直到SS变高。(XC8版本1.44在空闲模式下),但是,如果您正在读取RXB缓冲区并在忙到低之前返回,并且在设置SMRTIF之前,您正在读取前一个突发中的字节;当前的一个尚未完全移位并转移到缓冲器。正确的?你测试收到的值了吗?您可以使用数据表中解释的传输计数器来传输多个字节之间的很少或没有突发之间的延迟。我认为,如果要最大化多个字节的传输速率,可以考虑使用DMA。在数据表中有一个很好的解释,显示了如何看待,戴夫
|
|
|
|
|
|
没有测试收到的值,但是甚至海森堡也不能通过在马拴好后关闭门来解决问题。现在更好的理解新系统,并期待实现一些无聊但数据密集的任务(屏幕驱动程序更新?)关于FIFO位于哪里的想法?这是一个把数据塞进黑洞的奇怪概念。
|
|
|
|
|
|
FIFOS位于RXB和TXB。它写入TXFIFO,并从RX FIFO读取。不是黑洞,只是简单的2BFIFO。在我的从代码中,在每个6B事务结束时,我用下一个事务的前两个字节(每个字节0x00)预加载TX FIFO。
|
|
|
|
|
|
事情是这样的,TXB在它各自的FIFO的“一端”是几个位,位于用户可访问的存储器中的寄存器中。我天真地想象那个寄存器是一两平方毫米硅上的一个物理位置,而其他具有相似地址的寄存器有些相邻。那么FIFO的其他200个字节呢?它们会紧挨着它吗,以及一些移动或指针机制,所有这些都不是用户可寻址的?对实施有什么想法?只是无聊的想法,但有人可能知道。
|
|
|
|
|
|
学术的。你没有进入FIFO的内部,它真的是“先入先出”。
|
|
|
|
|
|
正如我在上一篇文章中所说的,SPI FIFOS是2字节,不是200字节。你的帖子让你听起来好像不知道FIFO是什么。QYB说——先入先出。立即写入的第一个字节出现在等待读取的端。例如,SPI TX FIFO写一个字节,它出现在硬件的末尾读取并放置在移位寄存器中。如果硬件忙(移出最后一个字节),FIFO只是等待。如果你再写另一个字节,第一个字节仍然坐在最后等待读取。当第一个阅读时,第二个结束。如果你写的比FIFO多,我认为SPI会给WCOL带来错误
|
|
|
|
|
|
好的,谢谢。被TCNT混淆了BMODE 1中的传输字节,而BMODE 0中的比特。SPI图可能是BMODE 1,不知怎的让我认为它正在计算存储在(长2B)FIFO中的字节。天哪。这比那简单。
|
|
|
|
|
|
FIFO在通信中很常见,因为时序一方面非常严格(本例中为硬件端),另一方面则非常松散(软件端)。FIFO只是使事情平滑,所以软件具有一些灵活性,不需要满足硬件严格的定时和延迟要求。你仍然必须保持FIFO(或读取)或下溢或超支可能发生。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1123浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 01:53 , Processed in 1.099438 second(s), Total 94, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2098