MSPM0의 특징으로 저렴한 것도 있지만 강력한 아날로그 장치가 내장되어있다. MSPM0L1306 의 ADC를 테스트 해보자.
저렴한 가격으로 아날로그 기능을 사용할수 있다.
아래 그림은 MSPM0의 ADC 특징이다. 저럼한 MCU에서 보기 어려운 다양한 ADC 옵션을 제공하고 있다.
syscfg 파일에서 ADC를 추가 하고 ADC 관련 다양한 옵션을 쉽게 추가/수정 할 수 있다.
MSPM0L1306 SSM 보드에서는 PA26에 ADC를 할당해서 테스트 할 수 있다.
Advanced Configuration 옵션에서 Sample Time0의 디폴트 값이 0으로 되어 있는데 이부분을 수정하지 않으면 ADC가 정상동작하지 않으므로 적당한 값을 설정해 주는것이 필요하다.
syscfg 설정 후 인터럽트 핸들러 정의 및 ADC read 하는 부분의 코드 작성하면 ADC값을 읽어 올 수 있다.
volatile bool gCheckADC;
volatile uint16_t gADCResult;
void ADC12_0_INST_IRQHandler(void)
{
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
gCheckADC = true;
break;
default:
break;
}
}
unsigned int GetADC(void)
{
unsigned int adc = 0;
DL_ADC12_startConversion(ADC12_0_INST);
while (false == gCheckADC) {
__WFE();
}
adc = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
gCheckADC = false;
DL_ADC12_enableConversions(ADC12_0_INST);
return adc;
}
int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
gCheckADC = false;
while (1)
{
//delay_cycles(DELAY);
DL_GPIO_togglePins(GPIO_GRP_0_PORT, GPIO_GRP_0_PIN_0_PIN);
gADCResult = GetADC();
printf("%d\r\n", gADCResult);
}
}
테스트 결과 가변저항에 의해 변화되는 전압값을 UART로 출력하는 것을 확인 할 수 있다.
좀더 다양한 옵션들은 syscfg를 수정해 가면서 테스트 해 봐야 할것 같다.
반응형