打印
[ZLG-MCU]

关于LM3S系列中断记录问题

[复制链接]
2168|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OLIVERR|  楼主 | 2010-5-29 22:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾,小弟在学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);
}
}
我想每次中断后,记录一下,然后通过中段记录的次数来改变定时器初值。

相关帖子

沙发
thf2008| | 2010-5-29 22:50 | 只看该作者
按楼主的意思,你的中断函数应该改成以下的代码。



void Timer0A_IRQHandler (void)
{

//这里的代码省略不写,在退出中断的地方添加以下代码



T++;

TimerDisable(TIMER0_BASE, TIMER_A); // 禁能Timer计数

TimerLoadSet(TIMER0_BASE, TIMER_A, T*700UL); // 设置Timer初值

TimerEnable(TIMER0_BASE, TIMER_A); // 使能Timer计数

}



这样应该就可以了。

使用特权

评论回复
板凳
llljh| | 2010-5-29 23:25 | 只看该作者
楼上好厉害,十分钟就解决了

使用特权

评论回复
地板
xiaoxin1986| | 2010-5-29 23:29 | 只看该作者
不愧是有2000多贴的高手~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

123

帖子

1

粉丝