打印

对5509的配置问题

[复制链接]
1648|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lthirty|  楼主 | 2008-1-29 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, dc, ADC, ADCc, CD
现在想通过5509的片内AD对外部电压进行读取。5509的主频为144MHz,片内AD最高采样率为21.5KHz。根据DataSheet的说明,对相应的寄存器配置如下:

#define ADCCTL         *((ioport int *)0x6800)
#define ADCDATA         *((ioport int *)0x6801)
#define ADCCLKDIV         *((ioport int *)0x6802)
#define ADCCLKCTL         *((ioport int *)0x6803)

//初始化ADC
void ADCinit()
{
    ADCCTL = 0x8000;    //转换开始,选择AIN0通道
    ADCCLKCTL = 0x0023;    //把模数转换
    ADCCLKDIV = 0x4f00;    //设置采样,保持,转换分频
}

//利用通道0,AIN0
long ADCread0()
{
    long    ADC0data;                    
    ADCCTL = 0x0000;    //关ADC
    DelaynWs(1);                        
    ADCCTL = 0x8000;    //转换开始,选择AIN0通道
    DelaynWs(1);
    while((ADCDATA & 0x8000)==0)//当ADCDATA的第15位为0时,转换结束
    {
    ADC0data = ADCDATA & 0x3ff;        //选择低十位数据。
    return(ADC0data);
    }
}
现在仿真后的结果不对,是不是对寄存器的配置写法不正确?各位前辈帮忙看看。在DATASHEET里,ADC的寄存器是属于I/O空间寻址的啊?!
先谢了。

相关帖子

沙发
lthirty|  楼主 | 2008-1-30 10:02 | 只看该作者

各位前辈帮帮忙

网上看了很久,各种写法都试过,还是不行。虽然初级,但被难住了,郁闷。。。

使用特权

评论回复
板凳
lthirty|  楼主 | 2008-1-30 16:05 | 只看该作者

发现问题了

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

25

帖子

1

粉丝