主题中讨论的其他器件: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、¶mB);
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;
}