首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NETMF的SPI主从同步(C18)

使用NETMF的SPI主从同步(C18)
EN

Stack Overflow用户
提问于 2010-10-26 21:07:48
回答 2查看 2K关注 0票数 2

.NET微框架设备(在本例中为ChipworkX)通过SPI接口向PIC18F发送一个字节。启用PIE1bits.SSPIE后,将在中断时执行以下代码:

代码语言:javascript
复制
void high_isr (void)
{
     PIE1bits.SSPIE = 0;
     PIR1bits.SSPIF = 0; //Clear interrupt flag.
     LATDbits.LATD5 = 1; //Enables LED for high interrupt activity.
     while ( !SSPSTATbits.BF ); //Wait until cycle complete
     red_byte_array[1] = SSPBUF;
     SSPBUF = 0x00;
     LATDbits.LATD5 = 0;
     PIE1bits.SSPIE = 1;
}

当多次发送相同的字节时,数据的读取似乎并不一致。主机和从机均设置为时钟空闲低电平,并在上升沿设置数据时钟。我不使用芯片选择线,因为它是直接通信的。最后,主机以100兆赫的频率发送数据,而PIC的工作频率为8兆赫。

如何改进和/或修复此代码?

EN

回答 2

Stack Overflow用户

发布于 2011-03-06 08:37:52

PIC16F886/7

如果不使用/SS,则对于空闲为0的SCK,数据在上升沿更改,在下降沿采样:CKE = 0CKP = 0 (或1)、SMP = 0

从移位寄存器移动到缓冲寄存器的字节会导致BF位和SSPIF中断,因此您通常不会在等待BF的中断中循环。

应该不需要禁用SSP中断(SSPIE = 0),但您可能需要在从中断返回之前清除SSPIF

我想您应该在SSP中断(SSPIF = 1)上:

red_byte_array[x] = SSPBUF

SSPIF = 0

您可能需要检查WCOLSSPOV是否有错误。

票数 2
EN

Stack Overflow用户

发布于 2010-10-26 21:37:09

假设您的PIC只有(8 MHz / 100 kHz ) 80个周期来响应,那么Delay1KTCYx()似乎相当长。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4023946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档