This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP432P401R:尝试在多序列模式下使用ADC14采集13个信道

Guru**** 2583465 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/616146/ccs-msp432p401r-trying-to-acquire-13-channels-with-adc14-in-multisequencemode

部件号:MSP432P401R

工具/软件:Code Composer Studio

您好,

我尝试在多序列模式下读取13个通道。 在结果缓冲区中,只完成了前4个位置,但数据不正确。

我在  "JTAG (1149.1),SWD和cJTAG已禁用"模式下使用XDS200 JTAG调试器。

请告诉我我错了。


/* DriverLib包括*/
#include<ti/devices/msp432p4xx/driverlib/driverlib.h>e2e.ti.com/.../empty_5F00_MSP_5F00_EXP432P401R_5F00_nortos_5F00_ccs.rar

/*标准包括*/
#include <stdint.h>
#include <stdbool.h>

静态uint16_t结果Buffer[13];

内部主(无效)

/*停止监视*/
MAP_WDT_A_HoldTimer();
MAP_Interrupt_DisableMaster();

//设置外部时钟频率
MAP_CS_setExternalClockSourceFrequency(3.2768万,48000000);</s>48000000
MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);

//配置用于Crystal的引脚
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口PJ,GPIO _PIN0 | GPIO _PIN1,GPIO主要模块功能);// LFXT
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口PJ,GPIO _PIN2 | GPIO _PIN3,GPIO主要模块功能);// HFXT


MAP_Flashctl_setWaitState(FLASH_BANK0,2);//用于48 MHz
MAP_Flashctl_setWaitState(FLASH_Bank1, 2);//用于48 MHz

//在无超时的非旁路模式下启动LFXT
MAP_CS_startLFXT (FALSE);
//在无超时的非旁路模式下启动HFXT
map_CS_startHFXT (FALSE);

//初始化MCLK,HSMCLK,SMCLK和ACLK
MAP_CS_initClockSignal (CS_MCLK,CS_HFXTCLK_SELECT,CS_CLock_diver_1);
MAP_CS_initClockSignal (CS_HSMCLK,CS_HFXTCLK_SELECT,CS_CLock_diver_1);//与SMCLK共享时钟源
MAP_CS_initClockSignal (CS_SMCLK,CS_HFXTCLK_SELECT,CS_CLock_diverer_2);//最大HSMCLK / 2;与HSMCLK共享时钟源
MAP_CS_initClockSignal (CS_ACLK,CS_LFXTCLK_SELECT,CS_CLock_diver_1);//最大128 kHz
MAP_CS_INITClockSignal (CS_BCLK,CS_LFXTCLK_SELECT,CS_CLock_diverer_1);//最大3.2768万 kHz

/*初始化ADC (MCLK/1/1)*/
MAP_ADC14_enableModule();
MAP_ADC14_INITModule (ADC_CLOCKSOURCE_SMCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,0);


/*为模拟输入配置GPIO */
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P4,
GPIO _PIN7 |GPIO _PIN6 | GPIO _PIN5 |GPIO _PIN4 | GPIO _PIN3,GPIO _STILEARY_MODULE_FUNCTION);
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P5,
GPIO _PIN5 |GPIO _PIN4 | GPIO _PIN3 | GPIO _PIN2 |GPIO _PIN1 | GPIO _PIN0,GPIO _STILEARY_MODULE_FUNCTION);
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P8,
GPIO _PIN7,GPIO第三模块功能);
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P9,
GPIO _PIN0,GPIO第三模块功能);

//配置ADC内存(ADC_MEM0 - ADC_MEM10 (A0-A12)不重复
MAP_ADC14_configureMultiSequenceMode (ADC_MEM0,ADC_MEM12,FALSE);

MAP_ADC14_configureConversionMemory (ADC_MEM0,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A0,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM1,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A1,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM2,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A2,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM3,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A3,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM4,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A4,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM5,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A5,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM6,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A6,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM7,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A7,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM8,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A8,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM9,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A9,ADC_NONDIFERENSIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM10,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A10,ADC_NONDIFERENTIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM11,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A17,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM12,
ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A18,ADC_NONDIFERENIAL_INPUT);

/*设置采样计时器自动逐步执行序列转换。 */
MAP_ADC14_enableSampleTimer(ADC_AUTOMATICAL_ITED);

/*当通道12 (序列结束)上的转换完成时启用中断并启用转换*/
MAP_ADC14_enableInterrupt (ADC_INT12);

/*启用中断*/
MAP_Interrupt_enableInterrupt (INT_ADC14);
MAP_Interrupt_enableMaster();

/*触发样本开始*/
MAP_ADC14_enableConversion();
MAP_ADC14_ToggleConversionTrigger();

/*零填充缓冲器*/
memset(resultsBuffer, 0x00, 13);

同时(1)

MAP_ADC14_enableConversion();
MAP_ADC14_ToggleConversionTrigger();

MAP_PCM_GotoLPM0();

}
}


/*只要转换完成并放入,就会激发该中断
* ADC_MEM12。 这表示转换结束,结果数组为
*抓取并放置在结果缓冲区*/中
void ADC14_IRQHandler (void)

UINT64_t状态;

状态= MAP_ADC14_getEnabledInterruptStatus();
MAP_ADC14_clearInterruptFlag (状态);


IF (状态和ADC_INT12)

MAP_ADC14_getMultiSequenceResult (结果缓冲区);
}


}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Vasile:
    这是MAP_ADC14_getMultiSequenceResult API的问题。 感谢您指出这一点,我将提交一个错误。 我已使用以下内容更新了您的代码:

    /*只要转换完成并放入,就会激发该中断
    * ADC_MEM12。 这表示转换结束,结果数组为
    *抓取并放置在结果缓冲区*/中
    void ADC14_IRQHandler (void)

    UINT64_t状态;

    状态= MAP_ADC14_getEnabledInterruptStatus();
    MAP_ADC14_clearInterruptFlag (状态);

    MAP_ADC14_DisableConversion();
    IF (状态和ADC_INT12)

    //map_ADC14_getMultiSequenceResult(resultsBuffer);
    local_ADC14_getMultiSequenceResult(resultsBuffer);
    __no_operation();
    }


    }

    void local_ADC14_getMultiSequenceResult(uint16_t* res)

    // uINT32_t *startAddr,*curAddr;
    // uINT32_t ii;

    uINT32_t startIndex,ii;

    // startAddr =(UINT32_t*)_ctlRegs[(ADC14->CTL1 & ADC14_CTL1_CSTARTADD_MASM)
    // >>16];
    //
    // curAddr = startAddr;

    startIndex =(ADC14->CTL1 & ADC14_CTL1_CTTARTADD_MASM)>16;

    对于(ii = startIndex;ii < 32;i++)

    // res[ii]=*((uint16_t*)(curAddr + 32));
    RES[ii]= ADC14->MEM[ii];

    // IF (BITBAND_PERI((*curAddr), ADC14_MCTLN_EOS_OFS))
    IF (ADC14->MCTL[ii]& ADC14_MCTLN_EOS)
    中断;

    // IF (curAddr ==_ctlRegs[31])
    // curAddr =(UINT32_t*)_ctlRegs[0];
    // 否则
    // curAddr++;
    }

    }

    如果这不起作用,或者您还有其他问题,请告诉我。

    此致,
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你。 它是有效的。

    此致,

    Gabriel。