历史上的今天
今天是:2024年11月06日(星期三)
2019年11月06日 | S3C2440开发板利用外部中断实现按钮切换不同功能
2019-11-06 来源:51hei
#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(); //中断指针
}
史海拾趣
|
在一个过程块中,可以用两种不同的方式对信号变量或表达式进行连续赋值。 § 过程连续赋值往往是不可以综合的,通常用在测试模块中。 § 两种方式都有各自配套的命令来停止赋值过程。 §   ...… 查看全部问答> |
|
您老就不用嗐起哄了, 我已没那个热情了, 倒是 LZ 您整理了很多 Blog, 嘉惠後进, 非常适合来做斑竹. USB 来做 KITL 有 2 种做法, 1 种是走 Serial KITL, 另 1 种是走 ethernet RNDIS. 25 楼所言的 source code 是走 ethernet, 而 Samsung 一般而言 ...… 查看全部问答> |
|
圈圈前面几个STM32的程序是直接拿例子来改的,但我们总不能每次都拿别人的例子来改吧?我们要学会如何自己来创建一个属于自己的IAR工程。 首先启动IAR开发环境。如果你的设置是在启动时出现Em ...… 查看全部问答> |
|
谁能告诉我这是为什么?明明“chipNumb”值是0x02,而且CHIP_NUMB是常量0x02,还返回FALSE? 1.JPG (6.25 KB) 下载次数:3 2010-8-19 15:32 2.JPG (39.49 KB) ...… 查看全部问答> |
|
新世纪LED网论坛申请友情链接 您好:新世纪LED网论坛是LED技术论坛,主要为LED工程师提供技术交流平台。现申请与贵站友情链接,请通过并期待您的回复,谢谢。 新世纪LED网论坛:http://bbs.ledth.com/ 联系QQ:82510352 ...… 查看全部问答> |




