对5509的配置问题

[复制链接]
2423|2
 楼主| lthirty 发表于 2008-1-29 14:03 | 显示全部楼层 |阅读模式
AD, dc, ADC, ADCc, CD
现在想通过5509的片内AD对外部电压进行读取。5509的主频为144MHz,片内AD最高采样率为21.5KHz。根据DataSheet的说明,对相应的寄存器配置如下:<br /><br />#define&nbsp;ADCCTL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((ioport&nbsp;int&nbsp;*)0x6800)<br />#define&nbsp;ADCDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((ioport&nbsp;int&nbsp;*)0x6801)<br />#define&nbsp;ADCCLKDIV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((ioport&nbsp;int&nbsp;*)0x6802)<br />#define&nbsp;ADCCLKCTL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((ioport&nbsp;int&nbsp;*)0x6803)<br /><br />//初始化ADC<br />void&nbsp;ADCinit()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCCTL&nbsp;=&nbsp;0x8000;&nbsp;&nbsp;&nbsp;&nbsp;//转换开始,选择AIN0通道<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCCLKCTL&nbsp;=&nbsp;0x0023;&nbsp;&nbsp;&nbsp;&nbsp;//把模数转换<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCCLKDIV&nbsp;=&nbsp;0x4f00;&nbsp;&nbsp;&nbsp;&nbsp;//设置采样,保持,转换分频<br />}<br /><br />//利用通道0,AIN0<br />long&nbsp;ADCread0()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;ADC0data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCCTL&nbsp;=&nbsp;0x0000;&nbsp;&nbsp;&nbsp;&nbsp;//关ADC<br />&nbsp;&nbsp;&nbsp;&nbsp;DelaynWs(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCCTL&nbsp;=&nbsp;0x8000;&nbsp;&nbsp;&nbsp;&nbsp;//转换开始,选择AIN0通道<br />&nbsp;&nbsp;&nbsp;&nbsp;DelaynWs(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;while((ADCDATA&nbsp;&&nbsp;0x8000)==0)//当ADCDATA的第15位为0时,转换结束<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;ADC0data&nbsp;=&nbsp;ADCDATA&nbsp;&&nbsp;0x3ff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择低十位数据。<br />&nbsp;&nbsp;&nbsp;&nbsp;return(ADC0data);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />现在仿真后的结果不对,是不是对寄存器的配置写法不正确?各位前辈帮忙看看。在DATASHEET里,ADC的寄存器是属于I/O空间寻址的啊?!<br />先谢了。
 楼主| lthirty 发表于 2008-1-30 10:02 | 显示全部楼层

各位前辈帮帮忙

网上看了很久,各种写法都试过,还是不行。虽然初级,但被难住了,郁闷。。。
 楼主| lthirty 发表于 2008-1-30 16:05 | 显示全部楼层

发现问题了

问题已经找到,配置寄存器的写法是正确的,之所以AD没有取得预期的效果,是因为在等待AD转换完成,即ADCDATA的15位为0时,写法不对。单步执行后就可以得到正确输出。现在把DelaynWs从1加到100,也就能正确读到。<br />但代码上不能光靠delay来人为设置延迟,不知道判断寄存器某位是否为0的代码怎样书写?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

25

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部