单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:4495|回复:2

S3C2440开发板利用外部中断实现按钮切换不同功能

[复制链接]
ID:104126发表于 2016-1-24 02:32|显示全部楼层

#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "mmu.h"
#include "stdio.h"

/*中断处理函数按下不同按钮进入该中断处理,并根据按下的不同按钮启动不同功能,实现功能控制面板的按钮功能*/
void __irq Eint_Isr(void)
{
   switch(rEINTPEND)
   {
   case 1<<13:  //功能1启动,同时关闭功能2
       rGPBDAT=0<<6|1<<7;
       rEINTPEND=1<<13;  //等待下一个自己的中断进入
       break;
   case 1<<14:  //功能2启动,同时关闭功能1
       rGPBDAT=1<<6|0<<7;
       rEINTPEND=1<<14;  //等待下一个自己的中断进入
       break;
   case 1<<8:  //关闭功能1和2
       rGPBDAT=1<<6|1<<7;
       rEINTPEND=1<<8;  //等待下一个自己的中断进入
       break;
   default:
       rGPBDAT=1<<6|1<<7;
       break;
   }
   ClearPending(BIT_EINT8_23);  //等待下一个该中断向量内的任意中断到来
}

/*设置启动后的默认功能*/
void Led_on()
{
     // 设置LED灯
   rGPBCON=0x155555;  //设置GPB为输出
   rGPBDAT=(0x1<<6)|(0x1<<7);   //GPB7脚置位,led灭
}


/*设置按钮出发方式*/
void Eint_func()
{
   // 按键中断源设置
   rGPGCON=(rGPGCON&~((0x3<<0)|(0x3<<10)|(0x3<<12)))|(0x1<<1)|(0x1<<11)|(0x1<<13); //设置GPG0、5、6脚为EINT8、13、14
   rGPGUP|=(0x1<<0)|(0x1<<5)|(0x1<<6);   //引脚使用第二功能
   rEXTINT1=rEXTINT1&~(0x7<<0);//|(0x1<<2);   //按钮1设置为低电平沿触发
   rEXTINT1=rEXTINT1&~(0x7<<20);//|(0x1<<22);  //按钮2设置为低电平沿触发
   rEXTINT1=rEXTINT1&~(0x7<<24);//|(0x1<<26);  //按钮3设置为低电平沿触发
}
                    
/*中断初始化*/
void Eint_init()
{
   rEINTMASK=rEINTMASK&~((0x1<<8)|(0x1<<13)|(0x1<<14));  // 使能外部中断屏蔽,为0时不屏蔽中断
   /*设置中断控制器*/
   rINTMOD&=~BIT_EINT8_23;  //设置中断模式为IRQ
   rINTMSK&=~BIT_EINT8_23;  //启动中断使能
}


/*中断挂起,等中断*/
void Eint_wait()
{
   rSRCPND=rSRCPND; //中断挂起寄存器清除
   rINTPND=rINTPND; //中断源挂起寄存器清除
   rEINTPEND|=(0x1<<8)|(0x1<<13)|(0x1<<14); //外部中断挂起寄存器,Eint13挂起等待中断
   rSRCPND=BIT_EINT8_23; //中断源挂起寄存器相应位置1等待中断
   rINTPND=BIT_EINT8_23; //中断挂起寄存器相应位置1等待中断
}


/*设置中断指针*/
void Eint_p()
{
   pISR_EINT8_23 =(U32)Eint_Isr;  //设置中断为Eint11响应
}


/*主程序开始*/
void Main()
{
//   isr_asm();  //使能CPSR寄存器的I位
   Led_on();  //启动时将led熄灭
   Eint_init(); //中断初始化
   Eint_func();  //中断触发状态初始化
   Eint_wait();  //等待中断
   Eint_p();   //中断指针
}


ID:85743发表于 2020-9-15 09:25|显示全部楼层
楼主能分别解释一下这些数字操作与实现功能的对应关系吗?谢谢!
1.png

评分

黑币 +20
收起理由
+ 20
回帖助人的奖励!

查看全部评分

ID:328014发表于 2020-9-16 01:20|显示全部楼层
vectorxu 发表于 2020-9-15 09:25
楼主能分别解释一下这些数字操作与实现功能的对应关系吗?谢谢!

这些都是位操作,C语言基础里面有介绍的

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网