使用模拟SPI通信程序如下:
#define ADIS16209_SCLK PBout(3)
#define ADIS16209_CS PBout(4)
#define ADIS16209_RST PBout(5)
#define ADIS16209_MOSI PBout(6)
#define ADIS16209_MISO PBin(7)
//SPI1 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
void SendByte(uint8_t byte)
{
uint8_t i=0;
for(i=0;i<8;i++)
{
ADIS16209_SCLK = 0;
if(0X80&byte)
ADIS16209_MOSI = 1;
else
ADIS16209_MOSI = 0;
delay_us(40);
ADIS16209_SCLK = 1;
delay_us(40);
byte <<= 1;
}
}
uint8_t GetByte(void)
{
uint8_t i,j,aa = 0;
for(i=0;i<8;i++)
{
ADIS16209_SCLK = 0;
aa=aa<<1;
if(ADIS16209_MISO)
aa = aa | 0x01;
else
aa = aa | 0x00;
delay_us(40);
ADIS16209_SCLK = 1;
delay_us(40);
}
return aa;
}
uint8_t ADIS16209_RD(uint8_t Dst,uint8_t *RcvBuf)
{
uint16_t i = 0;
ADIS16209_CS = 0;
delay_us(50);
SendByte(Dst&0x3f);
SendByte(0x00);
ADIS16209_CS = 1;
delay_us(50);
ADIS16209_CS = 0;
delay_us(50);
for(i=0;i<2;i++)
{
RcvBuf[i] = GetByte();
}
ADIS16209_CS = 1;
delay_us(50);
return 1;
}
int main(void)
{
//IO口初始化程序,这里没有贴出来
ADIS16209_RST=0;
delay_ms(50);
ADIS16209_RST=1;
delay_ms(50);
ADIS16209_CS = 1;
delay_ms(50);
while(1)
{
ADIS16209_RD(0x02,RxBuffer);
}
}
使用调试器仿真调试,全速运行,Rxbuffer的数据不变化,单步调试时,有变化,不知问题出在哪里了?
如下波形图:
CS与sclk波形
SCLK 与 MOSI波形如下
数据是在SCLK下降沿变化,对不对?(有个同事说数据要在SCLK上升沿变化,我认为不对,我看ADIS16209资料中的时序是下降沿数据变化)
忘帮助解决一下:数据为什么不出来,多谢!