ARM入門筆記(5)
——A/D轉(zhuǎn)換實驗
一.目的
通過A/D轉(zhuǎn)換,能夠正確讀取外部模擬輸入通道的電壓值。
二.實驗程序和參數(shù)設(shè)置
1>連接器選項設(shè)置和啟動代碼都與上個實驗相同
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)時鐘寄存器的處理器時鐘
*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; //起動轉(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í)行。
評論