Microchip
直播中

岳臻俊

7年用户 1032经验值
私信 关注
[问答]

如何使用PIC24FJ128GA010测试SPI通信

您好,我使用PIC24FJ128GA010,我想测试SPI通信。在我的设备上:-SPI1是主-SPI2是从机-激活增强的缓冲区-当接收缓冲区中的日期可用时中断发生d缓冲区SPIxBUF:-read1_rx=SPI1BUF;在SPI1中断-read2_rx=SPI2BUF;在SPI2中断;我的主要例程是:-.500ms-display read1_rx-display read2_rx-SPI1BUF=cmpt1++;-.3ms-SPI2BUF=cmpt2+。但是我想模拟一个奴隶,他在每一个转移都没有东西要发送。所以我修改我的主例程如下:-delay 500ms-display read1_rx-display read2_rx-SPI1BUF=cmpt1+;-delay 3ms-如果cmpt1==3{SPI2BUF=cmpt2+;cmpt1=0;}我所期望的是:当cmpt1==0、1、2或3时,SPI2RX是空的,所以从SPI2到SPI的值是空的。0、0、1、0、0、0、2、0、0、0 3……这是SPI2的第一次转移。但是,当SPI2没有要发送的内容时,SPI1会收到一些消息(参见下文,其中cmpt2在18处初始化):Display2:0 0 0 18 0 0 0 0 0 0 0 18 0 18.…0,0,25,18,18,26,19,19,27,20,20,28……值在哪里…来自何方?谢谢你帮助我…

回帖(6)

杨伟

2020-4-28 13:34:52
如果您在FIFO中没有存储任何数据时通过读取来隐藏缓冲区,我的经验是它在FIFO中的那些点重复了先前的数据。然后,您必须在正确的字节数/字之前再次返回它。你必须避免它或状态标志/计数将是错误的。
举报

薄坤坤

2020-4-28 13:44:49
一般来说,使用延迟来确定SPI交换何时完成是一个坏主意。有一些状态标志告诉您Tx缓冲区是空的(或者在增强模式下有其他值的空间)或者Rx缓冲区是满的(或者在增强模式下至少有一个值可以读取)。
举报

荣春梅

2020-4-28 14:04:03
你好,谢谢你们两个人的回答(苏珊,我不知道你是否提醒我,但是你在一个RS232主题上帮助我)@克里斯:实际上这种行为似乎可以解释我的观察。但是我仍然有一个问题:接收0x0000(或者来自SPI模块的其他东西,没有东西要发送)与接收任何东西有什么区别?SPI只是在每个CLK边缘采样它的SDI线。因此,我预料它的FIFO会被一些东西填充,但仍然不是空的……我尝试了以下测试:在主循环之前,我用很少的值填充SPI2BUF。在主循环中,我从未在这个缓冲区中连接任何东西(但是在SPI1中断的每次传输之后,我读取SPI1RX缓冲区),所以我多次低于SPI1RXBUF……但是我写的第一个值再也不会出现了!为什么?@Susan:我用一个延迟来模仿——一个每100ms就有一些话要说的Salve——一个奴隶巫师没有那么多话要说……对于中断,我不明白你们在谈论什么样的标志。每次转帐后,我进入一个中断。我确实显示了这个转移的结果。问题是,正如克里斯所说,存储在SPI1 FIFO中的数据不像预期的那样是0x000。
举报

荣春梅

2020-4-28 14:17:28
克里斯,我刚刚结束我的跑步训练…我想了想你的答案,明白你提到的底线不是针对SPI1,而是针对SPI2,当移位寄存器读取SPI2RX并将其传输给SDO时。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分