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/MSP430FR2633:计时器不能#39;t 启动中断例程

Guru**** 2589245 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/623928/ccs-msp430fr2633-timer-doesn-t-start-interrupt-routine

器件型号:MSP430FR2633
主题中讨论的其他器件:MSPWARE

工具/软件:Code Composer Studio

您好!  

我正在使用 CapTIvate 设计中心、并尝试将代码写入 CapaTouch 传感器以调节 LED 的光。  
当我成功地意识到使用触摸传感器启动 LED 的 PWM 信号时、我无法实现计时器(在代码中:Timer_A1_base)、从而使 PWM 信号的占空比取决于时间。 我的想法是在 apphandler 正在运行时启动计时器(如 PWM 信号)、每次计数器溢出时、占空比应增加5。  
当我使用触摸传感器时、PWM 信号立即运行、我之前在线路中启动的计时器似乎不运行。 甚至没有触发1个中断来增加占空比。  

现在我的问题是:我是否错误地生成了定时器、或者中断是否有任何问题?  

我的代码:



#include
                     //通用 MSP430器件包括

#include "driverlib.h"                  // MSPWare 驱动程序库

#include "captate.h"                  // CapTIvate 触控软件库

#include "CAPT_App.h"                   // CapTIvate 应用程序代码

#include "CAPT_BSP.h"                   // CapTIvate EVM 板级支持包

#include "timer_a.h"

#include "timer_b.h"

#define TIMER_A_PERIOD 524

#define TIMER_B_PERIOD 1000

//#define Duty_cycle 393

int Duty_cycle = 250;

 

void main (void)

      //

      //初始化 MCU

      // bsp_configureMCU()设置器件 IO 和计时

      //全局中断使能被设置为允许外设

      //唤醒 MCU。

      //

      WDTCTL = WDTPW | WDTHOLD;

      bsp_configureMCU();

      _bis_SR_register (GIE);

 

      //

      //启动 CapTIvate 应用程序

      //

      CAPT_AppStart();

      WDT_A_HOLD (WDT_A_base);

      //WDT_B_HOLD (WDT_B_B_B_BASE);

      //P1.1作为 PWM 输出

      GPIO_setPeripheralModuleFunctionOutputPin (

             GPIO_PORT_P1、

             GPIO_PIN1、

             GPIO_secondary 模块功能

      );

      //int Duty_cycle = 1;

      /*

      *禁用 GPIO 上电默认高阻抗模式以激活

      *先前配置的端口设置

      *

      PMM_unlockLPM5 ();

      //生成 PWM -计时器以向上/向下计数模式运行

      Timer_A_outputPWMParam ={0};

      param.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;

      param.clockSourceDivider = TIMER_A_CLOCKSOURCE_divider;

      param.timerPeriod = timer_a_period;

      param.compareRegister = TIMER_A_CAPTURECMPARE 寄存器_1;

      param.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;

      //param.dutyCycle = Duty_cycle;

 

      Timer_A_initUpModeParam 参数 B ={0};

      paramB.clockSource = TIMER_A_CLOCKSOURCE_ACLK;

      paramB.clockSourceDivider = TIMER_A_CLOCKSOURCE_divider;

      paramB.timerPeriod =定时器_B_PERIOD;

      paramB.timerInterruptEnable_TAIE =定时器_A_TAIE_INTERRUPT_ENABLE;

      paramB.captureCompareInterruptEnable_CCR0_CCIE = TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE;

      paramB.timerClear = timer_a_do _clear;

      paramB.startTimer = false;

 

 

 

      //Enter LPM0

      _bis_SR_register (LPM0_bits);

 

      //后台循环

      //

      while (1)

      {

            //

            //运行 captate 应用程序处理程序。

            //在应用处理程序运行时设置 LED1,

            //并在检测到接近时设置 LED2

            //在任何传感器上。

            //

            LED1_ON;

            if (CAPT_appHandler ()=true)

            {

               LED2_ON;

               param.dutyCycle = Duty_cycle;

               Timer_A_startCounter (timer_A1_base、&paramB);

               Timer_a_outputPWM (timer_A0_BASE、param);

            }

            其他

                       LED2_OFF;

                       LED1_OFF;

                       // Timer_A_stop (timer_A1_base);

 

            //这是一个很好的地方,可以添加任何内容

            //后台应用程序代码。

            //

            __no_operation()

 

            //

            //后台循环迭代结束

            //如果没有剩余的操作,则进入睡眠状态

            //

            CAPT_appSleep ();

 

      }//结束后台循环

}//结束 main()

#pragma vector=TIMER0_A1_vector

_interrupt void Timer_A1 (void)

   if (Duty_cycle < 500)

   Duty_cycle= Duty_cycle+5;

   其他

       Duty_cycle = 0;

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

    在将函数放入 CapTIvate 应用程序之前、您是否曾尝试引用代码示例并验证其运行情况? TA1 CCIFG (因为 CCIE 是为 paramB 设置的)实际上驻留在 Timer1_A0_vector 中、您似乎引用了错误的 ISR。

    此致、
    Ryan