各位大虾,小弟在学LM3S系列的ARM,遇到问题了,请大家帮忙解决一下。
#include "systemInit.h"
#include <timer.h>
// 定义LED
#define LED_PERIPH SYSCTL_PERIPH_GPIOE
#define LED_PORT GPIO_PORTE_BASE
#define LED_PIN GPIO_PIN_6
int i,T=1;
unsigned char ucVal;
unsigned long ulStatus;
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
SysCtlPeriEnable(LED_PERIPH); // 使能LED所在的GPIO端口
GPIOPinTypeOut(LED_PORT, LED_PIN); // 设置LED所在管脚为输出
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); // 使能Timer模块
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER); // 配置Timer为32位周期定时器
TimerLoadSet(TIMER0_BASE, TIMER_A, T*700UL); // 设置Timer初值,定时500ms
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 使能Timer超时中断
IntEnable(INT_TIMER0A);
IntMasterEnable(); // 使能处理器中断
TimerEnable(TIMER0_BASE, TIMER_A); // 使能Timer计数
for (;;)
{
}
}
void Timer0A_IRQHandler (void)
{
int i;
unsigned char ucVal;
unsigned long ulStatus;
ulStatus = TimerIntStatus(TIMER0_BASE, true); // 读取中断状态
TimerIntClear(TIMER0_BASE, ulStatus); // 清除中断状态,重要!
if (ulStatus & TIMER_TIMA_TIMEOUT) // 如果是Timer超时中断
{
ucVal = GPIOPinRead(LED_PORT, LED_PIN); // 反转LED
GPIOPinWrite(LED_PORT, LED_PIN, ~ucVal);
}
}
我想每次中断后,记录一下,然后通过中段记录的次数来改变定时器初值。
|