天嵌 ARM开发社区

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

跪求指点 外部中断,好心前辈请指点下啊~~~~感激不尽

[复制链接]
单身 发表于 2010-10-3 21:03:54 | 显示全部楼层 |阅读模式
用的是TQ2440的板子
工程包含5个文件:s3c2440.h  、 init.s  、int_fun.c     interrupt.c     Main.c
s3c2440.h  里面是一些寄存器定义   略过···
init.s  我的初始化文件:
        AREA |Init|,CODE,READONLY
        ENTRY
start
        IMPORT Main
        IMPORT init_led
        IMPORT init_irq
        IMPORT disable_watchdog
        IMPORT EINT_Handle
        b Reset                                            ;复位异常向量
HandleUndef
        b HandleUndef                                ;未定义指令异常向量
HandleSWI
        b HandleSWI                                        ;软件中断异常向量
HandlePrefetchAbort
        b HandlePrefetchAbort                ;指令预取中止异常向量
HandleDataAbort
        b HandleDataAbort                        ;数据访问中止异常向量
HandleNotUsed
        b HandleNotUsed                                ;保留
       

        b HandleIRQ                                        ;外部中断请求异常向量
HandleFIQ
        b HandleFIQ                                        ;快速中断请求异常向量
       
       
Reset
        ldr sp, =4096
        bl disable_watchdog
       
        msr cpsr_c, #0xd2                           ;进入中断模式,并设置中断模式的栈指针
        ldr sp, =3072
       
        msr cpsr_c, #0xdf                            ;进入系统模式,并设置栈指针
        ldr sp, =4096
       
        bl init_led
        bl init_irq
       
        msr cpsr_c, #0x5f                           ;开IRQ中断
        b Main

       
HandleIRQ
        sub lr,lr, #4
        stmdb sp!,{r0-r12,lr}
        ldr lr, =int_return
        ldr pc, =EINT_Handle
int_return
        ldmia sp!, { r0-r12,pc }^
       
        END
*****************************************************************
然后是 init_fun.c  其中包含一个函数  就是 init_irq() 内容如下:
void init_irq()
{
        GPFCON = 0x022a;                        //        设置GPF口为第二功能
        GPFUP = 0xff;                                //        禁止上拉
       
        PRIORITY = 0x7e;                        //        优先级EINT0>EINT1>EINT2>EINT4
        EXTINT0 = 0x2022;                        //设置EINT0、EINT1、EINT4为下降沿触发,EINT2为低电平触发
       
        EINTMASK = 0x000fffef;                //使能EINT4
        INTMSK = 0xffffffe8;
}
***************************************************************
interrupt.c 是中断处理程序:
#include "s3c2440.h"

void EINT_Handle()
{
        unsigned long oft = INTOFFSET;
        switch( oft )
        {
               
                case 0:                //K4按下
                {
                        GPBDAT |= (0x0f<<5);
                        GPBDAT = ~(1<<8);
                        break;
                }
               
                case 1:                //K1按下
                {
                        GPBDAT |= (0x0f<<5);
                        GPBDAT = ~(1<<5);
                        break;
                }
               
                case 2:                //K3按下
                {
                        GPBDAT |= (0x0f<<5);
                        GPBDAT = ~(1<<7);
                        break;
                }
               
                case 4:        //K2按下
                {
                        GPBDAT |= (0x0f<<5);
                        GPBDAT = ~(1<<6);
                        break;
                }
                default :
                        break;
        }
        //清除中断标志
        if( oft == 4)
                EINTPEND = (1<<4);
        SRCPND = 1<<oft;
        INTPND = 1<<oft;
}
*************************************************
然后 main.c是什么都不做的循环
请问 这样写的程序怎么不能进入中断呢? 我在main.c中加入点亮LED 语句后  程序是可以进到main.c中的,就是进不来中断,是不是我哪里少了设置寄存器,还是什么别的原因,跪求论坛前辈指点,感恩戴德啊!
 楼主| 单身 发表于 2010-10-3 21:05:29 | 显示全部楼层
4个按键分别对应的是EINT0   EINT1   EINT2  EINT4,
 楼主| 单身 发表于 2010-10-3 21:27:42 | 显示全部楼层
现在都没有人来指点下了吗?5555555555555555555555555555555555555555555
 楼主| 单身 发表于 2010-10-4 02:01:29 | 显示全部楼层
问题已解决,还是要靠自己啊~~
天嵌_support1 发表于 2010-10-6 18:24:39 | 显示全部楼层
嘿嘿,国庆玩去了。
你把解决的过程和大家分享一下哈
 楼主| 单身 发表于 2010-10-7 03:26:51 | 显示全部楼层
呵呵  其实很简单,我在ADS1.2 里面设置的 section 是init

而我的程序里面 是 Init   就这么点区别 折腾我个半死~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-6-2 01:21 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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