怎样多次读取fdc2214数据寄存器值

yingliz0542 2018-09-09 10:55:09
初始化fdc2214为单通道CH0,连续模式,要读取DATA_CH0和DATA_LSB_CH0值。先发送写入命令0x54,再发送DATA_CH0地址0x00,再发读命令0x55,接收到DATA_CH0的值;接着发送写入命令0x54,再发送DATA_LSB_CH0地址0x01,再发读命令0x55,接收到DATA_LSB_CH0的值,第一次执行这个过程没有问题。用循环语句while(1)执行同样的过程,但在发完0x54后,fdc2214一直没有ACK信号。不知问题究竟出在哪里,
原本是四通道连续模式,也一样执行第一次一点问题没有,但同样的过程在执行第二次后,发完0x54,fdc2214也一直没有ACK信号。改为单通道后,也是同样的问题,好像每个数据寄存器的地址只能访问一次。
恳请哪位高手能帮忙看看,怎么回事?
Init_fdc2214();

while(1)
{
Transmit(DATA_CH0,2);
Receive(2);
val_ch0 = Res;

Transmit(DATA_LSB_CH0,2);
Receive(2);
val_ch0 = val_ch0*65536+Res;

}

Transmit()发送0x54和数据寄存器的地址,0x00或0x01;Receive()发送0x55,接收两个数据寄存器的转换值。第一次运行没问题,能读到正确的MSB和LSB。但循环第二次运行时,发送0x54后,fdc没有ACK。

Init_fdc2214();

Transmit(DATA_CH0,2);
Receive(2);
val_ch0 = Res;

Transmit(DATA_LSB_CH0,2);
Receive(2);
val_ch0 = val_ch0*65536+Res;

while(1)
{
Receive(2);
val_ch0 = Res;

Receive(2);
val_ch0 = val_ch0*65536+Res;

}

修改程序如上,运行时不报错,但寄存器地址指针一直停在0x01,所以读取的是DATA_LSB_CH0
...全文
483 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
91program 2018-09-11
  • 打赏
  • 举报
回复
while 循环中操作后,没有一定的 sleep 吗?
嵌入式Linux, 2018-09-10
  • 打赏
  • 举报
回复
什么芯片没有说一下?

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧