目的
为了更好地掌握S3C2410中断的原理及中断程序的编写。
内容利用S3C2410的外部中断0和外部中断1实现两个按键功能
原理
本次选择的是外部中断EXTINT0和EXTINT11。中断的产生分别来自按钮SB1202和SB1203,当按钮按下时,EXTINT0(对应管脚GPF0)或EXTINT11(对应管脚GPG3)和地连接,输入低电平,从而向CPU发出中断请求。
当CPU受理后,进入相应的中断服务程序,通过超级终端的主窗口显示当前进入的中断号。
程序
#include "2410addr.h"//这头文件找了好久啊,mdk里面没有,后来在一个实例中提取出来的
#include "2410lib.h"
void __irq int0_int(void) //外部中断0处理函数
{
uart_printf("EINT0 interrupt occurred. n");
ClearPending(BIT_EINT0); //清除中断源
}
void __irq int11_int(void) //外部中断11处理函数
{
if(rEINTPEND==(1<<11)) //判断外部中断挂起寄存器,确定是否外部中断11
{
uart_printf("EINT11 interrupt occurred. n");
rEINTPEND=(1<<11); //清除中断挂起寄存器
}
ClearPending(BIT_EINT8_23);
}
void int_init(void) //中断初始化
{
rGPFCON=(rGPFCON & ~(3<<0) | (0x2<<0)); //将CPFO配置为EINT0
rGPGCON=(rGPGCON & ~(3<<6) | (0x2<<6)); //将CPF3配置为EINT11
pISR_EINT0=(UINT32T)int0_int; //注册中断处理函数
pISR_EINT8_23=(UINT32T)int11_int;
//注册处理中断11处理函数,EINT8~23共用此函数,需要在处理函数中加入对源中断的判断
rEINTPEND=0xffffff; //清除所有外部中断挂起状态
rSRCPND=BIT_EINT0 | BIT_EINT8_23; //清除源的挂起状态
rINTPND=BIT_EINT0 | BIT_EINT8_23; //清除挂起状态
rEXTINT0=(rEXTINT0 & ~(7<<0)) | (0x2<<0); //EINT0下降沿触发
rEXTINT1=(rEXTINT1 & ~(7<<0)) | (0x2<<12); //EINT1Ï下降沿触发
rEINTMASK &= ~(1<<11); //打开外部中断11
rINTMSK &= ~(BIT_EINT0 | BIT_EINT8_23); //打开INTMSK中的中断0和中断8~23
}
int main()
{
int_init();
while(1);
}
//#define ClearPending(bit) {rSRCPND=bit;rINTPND=rINTPND;}
//写入错误的数据
//清除中断源,注意清除的顺序,要从源头开始清除
上一篇:【ARM】串行通信
下一篇:【ARM】ARM程序规范
推荐阅读最新更新时间:2024-11-16 22:08
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- 【提问有礼】TI MCU,今天你提问了吗?
- Microchip有奖问答 | 新品 MCU 独立于内核的外设(CIP)技术解密
- 报名赢红包,到场抽开发板|2021 RT-Thread 开发者大会等你约!
- 有奖直播报名:赛灵思和安富利专注嵌入式视觉应用,助力人工智能和汽车辅助驾驶!
- 【有奖直播】 聚焦语音识别核心技术,走进Microchip Timberwolf™音频处理器研讨会
- 推陈出“芯“——TI 带你领略智能手机黑科技在线直播 预报名+看直播 好礼让你嗨翻全场!
- 安全的革新,全新的验证方式 下载富士通 《频谱验证解决方案 》白皮书 好礼送!
- 有奖直播|魏德米勒产品在半导体行业的应用 报名中
- 2021 STM32全国巡回研讨会!