微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 关于定时器中断的问题

关于定时器中断的问题

时间:10-02 整理:3721RD 点击:
我写的C程序:希望在执行中断后将IOPF6脚的小灯点亮,MAIN中是暗的,执行中断亮:
#include \"f2407regs.h\"
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <string.h>

#define uint unsigned int

void main(void)
{
asm(\" setc INTM \"

;
asm (\" clrc CNF \"

; /*映射数据存储空间*/
asm (\" clrc OVM \"

; /*累加器中结果正常溢出*/
asm (\" setc SXM \"); /*抑制符号扩展*/
*SCSR1 = 0x0001; /*clkout输出CPU时钟,进入IDLE1低功耗模式
不倍频,关断ADC,无效地址复位*/
*WDCR = 0X0E8; /*WDOVERRIDE默认为1,禁止看门狗*/
*IMR = 0X0004;
*IFR = 0Xffff; /*清除所有中断标志*/
*T1CON = 0X974c; /*0001011000001100,t1连续增计数,64分频,内部时钟*/
*T1CNT = 0X00;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4000;
*PFDATDIR = *PFDATDIR & 0xffbf;
asm(\" clrc INTM \");
while(1)
{
;
}
}

void interrupt T1INT()
{volatile int flag,i;
*T1CNT = 0X00;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
asm(\" setc INTM \");
flag = *EVAIFRA & 0X0400;
if (flag != 0x0400)
{
asm(\" clrc INTM \");
return;
}
*EVAIFRA = *EVAIFRA | 0Xffff; /*清定时器1上溢中断标志*/
i++;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
if(i==7)
{i=0;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
}
}

void interrupt nothing()
{
return;
}
以下是中断向量程序:

.title \"vectors.asm\"
.ref _c_int0,_nothing,_T1INT
.sect \".vectors\"

rsvect: B _c_int0
INT1: B _nothing
INT2: B _T1INT
INT3: B _nothing
INT4: B _nothing
INT5: B _nothing
INT6: B _nothing
为什么实现不了呢?我试了,MAIN中没什么问题,就是好像不进中断,在就是请大虾看看我在中断中的FOR语句延时1S那么写对吧?
谢谢

你的主程序中EVAIFRA,EVAIMRA
没有初始化。

初始化为
*EVAIFRA = 0X0400;
*EVAIMRA = 0X0400;
我在中断中设置断点发现根本就没进中断啊?

好像我根本就没启动定时器

感觉你SCSR1设置有问题,你没有使能EVA CLKEN模块时钟。

现在可以确定时钟动了,但就是不进中断,周期还在循环

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top