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.

[参考译文] CCS/msp432p401r:CAN#39;t 使计时器正常工作

Guru**** 2596535 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/647910/ccs-msp432p401r-can-t-get-timer-to-work

器件型号:MSP432P401R

工具/软件:Code Composer Studio

我一直在尝试让计时器 A 正常工作、但没有运气。 实际上、当我执行代码时、电路板看起来会冻结。 我一直在搜索有关如何使计时器正常工作的几个小时的示例、我发现每个示例都是不同的、我无法让任何计时器正常工作。 我还尝试使用 driverlib.h、但即使包含它、我也会得到所有常量的错误、表示它们未定义。 有人能看到我做了什么错吗?

枚举按钮状态{
   READY = 0、
   init_cycle = 1、
   full_cycle = 2
};

enum buttonState button1State = READY;
enum buttonState button2State = READY;

void TA0_0_IRQHander (void){
   switch (button1State){
   case init_cycle:
       button1State = full_cycle;
       中断;
   默认值:
       button1State = READY;
   }

   switch (button2State){
   case init_cycle:
       button2State = full_cycle;
   默认值:
       button2State =就绪;
   }

   TA0CTL &=~1;        //确认中断
   TA0CCTL0 &=~1;      //确认中断
   //NVIC_ICPR0 =(1<<8);//清除 NVIC 中的中断挂起标志


void main (void)

   WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;      //停止看门狗计时器

   //本节设置按钮和 UART

   //配置去抖计时器
   TA0CTL &=~0x0030;                      //停止计时器 A0
   TA0CTL |= 0x0004;                      //复位计时器
   TA0CTL &=~0x0004;                     //结束复位
   TA0CTL = 0x0202;                       // SMCLK、1分频、启用定时器、启用中断
   TA0CCTL0 = 0x0010;                     //断开 I/O 引脚、比较模式、启用中断
   TA0CCR0 = 3745;                       //我认为这应该是~10ms
   TA0EX0 &=!0x0007;                      //时钟分频器- 3MHz/8 = 375kHz (2.67uS)

   NVIC_setpriority (TA0_0_IRQn、2);
   NVIC_EnableIRQ (TA0_0_IRQn);


    //此部分启用其他中断

   _enable_interrupt ();

   while (1){

      //主循环

  }

注意:这里是我尝试过的其他一些代码、我认为其中的大部分用于 driverlib

   //中断寄存器中断(INT_TA0_0、TA0_0_ISR_Hander);
   //NVIC_ISER0 =(1<<8);                  //启用计时器中断
//   TA0CTL |= 0x0010;                      //开始计时器计数直到 TA0CCR0
//   const Timer_A_UpModeConfig upConfig =
//   {
//           TIMER_A_CLOCKSOURCE_SMCLK、             // SMCLK 时钟源
//           TIMER_A_CLOCKSOURCE_DEVIDER_1、         // SMCLK/1 = 3MHz
//           45000、                                 // 15ms 去抖周期
//           TIMER_A_TAIE_INTERRUPT_DISABLE,        //禁用计时器中断
//           TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE,   //启用 CCR0中断
//           TIMER_A_DO 清除                       //清除值
//   };
   /*停止 WDT 并禁用主中断*/
//   map_WDT_A_holdTimer();
//   map_Interrupt_disableMaster ();
   /*将主时钟初始化为3MHz */
//   map_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 3);
//   map_CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_clock_divider);
//   map_CS_initClockSignal (CS_HSMCLK、CS_DCOCLK_select、CS_clock_divider);
//   map_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_clock_divider);
//   map_Timer_a_configureUpMode (timer_A0_BASE、&upConfig);
//   map_Interrupt_enableInterrupt (INT_TA0_0);
//   map_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
//   map_SysTick _enableModule();
//   map_SysTK_setPeriod (1500000);
//   map_Interrupt_enableSlepOnIsrExit();
//   map_SysTick _enableInterrupt ();
//   CSKEY = CSKEY _VAL;                 //解锁 CS 模块以进行寄存器访问
//   CSCTL0 = 0;                        //重置调优参数
//   CSCTL0 = DCORSEL_3;                //将 DCO 设置为12MHz (标称值、8-16MHz 范围的中心)
//   CSCTL1 = SELA_2 | SELs_3 | SELM_3; //选择 ACLK = REFO、SMCLK = MCLK = DCO
//   CSKEY = 0;                         //锁定 CS 模块,防止意外访问
//   NVIC_ISER0 = 1 <<(INT_TA0_0 - 16)& 31);
//   TA0CTL = tassel_2 + MC_1 + TACLR;// SMCLK、向上、清零
//   TA0CCR0 = 12000;
//   TA0CCTL0 = CCIE;
//   map_Interrupt_enableMaster ();


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

    Justin、

    很抱歉您遇到问题。 您能不能先告诉我几件事:

    1) 1)您正在使用什么 LaunchPad? 是红色还是黑色?

    2) 2)您是否查看过这些示例、并让其中任何一个示例开箱即用?
    dev.ti.com/.../

    如果您向下滚动到该链接的底部、您将找到许多计时器 A 和计时器32示例、以帮助您快速入门。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Justin、这是否解决了您的问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于不活动、我将关闭此帖子。 不过、请随时发布新问题或继续此主题中的讨论。