完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用模拟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 = 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资料中的时序是下降沿数据变化) 忘帮助解决一下:数据为什么不出来,多谢! |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1465 浏览 1 评论
3324 浏览 1 评论
8154 浏览 0 评论
1970 浏览 0 评论
VL53L5CX #高达 8x8 多区域测距和 63°对角线宽视场 飞行时间多区域测距传感器
17363 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 19:20 , Processed in 0.563059 second(s), Total 63, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号