昨天有关于触发AD采样的定时器初始化忘了写,今天准备补充在文章前面,然后是AD的几种触发方式和DMA的几种模式的说明,相当于是对昨天的补充
目录
MSP432E401Y定时器初始化
/* 使能定时器0的时钟并且设置频率为1KHz,使能ADC触发方式为定时器0 */
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
while(!(MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER0)))
{
}
MAP_TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC);
MAP_TimerLoadSet(TIMER0_BASE, TIMER_A, (systemClock/SAMP_FREQ));
MAP_TimerADCEventSet(TIMER0_BASE, TIMER_ADC_TIMEOUT_A);
MAP_TimerControlTrigger(TIMER0_BASE, TIMER_A, true);
MAP_TimerEnable(TIMER0_BASE, TIMER_A);
这里的SAMP_FREQ是采样频率,此处为1KHz;systemClock为时钟主频。
以上的部分和昨天的结合就是整个的MSP432E401Y关于AD部分的初始化。
ADC的几种触发方式
MSP432E401Y中的AD一共有以下几种触发方式
#define ADC_TRIGGER_PROCESSOR 0x00000000 // Processor event
#define ADC_TRIGGER_COMP0 0x00000001 // Analog comparator 0 event
#define ADC_TRIGGER_COMP1 0x00000002 // Analog comparator 1 event
#define ADC_TRIGGER_COMP2 0x00000003 // Analog comparator 2 event
#define ADC_TRIGGER_EXTERNAL 0x00000004 // External event
#define ADC_TRIGGER_TIMER 0x00000005 // Timer event
#define ADC_TRIGGER_PWM0 0x00000006 // PWM0 event
#define ADC_TRIGGER_PWM1 0x00000007 // PWM1 event
#define ADC_TRIGGER_PWM2 0x00000008 // PWM2 event
#define ADC_TRIGGER_PWM3 0x00000009 // PWM3 event
#define ADC_TRIGGER_NEVER 0x0000000E // Never Trigger
#define ADC_TRIGGER_ALWAYS 0x0000000F // Always event
将其中的参数使用MAP_ADCSequenceConfigure这个函数设置AD的触发方式,这里主要应用的是ADC_TRIGGER_TIMER,也就是定时器中断,至于如果用ADC_TRIGGER_ALWAYS做触发方式能不能提高AD采样速度我准备进一步去研究研究。
DMA的几种使用模式
MSP432E401Y中的AD一共有以下几种使用模式
#define UDMA_MODE_STOP 0x00000000
#define UDMA_MODE_BASIC 0x00000001
#define UDMA_MODE_AUTO 0x00000002
#define UDMA_MODE_PINGPONG 0x00000003
#define UDMA_MODE_MEM_SCATTER_GATHER 0x00000004
#define UDMA_MODE_PER_SCATTER_GATHER 0x00000006
#define UDMA_MODE_ALT_SELECT 0x00000001
这里的设置库函数为MAP_uDMAChannelTransferSet,主要使用的是BASIC和PINGPONG。