工具/软件:Code Composer Studio
我 正在尝试使用 MSP-EXP430FR5969对 开关 P1.1上来自外部源的脉冲进行计数。 我配置计时器 TA0来捕获脉冲并启用 全局中断。
TIMER0_A3中断矢量服务例程、用于 对脉冲进行计数。 我设置断点、以便在中断例程行进行调试
代码跳转至中断服务(按下开关时触发 P1.1)、然后在不按下开关的情况下继续触发!!!
StoredCount 在增加!
如果 您 能 解决我的问题、我将不胜感激
#include "driverlib.h"
void initGPIO (void);
void initClocks (void);
#define NUMBER_TIMER_CAPTURES 20
volatile unsigned int StoredCount = 0;
int main (void){
WDT_A_HOLD (WDT_A_base);
initClocks();
initGPIO();
// TA0CCTL2,TA0的捕捉/比较控制寄存器0
TA0CCTL2 |= CCIE;//中断使能
TA0CCTL2 |= CCIS_0;// CCI0A 的捕捉//捕捉输入 CCIxA 被连接到由 CCIS 位选择的外部引脚。
TA0CCTL2 |= CM_2;//在下降沿进行捕捉
TA0CCTL2 |= CAP;//捕捉模式
//Timer_A0控制寄存器
TA0CTL |= tassel_2;//来自 SMCLK 的源计时器 A1
// TA0CTL |= MC1;///启动计时器
TA0CTL |=TACLR;
//TA0CTL |=TAIE;
_BIS_SR (GIE);
_NO_OPERATION ();
// while (1)
// {
//}
}
void initClocks(void){
/*时钟系统设置、MCLK = SMCLK = DCO (1MHz)、ACLK = VLOCLK */
CSCTL0_H = CSKEY >> 8;
CSCTL1 = DCOFSEL_0;
CSCTL2 = SELA_VLOCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;
CSCTL0_H = 0;
}
void initGPIO (void)
{
/*将 GPIO 配置为默认状态*/
P1OUT = 0;P1DIR = 0xFF;
P2OUT = 0;P2DIR = 0xFF;
P3OUT = 0;P3DIR = 0xFF;
P4OUT = 0;P4DIR = 0xFF;
PJOUT = 0;PJDIR = 0xFFFF;
GPIO_setAsOutputPin (GPIO_PORT_P4、GPIO_PIN6);//将 P4.6设置为输出方向
GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);//将 P1.0设置为输出方向
GPIO_setAsInputPinWithPullupResistor (GPIO_PORT_P1、GPIO_PIN1);//上拉 P1.1 // P1DIR &=~BIT4;P1SEL1 &=~BIT4;P1SEL0 || BIT4;
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、GPIO_PIN1、GPIO_secondary 模块_function);//P1.1用作输入捕捉设置引脚1.1/TA0.CCI2A
//设置引脚1.1/TA0.CCI2A
// P1DIR &=~BIT1;
// P1SEL1 &=~BIT1;
// P1SEL0 |= BIT1;
/*禁用 GPIO 上电默认高阻抗模式。 //
// PM5CTL0 &=~LOCKLPM5;LOCK 位被清零:
PMM_unlockLPM5 ();
}
#pragma vector = TIMER0_A1_vector
__interrupt void Timer0_A1_ISR (void)
{
StoredCount ++;
}
