请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP432P401R 您好,
我正在开发一个应用程序,我想以给定的速率(22.05 kHz,但这并不重要)对信号进行采样。 我也在对该信号进行处理,所以我想将程序的处理部分包含在计时器中断中,并将采样包含在ADC中断中。 我已按如下所示配置了计时器和ADC14外围设备:
void timer_init(void){/*
enable interrupts */
NVIC->ISER[0]|=1<<(TA0_0_IRQn);NVIC->ISER[0]
|=1<<(TA0_N_IRQn)&31);TIMER
A0->CCT1]|=
TIMER ->ISER[0]|=1(AO /NO_ECUTIM/ UN_REG_ICAT_IAT_ECAT_IATE/IE7*REQUIATE_REQUIORIORIATE_REQUIORIOR_IATE_REAL:IATE_REQUITE_IAT存在
中断
/ UNSE_I
TIME_A0->CCR[1]= 1000;
/*设置时钟源和模式*/
TIMER_A0->CTL |=
TIMER_A_CTL_Ssel__SMCLK |// SMCLK作为源
TIMER_A_CTL_ID__8|// 时钟分配器(1,2,4,8)
TIMER_A_CTL_MC__CONTINUAL |// 连续模式
TIMER_A_CTL_CL_CLR; //清除计时器计数
TIME_A0->Ex0 |= TAIDEX__1;//扩展时钟分配器(1,2,3,4,5,6,7,8)
}
void ADC14_init(void){/*
启用中断*/
NVIC->ISER[0]|1 <<((ADC14_IRQn)& 31);
/*配置MIC_OUTPUT以实现MIC_OUTPUT
~MIC_MIC_MIC_EN=
~输出;MIC_MIC_PIN_PIN=输出;MIC_SECC_PIN_PIN_OUTPL14=输出MIC_MIC_MIC_PIN/输出=输出=输出;MIC_MIC_MIC_MIC_PIN=输出MIC_MIC_MIC_MIC_PIN=输出;MIC_PIN=输出=输出=输出;MIC_MIC_MIC_MIC_PIN_PIN_PIN=输出=输出输出=输出;MIC_MIC_MIC_MIC_MIC_MIC_
/*配置控制寄存器0 */
ADC14->CTL0 =
ADC14_CTL0_SHS_1|// 从0.1 中开始转换ADC14_CTL0_SHP
|// 脉冲模式
ADC14_CTL0_SHT0_2 |// 16时钟周期采样时间
ADC14_CTL0_ON; //
配置控制寄存器ADC14_ADC14_
/*选择A10作为源*/
ADC14->MCTL[0]|= MIC_OUT通道;
/*在A0上的转换完成时启用中断*/
ADC14->IER0 = ADC14_IER0_IE0;
/*启用转换*/
ADC14->CTL0 |= ADC14_CTL0_ENC;
}
下面是我的中断服务例程的一个最小示例
// timer ISR
void TA0_N_IRQHandler(void){
timer_counter++;
timer_A0->CCR[1]+= period;
timer_A0->CCTL[1]&=~CCIFG;
}//
ISR
void ADC14_IRQHandler(void){
IF(++index >=2万){ index =0;}_ADEM_counter
=0;}/clean_counter }/ADD+>
音频标志
当我运行此程序时,计时器的ISR可以很清楚地运行(通过观察内存中timer_counter的值),但ADC ISR似乎运行一次(ADC_counter的值增加一次,然后似乎停止)。
我认为我没有正确掌握如何从计时器触发ADC14转换,以及如何将其与ISR联系起来。 我正在寻找有关如何以不同方式配置或实施此功能的建议。
谢谢!
Thomas