ARM入门笔记(5)
发布时间:2010-8-26 17:26
发布者:绝对好文
关键词:
ARM入门笔记
第五章 模拟量输入 ——A/D转换实验 一.目的 通过A/D转换,能够正确读取外部模拟输入通道的电压值。 二.实验程序和参数设置 1>连接器选项设置和启动代码都与上个实验相同 2>C语言的代码 #i nclude "AT91SAM7S64.h" #i nclude "Board.h" volatile unsigned int EXT_AD_Val[4]; //定义A/D转换结果值 int main(void) {unsigned char i; *AT91C_ADC_CR = AT91C_CKGR_MOSCEN; //ADC的软件复位,即清除ADC的所有寄存器 *AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能系统时钟寄存器的处理器时钟 *AT91C_PMC_PCER = 1 91C_ID_ADC; //使能ADC时钟 *AT91C_PIOA_PDR = EXT_AD0 | EXT_AD1; //禁止管脚的I/O口功能,使作为模拟输入功能 *AT91C_ADC_MR = 0x0f1f3f00; //软件起动,10位分辨率,128分频 *AT91C_ADC_CHER = 0x33; //使能通道0,1,4,5 *AT91C_ADC_CHDR = 0xcc; //禁能通道2,3,6,7 *AT91C_ADC_IDR = 0xfffff; //禁止所有ADC中断 while (1) { *AT91C_ADC_CR = 0x2; //起动转换 while(1) { if ((*AT91C_ADC_SR) & 0x33) //等待转换结束 { EXT_AD_Val[0] = (*AT91C_ADC_CDR0) & 0x3ff;//读取10Bit的结果值 EXT_AD_Val[1] = (*AT91C_ADC_CDR1) & 0x3ff; EXT_AD_Val[2] = (*AT91C_ADC_CDR4) & 0x3ff; EXT_AD_Val[3] = (*AT91C_ADC_CDR5) & 0x3ff; for (i = 0; i break; } } } } 三.总结 执行ADC的软件复位,将清除ADC的所有相关寄存器,因此必须在设置ADC相关寄存器之前执行。 |
网友评论