Embedsky007的个人空间 https://www.eechina.com/space-uid-114045.html [收藏] [复制] [RSS]

博客

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

热度 6已有 1989 次阅读2016-7-8 12:00 |个人分类:技术文章| 嵌入式, 开发板, 天嵌, S3C2440

  今天 与大家分享来自晨旭晚霞博客中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

网址:http://www.embedsky.com

官方淘宝:https://embedsky.taobao.com/


路过

鸡蛋
2

鲜花

握手

雷人

刚表态过的朋友 (2 人)

发表评论 评论 (6 个评论)

回复 2851297573 2016-7-11 10:28
tq2440是我最初学习嵌入式选择的一款板子,资料多,入门学习也容易!
回复 lzh8 2016-7-11 13:38
我们3年前买的TQ2440,到现在还可以跑,现在送给别同事用量,还真有点不舍。
回复 sally_cheng 2016-7-12 14:34
学长们都在用,所以我也入手一套了,目前感觉还不错,资料很齐全。
回复 adeechan36 2016-7-12 14:54
跟着前辈走,事情简单多了!
回复 张晓然 2016-7-13 11:20
资源比较多,学生用起来比较容易接受,不错~
回复 想飞的猫星人 2016-7-13 16:38
资料齐全,入门必备,前辈跟着你

facelist

您需要登录后才可以评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
返回顶部