查看: 2878|回复: 2

[MPC] 【MPC5602开发笔记】按键

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16697
    最后登录
    1970-1-1
    发表于 2016-2-25 23:39:13 | 显示全部楼层 |阅读模式
    在trk-usb-mpc5602p开发板上除了有LED之外,还有3个按键,1个是复位,另外2个作为用户使用的按键。今天学习了按键功能。
    本来想要使用中断触发按键识别,但是查了资料,正好接按键的引脚不具备外部中断功能,只好老老实实的软件识别。

    1、实现功能:
    每按下K2按键,是黄色LED状态变化一次。

    2、来看看电路:
    0090.png
    0091.png
    可以看到LED接D5引脚,按键K2接D2引脚
    0092.png

    3、接按键引脚要作为输入口,当然来看看引脚相关的寄存器
    0093.png
    0094.png
    0095.png
    可以发现使用GPDI寄存器的PDI位即可.0表示按下,1表示未按下

    4、思路比较简单,就直接上程序了:
    1. #include "MPC5602P.h"

    2. #define LED_YELLOW                               (SIU.GPDO[53].B.PDO) //黄色LED输出寄存器
    3. #define KEY2                                     (SIU.GPDI[50].B.PDI) //KEY2输入寄存器

    4. #define ON                                       (0)
    5. #define OFF                                      (1)

    6. void disableWatchdog(void) {        //禁止看门狗
    7.   SWT.SR.R = 0x0000c520;     
    8.   SWT.SR.R = 0x0000d928;
    9.   SWT.CR.R = 0x8000010A;     
    10. }

    11. void initModesAndClock(void) {
    12.   ME.MER.R = 0x0000001D;          /* Enable DRUN, RUN0, SAFE, RESET modes */

    13.   CGM.CMU_0_CSR.R = 0x000000004;  /* Monitor FXOSC > FIRC/1 (4MHz); no PLL monitor*/
    14.   CGM.FMPLL[0].CR.R = 0x02400100; /* 8 MHz xtal: Set PLL0 to 64 MHz */   
    15.   ME.RUN[0].R = 0x001F0074;       /* RUN0 cfg: 16MHzIRCON,OSC0ON,PLL0ON,syclk=PLL0 */
    16.   ME.RUNPC[0].R = 0x000000FE;

    17.   ME.MCTL.R = 0x40005AF0;         /* Enter RUN0 Mode & Key */
    18.   ME.MCTL.R = 0x4000A50F;         /* Enter RUN0 Mode & Inverted Key */  
    19.   
    20.   while (ME.GS.B.S_MTRANS == 1) {}    /* Wait for mode transition to complete */   

    21.   while(ME.GS.B.S_CURRENTMODE != 4) {} /* Verify RUN0 is the current mode */
    22. }

    23. void initGpio(void) {
    24.   SIU.PCR[53].R = 0x0220;           //PD5设置为输出模式
    25.   
    26.   SIU.PCR[50].R = 0x0100;
    27.   
    28.   LED_YELLOW = OFF;                 //初始化LED灭
    29. }

    30. int main(void) {
    31.   vuint32_t keyCount = 0;
    32.   initModesAndClock();              //时钟设置
    33.   disableWatchdog();                //禁止看门狗
    34.   initGpio();                       

    35.   /* Loop forever */
    36.   for (;;) {
    37.     if (KEY2 == 0) {
    38.       LED_YELLOW = ~LED_YELLOW;
    39.       while (KEY2 == 0) {}
    40.     }
    41.   }
    42. }
    复制代码


    5、演示效果:
    0003.gif

    6、工程文件:
    key_led_mpc5602p.rar (117.12 KB, 下载次数: 12)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-4-28 22:47
  • 签到天数: 233 天

    连续签到: 1 天

    [LV.7]常住居民III

    0

    主题

    623

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1431
    最后登录
    2022-10-20
    发表于 2016-2-26 09:04:56 | 显示全部楼层
    再接再厉。
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2016-2-26 09:19:51 | 显示全部楼层
    谢谢楼主分享
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 22:38 , Processed in 0.090530 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表