使用芯片:MSPM0G1507
目的:DAC输出指定信号,ADC根据定时器采样数据通过串口发出来
基于定时器触发dma进行adc采样,第一次debug运行都正常,脱离调试也正常,但是在调试中rest芯片,DMA输出数组值全为0,硬件脱离调试重新启动,DMA输出值也全为0,系统主时钟80M
与此同时DAC+DMA输出永远正常,部分时候会出现systick中断不触发的情况
具体配置如下:

syscfg:
/**
* These arguments were used when this file was generated. They will be automatically applied on subsequent loads
* via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
* @cliArgs --device "MSPM0G150X" --part "Default" --package "LQFP-48(PT)" --product "mspm0_sdk@2.02.00.05"
* @v2CliArgs --device "MSPM0G1507" --package "LQFP-48(PT)" --product "mspm0_sdk@2.02.00.05"
* @versions {"tool":"1.21.2+3837"}
*/
/**
* Import the modules used in this configuration.
*/
const ADC12 = scripting.addModule("/ti/driverlib/ADC12", {}, false);
const ADC121 = ADC12.addInstance();
const ADC122 = ADC12.addInstance();
const DAC12 = scripting.addModule("/ti/driverlib/DAC12");
const DMA = scripting.addModule("/ti/driverlib/DMA");
const GPIO = scripting.addModule("/ti/driverlib/GPIO", {}, false);
const GPIO1 = GPIO.addInstance();
const SYSCTL = scripting.addModule("/ti/driverlib/SYSCTL");
const SYSTICK = scripting.addModule("/ti/driverlib/SYSTICK");
const TIMER = scripting.addModule("/ti/driverlib/TIMER", {}, false);
const TIMER1 = TIMER.addInstance();
const TIMER2 = TIMER.addInstance();
const UART = scripting.addModule("/ti/driverlib/UART", {}, false);
const UART1 = UART.addInstance();
const VREF = scripting.addModule("/ti/driverlib/VREF");
const ProjectConfig = scripting.addModule("/ti/project_config/ProjectConfig");
/**
* Write custom configuration values to the imported modules.
*/
ADC121.endAdd = 1;
ADC121.trigSrc = "DL_ADC12_TRIG_SRC_EVENT";
ADC121.adcMem1chansel = "DL_ADC12_INPUT_CHAN_1";
ADC121.adcMem0chansel = "DL_ADC12_INPUT_CHAN_1";
ADC121.adcMem0_name = "ADC0_CH1";
ADC121.adcMem0vref = "VREF";
ADC121.configureDMA = true;
ADC121.$name = "ADC1";
ADC121.enabledInterrupts = ["DL_ADC12_INTERRUPT_DMA_DONE"];
ADC121.enableFIFO = true;
ADC121.hwNumerator = "DL_ADC12_HW_AVG_NUM_ACC_2";
ADC121.startAdd = 1;
ADC121.enabledDMATriggers = ["DL_ADC12_DMA_MEM1_RESULT_LOADED"];
ADC121.interruptPriority = "0";
ADC121.sampCnt = 10;
ADC121.repeatMode = true;
ADC121.sampleTime1 = "0";
ADC121.sampleTime0 = "100ns";
ADC121.subChanID = 12;
ADC121.peripheral.$assign = "ADC1";
ADC121.adcPin1Config.$name = "ti_driverlib_gpio_GPIOPinGeneric0";
ADC121.adcPin1Config.hideOutputInversion = scripting.forceWrite(false);
ADC121.DMA_CHANNEL.$name = "DMA_CH3";
ADC121.DMA_CHANNEL.srcLength = "HALF_WORD";
ADC121.DMA_CHANNEL.dstLength = "HALF_WORD";
ADC121.DMA_CHANNEL.configureTransferSize = true;
ADC121.DMA_CHANNEL.transferSize = 1000;
ADC121.DMA_CHANNEL.enableInterrupt = true;
ADC121.DMA_CHANNEL.addressMode = "f2b";
ADC121.DMA_CHANNEL.enabledEvents = ["EVENT_CHANNEL"];
ADC121.DMA_CHANNEL.interruptPriority = "0";
ADC121.DMA_CHANNEL.peripheral.$assign = "DMA_CH3";
ADC122.endAdd = 1;
ADC122.repeatMode = true;
ADC122.trigSrc = "DL_ADC12_TRIG_SRC_EVENT";
ADC122.adcMem1chansel = "DL_ADC12_INPUT_CHAN_1";
ADC122.enabledInterrupts = ["DL_ADC12_INTERRUPT_DMA_DONE"];
ADC122.$name = "ADC0";
ADC122.adcMem0chansel = "DL_ADC12_INPUT_CHAN_1";
ADC122.enableFIFO = true;
ADC122.configureDMA = true;
ADC122.startAdd = 1;
ADC122.enabledDMATriggers = ["DL_ADC12_DMA_MEM1_RESULT_LOADED"];
ADC122.interruptPriority = "0";
ADC122.sampCnt = 10;
ADC122.subChanID = 12;
ADC122.sampleTime1 = "0";
ADC122.sampleTime0 = "100ns";
ADC122.peripheral.$assign = "ADC0";
ADC122.adcPin1Config.$name = "ti_driverlib_gpio_GPIOPinGeneric5";
ADC122.DMA_CHANNEL.srcLength = "HALF_WORD";
ADC122.DMA_CHANNEL.dstLength = "HALF_WORD";
ADC122.DMA_CHANNEL.addressMode = "f2b";
ADC122.DMA_CHANNEL.configureTransferSize = true;
ADC122.DMA_CHANNEL.transferSize = 1000;
ADC122.DMA_CHANNEL.enabledEvents = ["EVENT_CHANNEL"];
ADC122.DMA_CHANNEL.enableInterrupt = true;
ADC122.DMA_CHANNEL.$name = "DMA_CH4";
ADC122.DMA_CHANNEL.destIncrement = "INCREMENT";
ADC122.DMA_CHANNEL.interruptPriority = "0";
const Board = scripting.addModule("/ti/driverlib/Board", {}, false);
Board.peripheral.$assign = "DEBUGSS";
Board.peripheral.swclkPin.$assign = "PA20";
Board.peripheral.swdioPin.$assign = "PA19";
DAC12.dacConfigureDMA = true;
DAC12.dacPosVREF = "VEREFP";
DAC12.dacOutputPinEn = true;
DAC12.dacAmplifier = "ON";
DAC12.sub0ChanID = 2;
DAC12.dacSampleTimerRate = "1M";
DAC12.dacFIFOEn = true;
DAC12.dacFIFOTrigger = "HWTRIG0";
DAC12.dacFIFOThresh = "TWO_QTRS_EMPTY";
DAC12.peripheral.$assign = "DAC0";
DAC12.peripheral.OutPin.$assign = "PA15";
DAC12.DMA_CHANNEL.srcLength = "HALF_WORD";
DAC12.DMA_CHANNEL.dstLength = "HALF_WORD";
DAC12.DMA_CHANNEL.srcIncrement = "INCREMENT";
DAC12.DMA_CHANNEL.interruptPriority = "0";
DAC12.DMA_CHANNEL.addressMode = "b2f";
DAC12.DMA_CHANNEL.transferMode = "FULL_CH_REPEAT_SINGLE";
DAC12.DMA_CHANNEL.configureTransferSize = true;
DAC12.DMA_CHANNEL.transferSize = 40;
DAC12.DMA_CHANNEL.$name = "DMA_CH1";
DAC12.DMA_CHANNEL.peripheral.$assign = "DMA_CH1";
DAC12.OutPinConfig.$name = "ti_driverlib_gpio_GPIOPinGeneric4";
DMA.pubChanID = 1;
GPIO1.$name = "LED_PIN";
GPIO1.port = "PORTA";
GPIO1.associatedPins[0].$name = "PIN_8";
GPIO1.associatedPins[0].assignedPin = "8";
GPIO1.associatedPins[0].ioStructure = "SD";
GPIO1.associatedPins[0].pin.$assign = "PA8";
SYSCTL.useHFCLK_Manual = true;
SYSCTL.HFCLK_Freq = 12000000;
SYSCTL.MFPCLKEn = true;
SYSCTL.MFPCLKSource = "HFCLK";
SYSCTL.HFCLK4MFPCLKDIV = "3";
SYSCTL.enableSYSOSCFCL = true;
SYSCTL.SYSPLL_CLK0En = true;
SYSCTL.SYSPLL_Pdiv = 4;
SYSCTL.SYSPLL_Qdiv = 20;
SYSCTL.MFCLKEn = true;
SYSCTL.MCLKSource = "HSCLK";
SYSCTL.peripheral.$assign = "SYSCTL";
SYSCTL.peripheral.hfclkInPin.$assign = "PA6";
SYSTICK.periodEnable = true;
SYSTICK.interruptEnable = true;
SYSTICK.interruptPriority = "0";
SYSTICK.systickEnable = true;
SYSTICK.period = 80000;
TIMER1.timerClkDiv = 8;
TIMER1.interruptPriority = "1";
TIMER1.timerMode = "PERIODIC";
TIMER1.event1PublisherChannel = 2;
TIMER1.event1ControllerInterruptEn = ["ZERO_EVENT"];
TIMER1.$name = "DAC_TIMER";
TIMER1.timerStartTimer = true;
TIMER1.interrupts = ["ZERO"];
TIMER1.timerPeriod = "0.01ms";
TIMER1.peripheral.$assign = "TIMA0";
TIMER2.$name = "ADC_TIMER";
TIMER2.event1ControllerInterruptEn = ["ZERO_EVENT"];
TIMER2.timerMode = "PERIODIC";
TIMER2.timerClkDiv = 8;
TIMER2.timerPeriod = "0.01 ms";
TIMER2.timerStartTimer = true;
TIMER2.interrupts = ["ZERO"];
TIMER2.interruptPriority = "0";
TIMER2.event2ControllerInterruptEn = ["ZERO_EVENT"];
TIMER2.event2PublisherChannel = 12;
UART1.$name = "UART0";
UART1.enabledDMARXTriggers = "DL_UART_DMA_INTERRUPT_RX";
UART1.targetBaudRate = 500000;
UART1.enabledDMATXTriggers = "DL_UART_DMA_INTERRUPT_TX";
UART1.enabledInterrupts = ["DMA_DONE_TX"];
UART1.interruptPriority = "0";
UART1.peripheral.$assign = "UART0";
UART1.peripheral.rxPin.$assign = "PA1";
UART1.peripheral.txPin.$assign = "PA0";
UART1.txPinConfig.direction = scripting.forceWrite("OUTPUT");
UART1.txPinConfig.hideOutputInversion = scripting.forceWrite(false);
UART1.txPinConfig.onlyInternalResistor = scripting.forceWrite(false);
UART1.txPinConfig.passedPeripheralType = scripting.forceWrite("Digital");
UART1.txPinConfig.$name = "ti_driverlib_gpio_GPIOPinGeneric1";
UART1.rxPinConfig.hideOutputInversion = scripting.forceWrite(false);
UART1.rxPinConfig.onlyInternalResistor = scripting.forceWrite(false);
UART1.rxPinConfig.passedPeripheralType = scripting.forceWrite("Digital");
UART1.rxPinConfig.$name = "ti_driverlib_gpio_GPIOPinGeneric2";
UART1.DMA_CHANNEL_RX.$name = "DMA_CH0";
UART1.DMA_CHANNEL_RX.srcLength = "BYTE";
UART1.DMA_CHANNEL_RX.dstLength = "BYTE";
UART1.DMA_CHANNEL_RX.configureTransferSize = true;
UART1.DMA_CHANNEL_RX.transferSize = 100;
UART1.DMA_CHANNEL_RX.addressMode = "f2b";
UART1.DMA_CHANNEL_RX.transferMode = "FULL_CH_REPEAT_SINGLE";
UART1.DMA_CHANNEL_RX.destIncrement = "INCREMENT";
UART1.DMA_CHANNEL_RX.peripheral.$assign = "DMA_CH0";
UART1.DMA_CHANNEL_TX.$name = "DMA_CH2";
UART1.DMA_CHANNEL_TX.addressMode = "b2f";
UART1.DMA_CHANNEL_TX.srcLength = "BYTE";
UART1.DMA_CHANNEL_TX.dstLength = "BYTE";
UART1.DMA_CHANNEL_TX.enableInterrupt = true;
UART1.DMA_CHANNEL_TX.enabledEvents = ["EVENT_CHANNEL"];
UART1.DMA_CHANNEL_TX.configureTransferSize = true;
UART1.DMA_CHANNEL_TX.transferSize = 4005;
UART1.DMA_CHANNEL_TX.interruptPriority = "0";
UART1.DMA_CHANNEL_TX.srcIncrement = "INCREMENT";
VREF.basicMode = "DL_VREF_ENABLE_DISABLE";
VREF.checkVREFReady = true;
VREF.basicExtVolt = 3.3;
VREF.peripheral.$assign = "VREF";
VREF.peripheral.vrefPosPin.$assign = "PA23";
VREF.vrefPosPinConfig.$name = "ti_driverlib_gpio_GPIOPinGeneric3";
ProjectConfig.migrationCondition = true;
/**
* Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
* version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to
* re-solve from scratch.
*/
ADC121.peripheral.adcPin1.$suggestSolution = "PA16";
ADC122.peripheral.adcPin1.$suggestSolution = "PA26";
ADC122.DMA_CHANNEL.peripheral.$suggestSolution = "DMA_CH4";
TIMER2.peripheral.$suggestSolution = "TIMA1";
UART1.DMA_CHANNEL_TX.peripheral.$suggestSolution = "DMA_CH2";
运行效果:
正常:

不正常(调试界面点复位或者硬件上reset引脚给一次低电平脉冲):

ccs和keil同样现象

