工具/软件: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 ++; }