| 
 
| 使用PIC16F1503利用SPI口对LT8900进行读写操作。 通过示波器观察波形,现在发现:写进去的字节波形是对的,但是读回来的字节波形有对的,也有错的。
 即MISO返回的数据是有误的。
 
 硬件上,SCK,MISO,MOSI和芯片是直接连接的,没加上拉或下拉电阻
 问题到底出在哪呢??望高手们指教
 对SPI的配置如下:
 void SPI_Init(void)
 {
 TRISCbits.TRISC0 = 0;   //SCK引脚设置为输出
 TRISCbits.TRISC1 = 1;   //MISO引脚设置为输入
 TRISCbits.TRISC2 = 0;   //MOSI引脚设置为输出
 TRISCbits.TRISC4 = 0;   //片选引脚设置为输出
 APFCONbits.SDOSEL = 0;  //SDO功能在引脚 RC2-
 //配置SPI的格式               //1,1,1或者0,0,0
 SSP1STAT |= (0X01 << 7);
 SSP1CON1 = 0X21;       //SPI Master mode,clock = Fosc/16 = 1Mhz,使能SPI
 }
 
 //SPI接口发送和接收数据函数
 static unsigned char SPI_SendReadByte(unsigned char dat)
 {
 unsigned char readbyte;
 //  SSP1CON1bits.WCOL = 0;   //清楚写冲突标志位(WCOL),允许写SSP1BUF寄存器
 PIR1bits.SSP1IF = 0;
 //  SSP1CON1bits.SSPOV = 0;
 SSP1BUF = dat;
 while(!PIR1bits.SSP1IF);
 PIR1bits.SSP1IF = 0;
 while(!SSP1STATbits.BF);
 readbyte = SSP1BUF;        //读取接收缓冲器中的数据
 // PIR1bits.SSP1IF = 0;  //清除接收完成标志位
 return readbyte;      //返回接收到的数据
 }
 
 unsigned int LT_ReadReg(unsigned char reg)
 {
 unsigned char ReadValueH,ReadValueL;
 LATCbits.LATC4 = 0;           //片选引脚拉低,使能
 SPI_SendReadByte(reg+0X80);    //读取寄存器的值
 Delay_5us;
 ReadValueH = SPI_SendReadByte(0X00);
 ReadValueL = SPI_SendReadByte(0X00);
 Delay_5us;
 LATCbits.LATC4 = 1;
 return (ReadValueH << 8 + ReadValueL);  //返回读取到的寄存器值
 }
 
 
 
 
 
 | 
 |