我的程序是:
#include "stdio.h"
#include "C6747.h"
Uint16 c=0;
Uint16 *LED = (Uint16 *)0x64000012; ///led add
Uint16 led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void interrupt LEDINT() //中断响应函数
{
CSR&=0xfffe; // 关中断 GIE=0
asm(" NOP 1 ");
ICR = 0xFFF0; //中断清除寄存器,清除中断4~15
c++;
//GPIO_OUT_DATA23=~GPIO_OUT_DATA23;
TIMER0_INTCLSTAT=0x00000003; // 清除定时器中断标志
asm(" NOP 1 ");
CSR=CSR|0x1; // 开中断
}
void initTIMER0(void)
{
TIMER0_TGCR=0x00000015; //采用32位独立定时器12
TIMER0_TIM12=0x00000000;
TIMER0_PRD12=0x00ffffff; //周期值,改变其值的大小可以改变灯的亮灭频率
TIMER0_EMUMGT=0x00000001; //设置定时器为自由的模式
TIMER0_INTCLSTAT=0x00000003;//开定时器中断
TIMER0_TCR=0x00000080;//开定时器0
INTmux1=0x00000004; //中断事件选择寄存器,将事件tim12(为中断4)与中断4联系在一起,不知道这样讲事件与中断连接在一起是否正确
ISTP=0x80000000; //重置中断向量表
ICR=0xfff0; //中断清除寄存器,清除中断4~15
ISR=0x0000; //中断设置寄存器,清除等待的中断
IER=0xffff; // 使能中断
// CSR=CSR|0x1; // 开中断/* */
}
void main( void )
{
unsigned int i;
/* Initialize OMAPL137*/
C6747_init(); //初始化6747核
GPIO_DIR23=0x0000; //设置IO口为输出模式
initTIMER0(); //初始化定时器0
CSR=CSR|0x1; //开总中断,设置GIE=1
//GPIO_OUT_DATA23=0x0000;//关闭LED
*LED=0xffff; //关闭LED
for(i=0;i<100;i++);//延时
while(1)
{
if(c==8) c=0;
*LED=led[c];
}
}
单步执行的话只在main函数中的while循环中进行,而不进入中断,在板子上的led灯只显示0xfe作用的效果,并且定时器寄存器TIM12的值不发生改变,请帮忙看一下我的程序那里出现问题了?