天嵌 ARM开发社区

 找回密码
 注册
查看: 3735|回复: 5

裸机定时器开发,总是没办法达到目的···

[复制链接]
zhanzhp 发表于 2012-7-30 11:29:24 | 显示全部楼层 |阅读模式
我的主程序,省略初始化等函数
        Led_Init();
        Timer0_Init();
        Timer0_Interrupt_Init();
        Isr_Init_m();
        while(1)
        {
                if(flag)
                {
                        rGPBDAT        &= ~((1<<5)|(1<<6)|(1<<7)|(1<<8));
                        Uart_Printf("led on");
                }
                else
                {
                        rGPBDAT        |=        ((1<<5)|(1<<6)|(1<<7)|(1<<8));
                        Uart_Printf("led off");
                }
子函数
void Led_Init(void)
{
        rGPBCON        &=        ~((3<<10)|(3<<12)|(3<<14)|(3<<16));
        rGPBCON        |=        ((1<<10)|(1<<12)|(1<<14)|(1<<16));
        rGPBUP        &=        ~((1<<5)|(1<<6)|(1<<7)|(1<<8));
        rGPBDAT        |=        ((1<<5)|(1<<6)|(1<<7)|(1<<8));
}


void Timer0_Init(void)
{
        rGPHCON &= ~(3<<18);
        rGPHCON |=        (2<<18);//设置为定时器0模式
       
       
        rTCFG0         &= ~(0xff);
        rTCFG0        |=        99;                //第一级分频100
        rTCFG1        &= ~(0xf);
        rTCFG1        |=        0x02;        //第二8分频输出
        rTCNTB0         =        1250000;
        rTCON        |=        (1<<1);
        rTCON         =        0x09;
}


void Timer0_Interrupt_Init(void)
{
        rINTMSK &= ~(1<<10);
}


extern unsigned int flag;

void Isr_Init_m(void)
{
        pISR_TIMER0 = (U32)Timer0_Isr;
}

void __irq Timer0_Isr(void)
{
        flag = !flag;
        rSRCPND        |= (1<<10);
        rINTPND        |= (1<<10);
}


搞了一天了,为什么总是进入不了中断···

raominping 发表于 2012-8-4 11:15:20 | 显示全部楼层
会不会有其它中断存在,优先级呢
 楼主| zhanzhp 发表于 2012-8-4 15:17:27 | 显示全部楼层
raominping 发表于 2012-8-4 11:15
会不会有其它中断存在,优先级呢

中断优先级是默认的
后来问题解决了,是清除中断标志位的问题。在进入中断的最起始位置就应该清除中断标志位吧
ducling 发表于 2013-4-16 09:27:50 | 显示全部楼层
本帖最后由 ducling 于 2013-4-16 09:29 编辑
zhanzhp 发表于 2012-8-4 15:17
中断优先级是默认的
后来问题解决了,是清除中断标志位的问题。在进入中断的最起始位置就应该清除中断标 ...
应该是这样吗?
void __irq Timer0_Isr(void)
{

        rSRCPND        |= (1<<10);
        rINTPND        |= (1<<10);
        flag = !flag;
}
仅仅改这里就行了吗?   flag = !flag; 也占用不了多少时间啊
ping_ping 发表于 2013-4-21 16:16:43 | 显示全部楼层
请问你是怎么解决的?
ping_ping 发表于 2013-4-21 16:17:36 | 显示全部楼层
是keil环境下的裸机程序吗,我也碰到同样的问题,求解答
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-16 22:26 , Processed in 1.078125 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表