Post Go back to editing

ADIS16209数据读取不出来,使用示波器测量波形MOSI有输出

使用模拟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资料中的时序是下降沿数据变化)

忘帮助解决一下:数据为什么不出来,多谢!

Parents Reply Children
No Data