[DemoCode下载] 新唐M051 BOD设置程序

[复制链接]
 楼主| 大苏牙 发表于 2015-9-4 20:52 | 显示全部楼层 |阅读模式
  1. #include "SmartM_M0.h"
  2. /****************************************
  3. *函数名称:main
  4. *输    入:无
  5. *输    出:无
  6. *功    能:函数主体
  7. ******************************************/
  8. VOID BODInit(UINT32 unVoltage)
  9. {
  10.     PROTECT_REG
  11. (
  12.   switch(unVoltage)
  13.   {
  14.       case 4500:BODCR|=3<<1;
  15.              break;
  16.       case 3800:BODCR|=2<<1;
  17.              break;
  18.       case 2700:BODCR|=1<<1;
  19.              break;      
  20.       case 2200:BODCR|=0<<1;
  21.              break;
  22.    default:break;         
  23.   }
  24.   BODCR|=1<<4;
  25.   BODCR|=0x01;
  26. )
  27. NMI_SEL=0x01;
  28. NVIC_ISER |= BOD_OUT_INT;
  29. }
  30. /****************************************
  31. *函数名称:BODDeinit
  32. *输    入:无
  33. *输    出:无
  34. *功    能:BOD
  35. ******************************************/
  36. VOID BODDeinit(VOID)
  37. {
  38.   BODCR = 0x00;
  39. }
  40. /****************************************
  41. *函数名称:main
  42. *输    入:无
  43. *输    出:无
  44. *功    能:函数主体
  45. ******************************************/
  46. INT32 main(VOID)
  47. {
  48.   PROTECT_REG
  49.   (
  50.    PWRCON |= XTL12M_EN;      //默认时钟源为外部晶振
  51.    while((CLKSTATUS & XTL12M_STB) == 0);   //等待12MHz时钟稳定
  52.   
  53.    CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
  54.   
  55.    P2_PMD=0x5555;          //GPIO设置为输出模式
  56.   )
  57.   BODInit(4500);
  58.   while(1);
  59. }
  60. VOID BOD_IRQHandler(void)
  61. {
  62.      if(BODCR & ((1<<4)|(1<<6)))
  63.   {
  64.      P2_DOUT = 0xFF;
  65.   Delayms(100);
  66.   P2_DOUT = 0x00;
  67.   Delayms(100);
  68.   }
  69.   else
  70.   {
  71.      P2_DOUT = 0x00;  
  72.   }

  73.   BODDeinit();
  74.   Delayms(500);
  75.   BODInit(2700);
  76. }
  77. //VOID NMI_Handler(void)
  78. //{
  79. //  printf("Hi, BOD has become NMI Int\n");
  80. //
  81. //     if(BODCR & ((1<<4)|(1<<6)))
  82. //  {
  83. //     P2_DOUT = 0xFF;
  84. //  Delayms(100);
  85. //  P2_DOUT = 0x00;
  86. //  Delayms(100);
  87. //  }
  88. //  else
  89. //  {
  90. //     P2_DOUT = 0x00;  
  91. //  }
  92. //
  93. //  Delayms(500);
  94. //
  95. //}


稳稳の幸福 发表于 2015-9-4 21:43 | 显示全部楼层
没有说BOD是干啥的,直接就程序代码了。
天灵灵地灵灵 发表于 2015-9-4 21:49 | 显示全部楼层
初始化采用了分支语句实现。
捉虫天师 发表于 2015-9-4 21:58 | 显示全部楼层
BOD_IRQHandler(void)
以前不知道是干啥的,现在知道了,中断处理函数。
mintspring 发表于 2015-9-4 22:06 | 显示全部楼层
  • VOID BOD_IRQHandler(void)
  • {
  •      if(BODCR & ((1<<4)|(1<<6)))
  •   {
  •      P2_DOUT = 0xFF;
  •   Delayms(100);
  •   P2_DOUT = 0x00;
  •   Delayms(100);
  •   }
  •   else
  •   {
  •      P2_DOUT = 0x00;
  •   }


检测后,闪烁或关闭。

wahahaheihei 发表于 2015-9-6 09:18 | 显示全部楼层
BOD_IRQHandler
像这种命名的中断,入口在哪儿?是系统内部专门定义好的名称吗?
Luis德华 发表于 2015-9-6 09:22 | 显示全部楼层
BOD是什么意思啊,楼主给解释一下吧
Micachl 发表于 2015-9-8 21:27 | 显示全部楼层
不是太懂BOD是什么意思?
yiyigirl2014 发表于 2016-2-24 11:37 | 显示全部楼层
内置POR/BOD重置电路,以及内建10K RC驱动高可靠度看门狗计时器,提供高抗干扰能力;高精度22MHz RC振荡器,可由外部32.768 KHz自动校正精准度,小封装高集成度、提供丰富外设接口的高性价比32位元MCU,提供低功耗和10KHz/32.768KHz唤醒模式;再加上好上手的低价开发工具(NuTiny-Mini51),提供完整的驱动函式库;在升级韧体、资料Flash规划与在线除错方面,都相当容易规划与维护,其采取与M051兼容的QFN33脚位设计,可方便客户做脚位兼容升级的设计。
deviceplugs 发表于 2016-2-24 11:56 | 显示全部楼层
我要先弄明白BOD是什么意思才行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

278

帖子

4

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