大家好,
我在使用端口中断功能时遇到了麻烦,该功能用于WFP 1.1 和WFP 1.4。 它说我根本没有使用端口1。 我只能看到红色 和蓝色LED亮起。 对于代码,我要使用两个按钮,每个按钮控制一个LED,每个LED以不同的速度闪烁。 每个按钮都更改其控制的LED的行为。 而且我根本没有激活计时器。 有什么想法可能会成为问题吗?
下面是我的代码。 提前感谢您的参与,
Alda
/* DriverLib包括*/
#include "driverlib.h"
/*标准包括*/
#include <stdint.h>
#include <stdbool.h>
/*应用程序定义 */
#define timer_period 0x2DC6.
/* Timer_A0 Uptime配置参数*/
Timer_a_UpModeConfig upConfig0 ={
Timer_a_CLOCKSOURCE_SMCLK, // SMCLK时钟源
Timer_a_CLOCKSOURCE_diverer_64, // SMCLK/1 = 3MHz
Timer_period, // 5000 tick period
TIMER_A_TAIE_INTERRUST_DISABLE, //禁用计时器中断
TIMER_A_CCIE_CCR0_INTERRUCING_ENABLE // 启用CCR0中断
TIMER_A_DO清除 //清除值
};
/* Timer_A1上行模式配置参数*/
Timer_a_UpModeConfig upConfig1 ={
Timer_a_CLOCKSOURCE_SMCLK, // SMCLK时钟源
Timer_a_CLOCKSOURCE_diverer_64, // SMCLK/1 = 3MHz
Timer_period, // 5000 tick period
TIMER_A_TAIE_INTERRUST_DISABLE, //禁用计时器中断
TIMER_A_CCIE_CCR0_INTERRUCING_ENABLE // 启用CCR0中断
TIMER_A_DO清除 //清除值
};
挥发性布尔值按钮已显示,按钮已显示1,按钮已显示2;
易失性内部STS,高速;
volatile isLedOn1, isLedOn2;
浮子乘数,乘数1;
Int period,period1,periodOn,periodOff,periodOn1, 周期偏移1;
内部主(无效)
{
/*停止监视程序*/
MAP_WDT_A_HoldTimer();
/*将WFP 1.0 配置为输出,将WFP 1.1 (开关)配置为输入*/
MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);
MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN2);
MAP_GPIO_setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN2);
/*将WFP 1.1 配置为输入并启用中断*/
MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN4);
MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN4);
MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);
MAP_GPIO_enableInterrupt (GPIO端口P1,GPIO_PIN4);
MAP_Interrupt_enableInterrupt (INT_Port1);
/*为UP模式配置Timer_A0和Timer_A1 */
MAP_Timer_a_configureUpMode(Timer_A0_base,&upConfig0);
MAP_Timer_a_configureUpMode(Timer_A1_base,&upConfig1);
/*启用中断并启动计时器*/
MAP_Interrupt_enableInterrupt (INT_TA1_0);
MAP_Interrupt_enableInterrupt (INT_TA0_0);
MAP_Timer_a_startCounter (TIMER_A1_BASE,TIMER_A_UP_MODE);
MAP_Timer_a_startCounter (TIMER_A0_BASE,TIMER_A_UP_MODE);
/*启用主中断*/
MAP_Interrupt_enableMaster();
/*启用SRAM Bank Retention */
map_sysctl_enableSRAMBankRetention (sysctl_SRAM_Bank1);
MAP_Interrupt_DisableSleepOnIsrExit();
STS = 0;
buttonPressed =假;
buttonPresed1 =假;
buttonPresed2 =假;
isLedOn1 =假;
isLedOn2 =假;
/*转至LPM3 */
同时(1)
{
IF (buttonPresed1 == true)
{
如果(STS = 0)
{
乘数= 0.01 ;
}
否则,如果(STS = 1)
{
乘数= 0.25 ;
}
否则,如果(STS = 2)
{
乘数= 0.5 ;
}
周期= 0x2DC6;
PeriodOn = Period *乘数;
periodOff = period - periodOn;
isLedOn1 =真;
/*为UP模式配置Timer_A1 */
MAP_Timer_a_configureUpMode(Timer_A1_base,&upConfig1);
/*启用中断并启动计时器*/
MAP_Interrupt_enableInterrupt (INT_TA1_0);
MAP_Timer_a_startCounter (TIMER_A1_BASE,TIMER_A_UP_MODE);
}
IF (buttonPresed2 == true)
{
如果(STS = 0)
{
乘数1 = 0.02 ;
}
否则,如果(STS = 1)
{
乘数1 = 0.35 ;
}
否则,如果(STS = 2)
{
乘数1 = 0.45 ;
}
PERIOD1 = 0x54D6;
周期1 =周期1 *乘以1;
周期偏移1 =周期1 -周期1;
isLedOn2 =真;
/*为UP模式配置Timer_A1 */
MAP_Timer_a_configureUpMode(Timer_A0_base,&upConfig0);
/*启用中断并启动计时器*/
MAP_Interrupt_enableInterrupt (INT_TA0_0);
MAP_Timer_a_startCounter (TIMER_A0_BASE,TIMER_A_UP_MODE);
}
while (buttonPressed == false || buttonPresed1 == false || buttonPresed2 == false)
{
MAP_PCM_GotoLPM0();
}
buttonPressed =假;
buttonPresed1 =假;
buttonPresed2 =假;
}
}
/* GPIO ISR */
void Port1_IRQHandler(void)
{
UINT32_t状态;
MAP_Timer_a_stopTimer (TIMER_A1_BASE);
MAP_Timer_a_clearCaptureCompareInterrupt (timer_A1_base,timer_a_CAPTURECOMPare_register_0);
MAP_Timer_a_stopTimer (TIMER_A0_BASE);
MAP_Timer_a_clearCaptureCompareInterrupt (timer_A0_base,timer_a_CAPTURECOMPare_register_0);
MAP_Interrupt_enableInterrupt (INT_TA1_0);
MAP_Interrupt_enableInterrupt (INT_TA0_0);
MAP_Timer_a_startCounter (TIMER_A1_BASE,TIMER_A_UP_MODE);
MAP_Timer_a_startCounter (TIMER_A0_BASE,TIMER_A_UP_MODE);
状态= gPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);
IF (状态和GPIO _PIN1)
{
buttonPresed1 =真;
}
IF (状态和GPIO _PIN4)
{
buttonPresed2 =真;
}
高速++;
IF (高速% 2 == 0)
{
STS = 0;
}
否则,如果(高速% 2 == 1)
{
STS = 1;
}
IF (高速% 3 == 2)
{
STS = 2;
}
buttonPressed =真;
buttonPresed1 =真;
buttonPresed2 =真;
}
void TA1_0_IRQHandler (void)
{
MAP_Timer_a_stopTimer (TIMER_A1_BASE);
MAP_Timer_a_clearCaptureCompareInterrupt (timer_A1_base,timer_a_CAPTURECOMPare_register_0);
IF (isLedOn1 == true)
{
upConfig1.timerPeriod =周期关;
MAP_GPIO_setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
}
否则
{
upConfig1.timerPeriod =周期打开;
MAP_GPIO_setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
}
isLedOn1 =!isLedOn1;
/*为UP模式配置Timer_A1 */
MAP_Timer_a_configureUpMode(Timer_A1_base,&upConfig1);
/*启用中断并启动计时器*/
MAP_Interrupt_enableInterrupt (INT_TA1_0);
MAP_Timer_a_startCounter (TIMER_A1_BASE,TIMER_A_UP_MODE);
}
void TA0_0_IRQHandler (void)
{
MAP_Timer_a_stopTimer (TIMER_A0_BASE);
MAP_Timer_a_clearCaptureCompareInterrupt (timer_A0_base,timer_a_CAPTURECOMPare_register_0);
IF (isLedOn2 == true)
{
upConfig0.timerPeriod =周期偏移1;
MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN2);
}
否则
{
upConfig0.timerPeriod =周期On1;
MAP_GPIO_setOutputHighOnPin (GPIO端口P2,GPIO _PIN2);
}
isLedOn2 =!isLedOn2;
/*为UP模式配置Timer_A1 */
MAP_Timer_a_configureUpMode(Timer_A0_base,&upConfig0);
/*启用中断并启动计时器*/
MAP_Interrupt_enableInterrupt (INT_TA0_0);
MAP_Timer_a_startCounter (TIMER_A0_BASE,TIMER_A_UP_MODE);
}