[DemoCode下载] 新唐M051中断唤醒(睡眠)演示程序

[复制链接]
 楼主| wahahaheihei 发表于 2016-8-13 17:04 | 显示全部楼层 |阅读模式
给大家发一个测试成功的新唐M051单片机中断唤醒(睡眠)的演示程序:
  1. #include "SmartM_M0.h"
  2. #define __KEYISR    EINT1_IRQHandler
  3. #define DEBUGMSG       printf
  4. /****************************************
  5. *函数名称:KeyIntInit
  6. *输    入:无
  7. *输    出:无
  8. *功    能:按键中断初始化
  9. ******************************************/
  10. VOID KeyIntInit(VOID)
  11. {
  12. P3_MFP = (P3_MFP & (~P33_EINT1_MCLK)) | EINT1;  //P3.2引脚设置为外部中断
  13.   
  14. DBNCECON &= ~ICLK_ON;
  15. DBNCECON &= DBCLK_HCLK;
  16. DBNCECON |= SMP_256CK;        //设置防反弹采样周期选择
  17.             
  18. P3_DBEN |= DBEN3;         //使能P3.2防反弹功能
  19.   
  20. P3_IMD &= IMD3_EDG;   
  21. P3_IEN |= IF_EN3;         //设置外部中断1为下降沿触发
  22. NVIC_ISER |= EXT_INT1;
  23. }
  24. /****************************************
  25. *函数名称:McuSleepDeep
  26. *输    入:无
  27. *输    出:无
  28. *功    能:MCU进入睡眠模式
  29. ******************************************/
  30. VOID McuSleepDeep(VOID)
  31. {
  32. Delayms(20);
  33. PROTECT_REG
  34. (
  35.   /* 进入睡眠模式 */
  36.   SCR |= SLEEPDEEP;
  37.   /* 禁止掉电模式下唤醒的中断中断使能 */
  38.   PWRCON &= ~PD_WU_IE;
  39.   PWRCON &= ~PD_WAIT_CPU;
  40.   PWRCON |= PWR_DOWN_EN;  
  41. )
  42. Delayms(20);
  43. }
  44. /****************************************
  45. *函数名称:main
  46. *输    入:无
  47. *输    出:无
  48. *功    能:函数主体
  49. ******************************************/
  50. INT32 main(VOID)
  51. {                  
  52.   PROTECT_REG           //ISP下载时保护FLASH存储器
  53.   (
  54.    PWRCON |= XTL12M_EN;        //默认时钟源为外部晶振
  55.    while((CLKSTATUS & XTL12M_STB) == 0);     //等待12MHz时钟稳定
  56.    CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
  57.    P2_PMD = 0x5555;
  58.   )
  59.   KeyIntInit();         //按键中断初始化
  60.   while(1)
  61.   {
  62.    P2_DOUT = 0x00;
  63.    Delayms(500);
  64.    P2_DOUT = 0xFF;
  65.    Delayms(500);     
  66.     McuSleepDeep();       //MCU进入睡眠模式     
  67.   }
  68. }
  69. /****************************************
  70. *函数名称:__KEYISR
  71. *输    入:无
  72. *输    出:无
  73. *功    能:按键中断服务函数
  74. ******************************************/
  75. VOID __KEYISR(VOID)
  76. {
  77.      Delayms(100);
  78.   P3_ISRC = P3_ISRC;  //写1清空
  79. }


玛尼玛尼哄 发表于 2016-8-17 21:27 | 显示全部楼层
通过按键的中断实现了唤醒功能。
mintspring 发表于 2016-8-17 21:33 | 显示全部楼层
低门数处理器特征:
– ARMv6-M Thumb 指令集。
– Thumb-2 技术。
– ARMv6-M 兼容 24-bit SysTick 定时器。
– 32-bit 硬件乘法器。
– 系统接口支持小端( little-endian)数据访问。
– 具有确定性,固定延迟的中断处理能力。
– 可以禁用和重启的多路加载/存储和多周期乘法可以实现快速中断处理。
– 兼容 C 应用程序二进制接口的异常兼容模式( C-ABI)。
ARMv6-M( C-ABI)兼容异常模式允许用户使用纯 C 函数实现中断处理。
– 使用等待中断( WFI),等待事件( WFE)指令,或者从中断返回时的 sleep-on-exit 特性可以
进入低功耗的休眠模式。
mintspring 发表于 2016-8-17 21:35 | 显示全部楼层
当芯片进入掉电模式后,大部分时钟源、外设时钟和系统时钟将会被禁用,也有一些时钟源与外设时钟
仍处于激活状态。
如下这些时钟仍然保持激活:
z 时钟发生器
„ 内部 10K 低速振荡器时钟
z 外设时钟 (当这些IP采用内部10KHz低速振荡器作时钟源时)
„ 看门狗时钟
„ Timer 0/1/2/3 时钟
„ PWM 时钟
zhuotuzi 发表于 2016-8-22 20:46 来自手机 | 显示全部楼层
ARMv6-M( C-ABI)兼容异常模式允许用户使用纯 C 函数实现中断处理。
zhuomuniao110 发表于 2016-8-25 21:55 来自手机 | 显示全部楼层
以前以为新塘的内核都一样呢,仔细看发现不同的
zhuotuzi 发表于 2016-8-25 22:15 | 显示全部楼层
中断服务里仅仅就做了个延时。
zhuomuniao110 发表于 2016-8-26 23:18 来自手机 | 显示全部楼层
进入掉电模式后,大部分时钟源、外设时钟和系统时钟将会被禁用,也有一些时钟源与外设时钟 仍处于激活状态。
yiyigirl2014 发表于 2016-8-26 23:30 来自手机 | 显示全部楼层
内部的时钟发生器较好用,不会突然挂掉
huangcunxiake 发表于 2016-8-27 12:09 | 显示全部楼层
竟然还可以禁止掉电模式系统复位,功能十分强大。
gejigeji521 发表于 2016-8-27 12:42 | 显示全部楼层
中断系统是ARM比较厉害的地方,各种中断的实现,而51,只有个外部中断。。
玛尼玛尼哄 发表于 2016-8-27 14:14 | 显示全部楼层
睡眠后,while循环就中断了,等下次唤醒后继续。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

231

主题

3196

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部

231

主题

3196

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部