본문 바로가기

[MSP430]/MSP432

MSP432 EVM - ADC 테스트 (ADC14 TFT LCD에 그래프 표시하기)

MSP432 EVM - ADC 테스트 (ADC14 TFT LCD에 그래프 표시하기)




MSP432 는 MSP430과 달리 14비트 ADC를 가지고 있다. 최대 24채널 까지 입력 가능하다.


MSP432 ADC14 특징

14-bit Accuracy

INL <= +/- 2  LSB; 

DNL <= +/- 1 LSB

ENOB 13-bit

32-input channels

Single-ended & differential Inputs 


2 Window comparators 

High interrupt

Low interrupt

In [Between] interrupt


Separate internal channels for AVcc and TempSensor

Ultra Low current consumption

Single ended 210uA @ 1.8V, 1Msps 

Differential 260uA @ 1.8V, 1Msps


Generates voltage references for analog modules
1.2V, 1.45V, 2.5V



MSP432 ADC 블록도




Window Comparator

MSP432 ADC14의 기능중 Window Comparator 가 있는데 설정 값에 따라서 하드웨어 적으로 인터럽트를 발생 해 주기 때문에 소프트웨어 적인 부담이 많이 줄일 수 있다.




// ADC14 interrupt service routine

void ADC14IsrHandler(void) {

    if (ADC14IFGR1 & ADC14HIIFG)

    {

        ADC14CLRIFGR1 |= ADC14HIIFG;            // Clear interrupt flag


    }

    if (ADC14IFGR1 & ADC14LOIFG)

    {

        ADC14CLRIFGR1 |= ADC14LOIFG;            // Clear interrupt flag

    }

    if (ADC14IFGR1 & ADC14INIFG)

    {

        ADC14CLRIFGR1 |= ADC14INIFG;            // Clear interrupt flag

    }

}






MSP432 14bit ADC(ADC14) 초기화 코드
void ADC_Init(void)
{
    MAP_PCM_setPowerState(PCM_AM_LDO_VCORE1);
  
    /* Enabling the FPU for floating point operation */
    MAP_FPU_enableModule();
    MAP_FPU_enableLazyStacking();

    /* Initializing ADC (MCLK/1/4) */
    MAP_ADC14_enableModule();
    MAP_ADC14_initModule(ADC_CLOCKSOURCE_MCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_4, 0);
            
    /* Configuring GPIOs (5.0 A5) */
    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN0,
    GPIO_TERTIARY_MODULE_FUNCTION);

    /* Configuring ADC Memory */
    MAP_ADC14_configureSingleSampleMode(ADC_MEM0, true);
    MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_AVCC_VREFNEG_VSS,
    ADC_INPUT_A5, false);
    

    /* Configuring Sample Timer */
    MAP_ADC14_enableSampleTimer(ADC_MANUAL_ITERATION);

    /* Enabling/Toggling Conversion */
    MAP_ADC14_enableConversion();
    MAP_ADC14_toggleConversionTrigger();

    /* Enabling interrupts */
    MAP_ADC14_enableInterrupt(ADC_INT0);
    MAP_Interrupt_enableInterrupt(INT_ADC14);
    MAP_Interrupt_enableMaster();
}


MSP432 14bit ADC(ADC14) 결과 처리 인터럽트 코드

void ADC14_IRQHandler(void)

{

    uint64_t status = MAP_ADC14_getEnabledInterruptStatus();

    MAP_ADC14_clearInterruptFlag(status);


    if (ADC_INT0 & status)

    {

        curADCResult = MAP_ADC14_getResult(ADC_MEM0);

        normalizedADCRes = (curADCResult * 3.3) / 16384;


        gAdcValue = curADCResult;

        MAP_ADC14_toggleConversionTrigger();

    }

}




MSP432 ADC 테스트 동영상

가변저항의 전압값을 TFT-LCD 그래프로 출력 하는 예제




MSP432 ADC포트 핀맵

포트와 ADC채널이  동일하지 않기 때문에 정리 해둘 필요가 있다.



반응형