工具/软件: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 (结果缓冲区);
}
}