NXP MCU 技术论坛
直播中

李丽华

7年用户 1433经验值
私信 关注
[问答]

如何使用systick定期采样

我正在尝试连续采样 ADC0 CH1,并使用 MCUXpresso 内部的配置工具进行设置。当我选择 Sampled channels 时,channel number 列总是在最后写为 disabled。
我想与其连续采样,不如使用 systemtick 每 10 毫秒触发一次单通道采样和转换。
您能否解释一下我在第一段中做错了什么,以及如何使用 systick 定期采样?


ADC 设置的 configTool 屏幕

在 main 之前显示代码
对于第一段,这是来自 peripherals.c 的自动生成的配置信息(带有额外信息)

/*开始粘贴
/**************************************************** ****************************************************** *********************
* ADC0 初始化代码
************************** ****************************************************** *********************************************/
/* 关闭 clang 格式 * /
/* 以下文本用作工具设置 *************************************
实例:
- 名称:'ADC0'
- 类型:'lpc_adc'
- 模式:'ADC'
- custom_name_enabled:'false'
- type_id:'lpc_adc_d74172b5bd0591c0d32a6c93c043a67f'
- functional_group:'BOARD_InitPeripherals' -
外设:'ADC0'
- config_sets:
- fsl_adc:
- doSelfCalibration : '真的'
- adc配置:
- clockMode: 'kADC_ClockSynchronousMode'
- clockSourceFreq: 'BOARD_BootClockIRC12M'
- clockDividerNumber: '0'
- enableLowPowerMode: 'false'
- voltageRange: 'kADC_HighVoltageRange'
- thresholdConfig:
- ADC_SetThreshold0: 'false'
- thresholdSettingsPair0:
- lowValue: '0'
- highValue : '0'
- ADC_SetThreshold1: 'false'
- thresholdSettingsPair1:
- lowValue: '0'
- highValue: '0'
- enableSeqConfigurationA: 'true'
- adcConvSeqConfigA:
- enableHighPriority: 'true'
- adcConvSeqConfig:
- triggerMaskM: '0U'
-触发极性:'kADC_TriggerPolarityNegativeEdge'
- enableSyncBypass: 'false'
- enableSingleStep: 'false'
- interruptMode: 'kADC_InterruptForEachConversion'
- enableSeqConfigurationB: 'false'
- adcConvSeqConfigB:
- enableHighPriority: 'false'
- adcConvSeqConfig:
- triggerMaskM: '0U'
- triggerPolarity: 'kADC_TriggerPolarityNegativeEdge'
- enableSyncBypass: 'false'
- enableSingleStep :'false'-
中断模式:'kADC_InterruptForEachConversion'-
通道:
-0:
-通道名称:''
-通道编号:'CH.1'-通道阈
值对:'thresholdPair0'
-thresholdInterruptMode:'kADC_ThresholdInterruptDisabled'
-conversion_sequence:'a'
- interrupt_sel: 'kADC_ConvSeqAInterruptEnable'
- enable_irq_seqA: 'true'
- adc_interrupt_seqA:
- IRQn: 'ADC0_SEQA_IRQn'
- enable_interrrupt: 'enabled'
- enable_priority: 'true'
- 优先级:'3'
- enable_custom_name: 'false'
- enable_irq_seqB: 'false'
- adc_interrupt_seqB:
- IRQn : 'ADC0_SEQB_IRQn'
- enable_interrrupt: 'enabled'
- enable_priority: 'false'
- 优先级:'0'
- enable_custom_name: 'false'
- enable_irq_thcmp: 'false'
- adc_interrupt_thcmp:
- IRQn: 'ADC0_THCMP_IRQn'
- enable_interrrupt: 'enabled'
- enable_priority: 'false'
- 优先级:'0'
- enable_custom_name: 'false'
- enable_irq_ovr: 'false'
- adc_interrupt_ovr:
- IRQn: 'ADC0_OVR_IRQn'
- enable_interrrupt: 'enabled'
- enable_priority: 'false'
- priority: '0'
- enable_custom_name: 'false'
* 小心修改此注释 - 它是工具的 YAML 设置 ******* ***/
/* clang-format on */
const adc_config_t ADC0configStruct = {
.clockDividerNumber = 0UL,
.enableLowPowerMode = false,
.voltageRange = kADC_HighVoltageRange,
};
/* 转换序列A配置结构 */
const adc_conv_seq_config_t ADC0ConvSeqAConfigStruct = {
.channelMask = 2U,
.triggerMask = 0U,
.triggerPolarity = kADC_TriggerPolarityNegativeEdge,
.enableSyncBypass = false,
.enableSingleStep = false,
.interruptMode = kADC_InterruptForEachConversion
};
static void ADC0_init(void) {
/* 执行自校准 */
ADC_DoSelfCalibration(ADC0_PERIPHERAL, ADC0_CLK_FREQ);
/* 初始化 ADC0 外设 */
ADC_Init(ADC0_PERIPHERAL, &ADC0configStruct);
/* 配置序列 A 的优先级 */
ADC_SetConvSeqAHighPriority(ADC0_PERIPHERAL);
/* 配置转换序列 A */
ADC_SetConvSeqAConfig(ADC0_PERIPHERAL, &ADC0ConvSeqAConfigStruct);
/* 启用转换序列 A */
ADC_EnableConvSeqA(ADC0_PERIPHERAL, true);
/* 启用来自 ADC 的中断 */
ADC_EnableInterrupts(ADC0_PERIPHERAL, kADC_ConvSeqAInterruptEnable);
/* 在通道 1 上配置阈值比较中断 */
ADC_EnableThresholdCompareInterrupt(ADC0_PERIPHERAL, 1U, kADC_ThresholdInterruptDisabled);
/* NVIC 中的中断向量 ADC0_SEQA_IRQn 优先级设置。*/
NVIC_SetPriority(ADC0_ADC_SEQ_A_IRQN, ADC0_ADC_SEQ_A_IRQ_PRIORITY);
/* 在 NVIC 中启用中断 ADC0_SEQA_IRQn 请求。*/
EnableIRQ(ADC0_ADC_SEQ_A_IRQN);
}
结束过去*/


更多回帖

发帖
×
20
完善资料,
赚取积分