读AD为什么读两次

coffeeroy2 2016-01-11 10:25:29
读取AD669芯片的数据,代码如下:

unsigned short read_ad_times_byCHN0(int para)
{
int i = 0;
unsigned long sum = 0;
unsigned short avarage = 0;
unsigned int timeuse = 0;

if(para == 0) para = 1;

gettimeofday(&tpstart,NULL); //获取起始时间

for(i = 0; i < para; i++)
{
outb(0,U1234_WR_Adr); //启动AD转换
while(!(inb(U4_BUSY_Adr) & 0x1));

avarage = inw(U1_RD_Adr) & 0xffff;//读一次AD
avarage = inw(U1_RD_Adr) & 0xffff;//读第二次AD

sum += avarage;
}
gettimeofday(&tpend,NULL); //获取终止时间
timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+
tpend.tv_usec-tpstart.tv_usec; //us Level
DEBUG1("ad timeuse is %d\n",timeuse);
avarage = sum / para;
return avarage;
}

为什么要读取两次AD呢?哪位大神能解答我的问题,新人不胜感激
...全文
175 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
coffeeroy2 2016-01-12
  • 打赏
  • 举报
回复
引用 2 楼 runsunlg 的回复:
看看该芯片是否有锁存的概念,第一次读可能是为了清上次的值,第二次读才是当前的正确值
您说对了,DA669是双缓存锁存器,查了文档有标明double buffered latches
fly 100% 2016-01-12
  • 打赏
  • 举报
回复
看样子是读出一个让ad再量化一个出来 看样子ad不是自动更新的
cp1149637566 2016-01-11
  • 打赏
  • 举报
回复
那你有没有试过只读一次的结果呢?
runsunlg 2016-01-11
  • 打赏
  • 举报
回复
看看该芯片是否有锁存的概念,第一次读可能是为了清上次的值,第二次读才是当前的正确值

27,509

社区成员

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

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