Part Number:MSP432P401R
Tool/software: Code Composer Studio
Hello,
I try to read 13 channels in MultiSequenceMode. In the resultsBuffer, only the first 4 positions are completed but the data is not correct.
I use the XDS200 JTAG debugger in mode "JTAG(1149.1), SWD and cJTAG are disabled".
Please, show me where I'm wrong.
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>(Please visit the site to view this file)
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
static uint16_t resultsBuffer[13];
int main(void)
{
/* Stop Watchdog */
MAP_WDT_A_holdTimer();
MAP_Interrupt_disableMaster();
// Setting the external clock frequency
MAP_CS_setExternalClockSourceFrequency(32768, 48000000);
MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);
// Configuring pins for crystal usage
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ, GPIO_PIN0 | GPIO_PIN1, GPIO_PRIMARY_MODULE_FUNCTION); // LFXT
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ, GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION); // HFXT
MAP_FlashCtl_setWaitState(FLASH_BANK0, 2); // For 48 MHz
MAP_FlashCtl_setWaitState(FLASH_BANK1, 2); // For 48 MHz
// Starting LFXT in non-bypass mode without a timeout
MAP_CS_startLFXT(false);
// Starting HFXT in non-bypass mode without a timeout
MAP_CS_startHFXT(false);
// Initializing MCLK, HSMCLK, SMCLK and ACLK
MAP_CS_initClockSignal(CS_MCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal(CS_HSMCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); // Shares clock source with SMCLK
MAP_CS_initClockSignal(CS_SMCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_2); // Maximum HSMCLK / 2; shares clock source with HSMCLK
MAP_CS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); // Maximum 128 kHz
MAP_CS_initClockSignal(CS_BCLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); // Maximum 32768 kHz
/* Initializing ADC (MCLK/1/1) */
MAP_ADC14_enableModule();
MAP_ADC14_initModule(ADC_CLOCKSOURCE_SMCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_1, 0);
/* Configuring GPIOs for Analog In */
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P4,
GPIO_PIN7 |GPIO_PIN6 | GPIO_PIN5 |GPIO_PIN4 | GPIO_PIN3, GPIO_TERTIARY_MODULE_FUNCTION);
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,
GPIO_PIN5 |GPIO_PIN4 | GPIO_PIN3 | GPIO_PIN2 |GPIO_PIN1 | GPIO_PIN0, GPIO_TERTIARY_MODULE_FUNCTION);
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P8,
GPIO_PIN7, GPIO_TERTIARY_MODULE_FUNCTION);
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P9,
GPIO_PIN0, GPIO_TERTIARY_MODULE_FUNCTION);
//Configuring ADC Memory (ADC_MEM0 - ADC_MEM10 (A0-A12) no repeat
MAP_ADC14_configureMultiSequenceMode(ADC_MEM0, ADC_MEM12, false);
MAP_ADC14_configureConversionMemory(ADC_MEM0,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A0, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM1,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A1, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM2,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A2, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM3,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A3, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM4,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A4, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM5,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A5, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM6,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A6, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM7,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A7, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM8,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A8, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM9,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A9, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM10,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A10, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM11,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A17, ADC_NONDIFFERENTIAL_INPUTS);
MAP_ADC14_configureConversionMemory(ADC_MEM12,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A18, ADC_NONDIFFERENTIAL_INPUTS);
/* Setting up the sample timer to automatically step through the sequence convert. */
MAP_ADC14_enableSampleTimer(ADC_AUTOMATIC_ITERATION);
/* Enabling the interrupt when a conversion on channel 12 (end of sequence) is complete and enabling conversions */
MAP_ADC14_enableInterrupt(ADC_INT12);
/* Enabling Interrupts */
MAP_Interrupt_enableInterrupt(INT_ADC14);
MAP_Interrupt_enableMaster();
/* Triggering the start of the sample */
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger();
/* Zero-filling buffer */
memset(resultsBuffer, 0x00, 13);
while(1)
{
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger();
MAP_PCM_gotoLPM0();
}
}
/* This interrupt is fired whenever a conversion is completed and placed in
* ADC_MEM12. This signals the end of conversion and the results array is
* grabbed and placed in resultsBuffer */
void ADC14_IRQHandler(void)
{
uint64_t status;
status = MAP_ADC14_getEnabledInterruptStatus();
MAP_ADC14_clearInterruptFlag(status);
if(status & ADC_INT12)
{
MAP_ADC14_getMultiSequenceResult(resultsBuffer);
}
}