==================================Outline====================================
ADC 전압측정
----------------------------------------------------------------------------
ADC 전압측정
ADC를 동작시키기 위한 코드를 계속 작성해보자.
- 전역변수로 ADC 초기화 플래그를 설정해 주어 ADC초기화 함수의 끝에서 해당 플래그를 1로 변환 시킨다.
- ADC를 동작 시키는 함수에서 ADC 초기화 함수가 1일 때만 작동하도록 처리해준다.
- ADC를 동작시키는 함수에서 ADC기능을 동작시킨다(ADC_CR, ADC_START)
- ADC가 데이터를 변환시키는 동안 프로그램을 잡아준다.(ADC_SR, ADC_DRDY)
- 변환 값을 ADC동작함수의 반환 값으로 해준다, 이 때 유효한 데이터만 추출하기 위해
마스크를 사용한다.(ADC_LCDR, ADC_LDATA)
- 메인함수에서 ADC동작 함수로부터 받은 값을 버프에 넣어 출력한다.
그리하여 코드는 아래와 같으니...
/*** ADC.c ***/
#include <project.h>
unsigned int uiInitFlag;
void ADC_Init()
{
*AT91C_PMC_PCER = 1 << AT91C_ID_ADC; //CLK supply to ADC
*AT91C_ADC_CR = AT91C_ADC_SWRST; //resets the ADC simulating a hardware reset
*AT91C_ADC_CHER = AT91C_ADC_CH4; //enables ADC channel 4
//*AT91C_ADC_MR = AT91C_ADC_PRESCAL & (AT91C_ADC_LOWRES_10_BIT);
//*AT91C_ADC_MR = 0x05 << 8 & (~(0 << 4));
///////////////// as far 9/16 //////////////////
//*AT91C_ADC_CR = AT91C_ADC_START; //ADC start
*AT91C_ADC_MR = AT91C_ADC_LOWRES_10_BIT | (0x05 << 8);
uiInitFlag = 1;
}
int ADC_Run()
{
if(uiInitFlag == 0)
{
return -1;
}
*AT91C_ADC_CR = AT91C_ADC_START; //ADC start
while(0 == (*AT91C_ADC_SR & AT91C_ADC_DRDY) ); //hold while converting
return (int)(*AT91C_ADC_LCDR & AT91C_ADC_LDATA); //returning ADC value
}
/*** main.c ***/
#include <project.h> |
'Busan IT > ARM Controller' 카테고리의 다른 글
ARM 3 Core Test, 내부 LED 동작 프로그래밍 (0) | 2015.10.06 |
---|---|
ARM Core3 M3 프로그래밍 환경 설정 (0) | 2015.10.05 |
Analogue to Digital Converter (0) | 2015.09.17 |
PWM(Pulse Width Modulation) (0) | 2015.09.14 |
PWM(Pulse Width Modulation Controller) (0) | 2015.09.11 |