This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401R:Timer_A 中断重复运行

Guru**** 2582405 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/614061/msp432p401r-timer_a-interrupt-running-repeatedly

器件型号:MSP432P401R

我正在使用 MSP432 Launchpad (修订版1.0)进行一个项目、我想以44.1kHz 的频率对音频进行采样。 我已经配置好了 ADC、工作正常、但我的计时器有问题。  

在我的计时器 ISR 中、我只需切换输出引脚以使用示波器进行分析。 中断重复发生、但不返回主 while (1)循环。 我不是清除标志还是应该清除的内容?

我的板在 VCORE1工作模式下以48MHz 运行。 我在下面添加了我的代码。 抱歉、如果有一些问题、这是我第一次尝试与 MSP432P401R 一起进行项目。

#include "msp.h"

#define A0 BIT5

#define startConversion() ADC14->CTL0 |= ADC14_CTL0_SC

void VCORE1();
void CLK_init();
void ADC_init();
void TIMER_init();


//注释
*@ 48MHz,per=20.83ns
* void CLK_init()






;void ADC_titrt = t_tt;void CTL_t1;void T = t_t_tid_t_t_t_t&tr = tr;t_tid_tr = t_tr = t_t_t_tr;t_t&t_t_tr = t_t_t_t_t_



//在将时钟设置为48MHz
之前进入 VCORE1模式__delay_cycles (1000);//等待 VCORE 为时钟更改做好准备的延迟
clk_init ();//将时钟设置为48MHz
ADC_init ();//初始化 ADC,等待计时器启动转换
timer_init ();

NVIC_EnableIRQ (ADC14_IRQn);
NVIC_EnableIRQ (TA0_0_IRQn);

_startConversion (_

);//

while (1);
}

void ADC14_IRQHandler (void)
{
value = ADC14->MEM[0];
startConversion ();
}

void TA0_0_IRQHandler (void)
{
P2->OUT ^= BIT7;
}

void VCORE1 ()
{
while (PCM->CTL0 & CTL1_PCM_CTL0)
;
while (


void CTLPM0_CTLPM0_CTL0_PCM_

+= 0xPCM_CCM_DRM_);while (b_CTL0_CTLPM0_CTLPM_CTL0_CTLPM0_CTL0_PCM_+++++++)+= 0xPCM_CCM_CCM_ BUSY = 0xPCM_CTL0_CCM_++++++
//解锁 CS 寄存器
CS->CTL0=CS_CTL0_DCOEN |
CS_CTL0_DCORSEL_5;//选择24MHz 时钟速度
CS->CTL1=CS_CTL1_INIT_3 |
CS_CTL1_SELM_3;//使用 DCOCLK 作为 MCLK 的源,SMCLK =





~ CEL0 (CS + INIT_3);CS_CLK = CC_CLK + CEL0 (CS + CEL0) void)寄存器//将 ADC 引脚设置为输入
P5->SEL0 |= A0;//选择 ADC 作为端口功能

ADC14->CTL0=ADC14_CTL0_SHS_0|//使用 SC 位开始转换
ADC14_CTL0_SHP|//??
ADC14_CTL0_ON;//打开
ADC14->CTL1上的 ADC 模块=ADC14_CTL1_RES_14BIT;//设置14位分辨率
ADC14->IER0 =ADC14_IER0_IE0;//在 A0上完成转换时启用中断
ADC14->CTL0|=ADC14_CTL0_ENC;//启用转换(不启动任何)
}

void timer_init ()
{
timer_A0->CCTL[0]=timer_A_CCTLN_CCIE;//启用 CC 中断

TIMER_A0->CTL=TIMER_A_CTL_tassel_2|//选择 SMCLK 作为计时器
TIMER_A_CTL_ID_3的源|//将时钟除以8 (这将为计时器时钟产生6MHz)
TIMER_A_CTL_MC_1|//向上计时器 TIMER_A_CCR_L_0_6kHz
;

/清除计时器计时器=4136kHz;/>40kHz = 6kHz;/>40kHz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的问题是我没有清除 CCTL0寄存器中的 CCIFG!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您发布您的解决方案。

    此致、

    David