連接器選項(xiàng)設(shè)置和啟動(dòng)代碼 ... ARM入門筆記(5) " />
第五章 模擬量輸入 ——A/D轉(zhuǎn)換實(shí)驗(yàn) 一.目的 通過A/D轉(zhuǎn)換,能夠正確讀取外部模擬輸入通道的電壓值。 二.實(shí)驗(yàn)程序和參數(shù)設(shè)置 1>連接器選項(xiàng)設(shè)置和啟動(dòng)代碼都與上個(gè)實(shí)驗(yàn)相同 2>C語言的代碼 #i nclude "AT91SAM7S64.h" #i nclude "Board.h" volatile unsigned int EXT_AD_Val[4]; //定義A/D轉(zhuǎn)換結(jié)果值 int main(void) {unsigned char i; *AT91C_ADC_CR = AT91C_CKGR_MOSCEN; //ADC的軟件復(fù)位,即清除ADC的所有寄存器 *AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能系統(tǒng)時(shí)鐘寄存器的處理器時(shí)鐘 *AT91C_PMC_PCER = 1 91C_ID_ADC; //使能ADC時(shí)鐘 *AT91C_PIOA_PDR = EXT_AD0 | EXT_AD1; //禁止管腳的I/O口功能,使作為模擬輸入功能 *AT91C_ADC_MR = 0x0f1f3f00; //軟件起動(dòng),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; //起動(dòng)轉(zhuǎn)換 while(1) { if ((*AT91C_ADC_SR) & 0x33) //等待轉(zhuǎn)換結(jié)束 { EXT_AD_Val[0] = (*AT91C_ADC_CDR0) & 0x3ff;//讀取10Bit的結(jié)果值 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; } } } } 三.總結(jié) 執(zhí)行ADC的軟件復(fù)位,將清除ADC的所有相關(guān)寄存器,因此必須在設(shè)置ADC相關(guān)寄存器之前執(zhí)行。 |