请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR5994 工具/软件:Code Composer Studio
您好!
我正在输出占空比不断变化的 PWM 信号。 我的代码基于设置一个计时器、该计时器最多可对 PWM 信号的一个周期进行计数、并设置另一个计时器用于占空比。 最终目标是使用 LPF 来求 PWM 的平均值并创建一个正弦波。
我的问题是、我的中断永远不会被触发。 我不知道为什么。 我尝试了几种计时器初始化方法、但运气不好。 如果能为代码提供任何帮助、我将不胜感激。 如果有人能给我指出这个项目的正确方向、我也会很高兴。
#include
#include
/**
* main.c
*
/ unsigned char 计数器; //波形数组中的当前位置
unsigned char wave[32]={ //波形,预设为正弦值
128、140、152、164、173、 181、187、191、
192、191、187、181、173、 164、152、140、
128、116、104、92、83、 75、69、65、
64、65、69、75、83、 92、104、116};
无符号 int i; //用于'for'循环。
void main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止 WDT
PM5CTL0 &=~LOCKLPM5;
P8DIR |= BIT0;// P1.0输出
P1DIR |= BIT0;
计数器= 0; //重置计数器
P8OUT=0x0001;
//初始化计时器
TA0CCTL0 |= CCIE;//启用定时器上的中断
TA0CCTL1 |= CCIE;//启用 CCR1中断
TA0CCR0 = 256; //将 PWM 周期设置为256个时钟周期
TA0CCR1 = wave[计数器]; //设置第一个占空比值
TA0CTL = tassel_1 |TAIE| MC_1 | TACLR;// SMCLK、upmode、启用中断、清除 TA1R
P8OUT=0x0001;
P1OUT=0x0001;
P1OUT=0x000;
//printf ("使用 init\n"done);
_BIS_SR (LPM0_Bits + GIE);//输入 LPM0带中断
}
//**
* TimerA0中断服务例程
**/
#pragma vector=TIMER0_A0_vector
__interrupt void Timer_A0 (void)
{
P8OUT |= BIT0; //设置 P1.0
P1OUT=0x0001;
TA0CCR1 = wave[计数器]; //设置下一个占空比值
计数器+= 1; //将偏移添加到 CCR0
如果(计数器==32) //如果计数器位于数组的末尾
{
计数器= 0; //重置计数
器}
}
/**
* TimerA1中断向量(TAIV)处理程序
**/
#pragma vector=Timer1_A1_vector
__interrupt void Timer_A1 (void)
{
switch (TAIV)
{
案例2: // CCR1中断
P8OUT &=~BIT0; //清除 P1.0以确定占空比。
中断;
默认值:
中断;
}
}