请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 工具/软件:Code Composer Studio
自从过去三个月以来、我一直在使用 msp430g2553、因此我对这很陌生。 我已经编写了代码来使用计时器 A0生成导通时间为90us 的120us 脉冲。 我正在使用 P1.4上的 GPIO 高-低边沿中断进行计数的相同脉冲。 我每20ms 对脉冲进行一次计数。 为了对脉冲进行计数、我使用计时器 A1每20ms 编写一次 ISR。 但是、当我调试代码时、我观察到控制并未从 计时器 A1 ISR 中退出。 这给我造成了问题。 我只是想在20ms 后从 ISR 中获取控制权。 我已附上我的代码。 请通过闪烁代码和大脑上的指示灯来帮助我。 谢谢你。
/*
* count.c
*
*创建日期:2018年5月20日
*作者:Sumit
*/
#include
#define BuffMax 50 //定义1秒
无符号整型计数的缓冲区限制;
struct 计数
{
unsigned int Pulses[BuffMax];
unsigned int 级别;
unsigned int ID;
};
struct 计数 c;
void main ()
{
unsigned int temp;
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
//时钟系统//
if (CALBC1_1MHz=0xFF)//如果校准常数被擦除
{
while (1);//不加载,陷阱 CPU!
}
DCOCTL = 0;//选择最低 DCOx 和 MODx 设置
BCSCTL1 = CALBC1_1MHZ;//设置范围
DCOCTL = CALDCO_1MHZ;//设置 DCO 阶跃+调制
P1OUT = 0x00;
P1DIR = 0x00;
P1DIR |= BIT2;// P1.2输出
PIT2;// P1SEL = BIT2 //P1.2外设选择
//启动计时器以生成20ms 的中断(TA1.1) P2.1
TA1CCTL1 = CCIE;
TA1CCR0 = 20000;
TA1CTL = tassel_2 + MC_1;
//启动 timerA0 (p1.2)以生成持续时间90US 和周期120US
TA0CCR0 = 120;
TA0CCR1
= 120;/ TA0R1 = CCR1/TA0RTUDR1 /设置周期 // CCR1 PWM 占空比
TA0CTL = tassel_2 + MC_1;// SMCLK、向上
计数模式//初始化端口1.4作为输入及其中断 P1REN |= BIT4;// P1.4上拉/Dpwn P1OUT |= BIT4;// p1.4上拉
P1IE |= BIT4
;// PIT4 |高/低边沿~= PIT4;// PIT4 //清除 P1.4 IFG
//清除所有无用的脉冲
(temp = 0;temp <= BuffMax;temp++)
{
c.Pulses[BuffMax]= 0;
}
Count=0;
_ bis_SR_register (GIE);
// TA1CCTL1 = CCIE;
while (1)
{
_ bis_SR_register (
void
)= 0;_ Timer_A + PMM_1;无符号中断向量= 0;+ PMM_1 = 0
计数= 0;
if (sum < 255)
{
c.puls[c.ID]= sum;
c.ID++;
if (c.ID > BuffMax)
c.ID=0;
}
sum = 0;
for (i=0;i<=Count;i++)
{
SUM+= c.puls[i];
}
c.level =;}puls=0;void
= Port_1;pit_1;pMM_1
(COUNT_1)+= PMIC_TRIBUS_COUNT_TRIBUST_TRIBUST_TRIBUGER/TRIBUCE_COUNT_1;#COUNT_COUNT_TRIBUTRIBUTRUTRIBUTRUTRUTRUTRUTRUTRUTRUTRY= 0;
if (Count > 255)
{
Count = 255;
}
P1IFG &&~BIT4;// P1.4 IFG 已清除
返回;
}