我可能正在努力解决一个非常简单的问题。我有一个赛普拉斯 CY8 控制器作为 SPI 主机,它应该在从机模式下与 PIC32mx 通信以交换数据包。
但是,我什至无法修复从主机到从机的多个字节的简单传输。我已经将柏树设置为传输一个递增值(0-255)的字符,中间有一个暂停(和从属选择切换)。图片应该读取传入的字节,然后通过 uart 将其打印到我的电脑(uart 连接有效)。但是图片只打印它连续接收的第一个字符,而不是更新它。如果我检查我的逻辑嗅探器,赛普拉斯确实会发送递增值,并且图片会将它们通过 MISO 线转发回(看起来移位缓冲区没有被清除)。
这可能是什么?
没有附上图片的柏树给出了正确的输出: https : //dl.dropboxusercontent.com/u/3264324/Schermafdruk%202015-07-28%2015.43.28.png 附上图片后,它通过 MISO 中继数据: https: //dl.dropboxusercontent.com/u/3264324/Schermafdruk%202015-07-28%2015.43.45.png
这是我(现在)非常基本的代码来测试它:
TRISBbits.TRISB2 = 1; // make Ra2 pin input (SDI)
TRISBbits.TRISB5 = 0; // make Ra2 pin output (SDO)
TRISBbits.TRISB15 = 1; //make RB14 output (SCK)
ANSELA = 0; // all ports digital
ANSELB = 0; // all ports digital
SYSKEY = 0x00000000;
SYSKEY = 0xAA996655;
SYSKEY = 0x556699AA;
CFGCONbits.IOLOCK=0; // unlock configuration
CFGCONbits.PMDLOCK=0;
SDI2R = 0b0100; //SDI2 on pin RB2
SS2R = 0b0011; //SS2 on pin rb10
RPB5R = 0b0100; //SDO2 on pin RB5
// SCLK is connected to pin RB14 (SCK) by default
SYSKEY = 0x00000000;
SPI2CON = 0; // Stops and resets the SPI1.
rData=SPI2BUF; // clears the receive buffer
SPI2BRG=207; // use FPB/4 clock frequency <-- not important in slave mode right?
SPI2STATCLR=0x40; // clear the Overflo
SPI2CON=0x8180;
unsigned char t;
while(1){
t = SpiChnReadC(2);
//t = SPI2BUF; <== i've tried this also
sendData(t); <== uart routine
}
由于我确实收到了一个字符并且 spi 数据不断地转发回柏树,我认为在 PIC 中读取/清除 spi 数据结构时出现了问题。但我不知道为什么。当我在数据表中阅读时,从 SPI2BUFF 读取数据会为我提供接收到的数据,并清除读取标志以便可以接收到新数据,但看起来这不会发生......
有人可以为我照亮这个吗?
在此先感谢