现在想通过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空间寻址的啊?! 先谢了。 |