找回密码
 立即注册
收起左侧

S3C2440裸奔程序:EINT中断按键测试程序

8
回复
5907
查看
[复制链接]
累计签到:82 天
连续签到:1 天
来源: Qt文章 2016-7-8 10:20:49 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  今天 与大家分享来自晨旭晚霞博客中TQ2440裸奔程序。
  //=========================================
  // NAME: main.c
  // DESC: TQ2440流水灯测试程序
  // 板载LED为PB
  //=========================================
  /* 头文件包含 */
  #define U32 unsigned int
  /* 中断向量表 */
  #define _ISR_STARTADDRESS 0x33ffff00
  #define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x20))
  #define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x24))
  #define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x28))
  #define pISR_EINT4_7 (*(unsigned *)(_ISR_STARTADDRESS+0x30))
  /* 中断控制 寄存器地址 */
  #define rSRCPND (*(volatile unsigned *)0x4a000000) //Interrupt request status 源挂起寄存器
  #define rINTMSK (*(volatile unsigned *)0x4a000008) //Interrupt mask control 中断屏蔽寄存器
  #define rINTPND (*(volatile unsigned *)0x4a000010) //Interrupt request status 中断挂起寄存器
  /* 外部中断 寄存器地址 */
  #define rEXTINT0 (*(volatile unsigned *)0x56000088) //External interrupt control register 0 外部中断控制寄存器
  #define rEINTMASK (*(volatile unsigned *)0x560000a4) //External interrupt mask 外部中断屏蔽寄存器
  #define rEINTPEND (*(volatile unsigned *)0x560000a8) //External interrupt pending 外部中断挂起寄存器
  /* LED灯寄存器地址 */
  #define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
  #define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
  #define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
  /* EINT F 寄存器地址 */
  #define rGPFCON (*(volatile unsigned *)0x56000050) //Port F control
  void led_init(void)
  {
  //板载LED为GPB[5:8]
  rGPBCON = (rGPBCON & ~(0xff<<10)) | (0x55<<10); //rGPBCON为01 配置为输出
  rGPBUP = rGPBUP | (0xf<<5); //rGPBUP为1 禁止上拉
  rGPBDAT = rGPBDAT | (0xf<<5); //LED灯全关
  }
  void led_display(unsigned char data)
  {
  //0x0全灭 0xf全亮 0x01 0x02 0x04 0x80 各自灯亮
  rGPBDAT = (rGPBDAT & ~(0xf<<5)) | ((~data) <<5);
  }
  void eint_init(void)
  {
  rGPFCON = 0xaaaa; //GPF[0:15]配置成外部中断
  rSRCPND = rSRCPND | 0x1f; //清除EINT[0:7]源中断请求
  rINTMSK = rINTMSK & ~(0x1f); //清除EINT[0:7]中断屏蔽请求
  rINTPND = rINTPND | 0x1f; //清除EINT[0:7]中断挂起请求
  rEINTPEND = rEINTPEND | (1<<4);
  rEINTMASK = rEINTMASK & ~(1<<4);
  rEXTINT0 = rEXTINT0 & ~((0x7<<0) | (0x7<<4) | (0x7<<8) | (0x7<<16));
  rEXTINT0 = rEXTINT0 | ((0x2<<0) | (0x2<<4) | (0x2<<8) | (0x2<<16));//EINT下降沿触发方式 01x 0x2
  }
  static void __irq Key1_ISR(void) //EINT1
  {
  rSRCPND = rSRCPND | (0x1<<1);
  rINTPND = rINTPND | (0x1<<1);
  led_display(0x1);
  }
  static void __irq Key2_ISR(void) //EINT4
  {
  rSRCPND = rSRCPND | (0x1<<4);
  rINTPND = rINTPND | (0x1<<4);
  if(rEINTPEND & (1<<4))
  {
  rEINTPEND = rEINTPEND | (0x1<<4);
  led_display(0x2);
  }
  }
  static void __irq Key3_ISR(void) //EINT2
  {
  rSRCPND = rSRCPND | (0x1<<2);
  rINTPND = rINTPND | (0x1<<2);
  led_display(0x4);
  }
  static void __irq Key4_ISR(void) //EINT0
  {
  rSRCPND = rSRCPND | 0x1;
  rINTPND = rINTPND | 0x1;
  led_display(0x8);
  }
  void Main(void)
  {
  led_init();
  eint_init();
  /* 中断函数入口地址 */
  pISR_EINT0 = (U32)Key4_ISR;
  pISR_EINT1 = (U32)Key1_ISR;
  pISR_EINT2 = (U32)Key3_ISR;
  pISR_EINT4_7 = (U32)Key2_ISR;
  while(1);
  }
供货情况:
天嵌科技提供专业嵌入式板卡和行业解决方案。如有需要,可以联系天嵌科技的销售人员。
销售电话:020-38219416 38373101
技术支持:020-38219416转807、820

回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-7-11 10:06:39 显示全部楼层
2440是我最初学习嵌入式选择的一款板子,资料多,入门学习也容易!
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2016-7-11 12:48:06 显示全部楼层

TQ2440的资料齐全,我学习都是自己看着手册做,技术支持也不错!
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-7-12 14:24:35 显示全部楼层
TQ2440第一套学习板,资料蛮齐全的,还有配视频 确实入门首先
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-7-12 14:51:21 显示全部楼层
2440的资料还是比较多的,适合学习。
回复 支持 反对

使用道具 举报

尚未签到

2016-7-13 11:05:16 显示全部楼层
入门级板卡,资料确实蛮丰富的
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-7-13 16:24:48 显示全部楼层
入门资料多,买块板子试一下
回复 支持 反对

使用道具 举报

累计签到:82 天
连续签到:1 天
2016-7-18 16:35:32 显示全部楼层
lzh 发表于 2016-7-11 12:48
TQ2440的资料齐全,我学习都是自己看着手册做,技术支持也不错!

是的,手册特意做的很详细,方便一些初学的童鞋自学也能成才
回复 支持 反对

使用道具 举报

累计签到:82 天
连续签到:1 天
2016-7-18 16:36:36 显示全部楼层
想飞的猫星人 发表于 2016-7-13 16:24
入门资料多,买块板子试一下

这个绝对可以有,资料详细,现在买还有视频教程送,自学更easy!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了