.NET微框架设备(在本例中为ChipworkX)通过SPI接口向PIC18F发送一个字节。启用PIE1bits.SSPIE后,将在中断时执行以下代码:
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兆赫。
如何改进和/或修复此代码?
发布于 2011-03-06 08:37:52
在PIC16F886/7上
如果不使用/SS,则对于空闲为0的SCK,数据在上升沿更改,在下降沿采样:CKE = 0、CKP = 0 (或1)、SMP = 0。
从移位寄存器移动到缓冲寄存器的字节会导致BF位和SSPIF中断,因此您通常不会在等待BF的中断中循环。
应该不需要禁用SSP中断(SSPIE = 0),但您可能需要在从中断返回之前清除SSPIF。
我想您应该在SSP中断(SSPIF = 1)上:
red_byte_array[x] = SSPBUF
SSPIF = 0
您可能需要检查WCOL和SSPOV是否有错误。
发布于 2010-10-26 21:37:09
假设您的PIC只有(8 MHz / 100 kHz ) 80个周期来响应,那么Delay1KTCYx()似乎相当长。
https://stackoverflow.com/questions/4023946
复制相似问题