查看: 239|回复: 6

[原创] S3C2440裸奔程序:EINT中断按键测试程序

[复制链接]

141

主题

1

好友

1743

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    开心
    2016-11-9 11:46
  • 签到天数: 80 天

    [LV.6]常住居民II

    发表于 2016-7-8 11:53:39 |显示全部楼层
     今天 与大家分享来自晨旭晚霞博客中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);
      }

    回复

    使用道具 举报

    0

    主题

    0

    好友

    43

    积分

    白丁

    Rank: 1

    该用户从未签到

    发表于 2016-7-11 10:27:08 |显示全部楼层
    tq2440是我最初学习嵌入式选择的一款板子,资料多,入门学习也容易!
    回复

    使用道具 举报

    0

    主题

    0

    好友

    61

    积分

    童生

    Rank: 2

  • TA的每日心情
    奋斗
    2016-8-17 17:27
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2016-7-11 13:33:40 |显示全部楼层
    我们3年前买的TQ2440,到现在还可以跑。确实不错
    回复

    使用道具 举报

    0

    主题

    0

    好友

    54

    积分

    童生

    Rank: 2

    该用户从未签到

    发表于 2016-7-12 14:30:37 |显示全部楼层
    入门首选,资料真的很齐全,天嵌的TQ2440算是比较早的了
    回复

    使用道具 举报

    0

    主题

    0

    好友

    43

    积分

    白丁

    Rank: 1

    该用户从未签到

    发表于 2016-7-12 14:53:51 |显示全部楼层
    好多前辈,多多指教!
    回复

    使用道具 举报

    0

    主题

    0

    好友

    57

    积分

    童生

    Rank: 2

    该用户从未签到

    发表于 2016-7-13 11:17:33 |显示全部楼层
    我们培训机构用的2440,资源比较丰富,适合学生
    回复

    使用道具 举报

    0

    主题

    0

    好友

    52

    积分

    童生

    Rank: 2

    该用户从未签到

    发表于 2016-7-13 16:37:18 |显示全部楼层
    入门必选,资料齐全
    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /5 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-11 12:07 , Processed in 0.196438 second(s), 14 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部