lib_wdt.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /***************************************************************
  2. *Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd
  3. *文件名: lib_wdt.c
  4. *作 者: Liut
  5. *版 本: V1.00
  6. *日 期: 2017/02/04
  7. *描 述: 看门狗模块库函数
  8. *备 注: 适用于 ES8P508x芯片
  9. 本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
  10. ***************************************************************/
  11. #ifndef __LIBWDT_H__
  12. #define __LIBWDT_H__
  13. #include "system_ES8P508x.h"
  14. #include "ES8P508x.h"
  15. #include "type.h"
  16. /* WDT时钟选择 */
  17. typedef enum
  18. {
  19. WDT_CLOCK_PCLK = 0x0, //PCLK
  20. WDT_CLOCK_WDT = 0x1, //WDT时钟源,32kHz
  21. } WDT_TYPE_CLKS;
  22. /* 初始化结构体 */
  23. typedef struct
  24. {
  25. uint32_t WDT_Tms; //定时时间,单位ms
  26. TYPE_FUNCEN WDT_IE; //中断使能
  27. TYPE_FUNCEN WDT_Rst; //复位使能
  28. WDT_TYPE_CLKS WDT_Clock;//时钟选择
  29. } IWDT_InitStruType;
  30. typedef enum
  31. {
  32. WDT_WIN_25 = 0x0, //25%窗口内禁止喂狗,窗口内喂狗产生复位
  33. WDT_WIN_50 = 0x1, //50%窗口内禁止喂狗,窗口内喂狗产生复位
  34. WDT_WIN_75 = 0x2, //75%窗口内禁止喂狗,窗口内喂狗产生复位
  35. WDT_WIN_100 = 0x3, //不禁止喂狗,喂狗将使看门狗计数器重载
  36. } WDT_TYPE_WIN;
  37. /* 初始化结构体 */
  38. typedef struct
  39. {
  40. uint32_t WDT_Tms; //定时时间,单位ms
  41. TYPE_FUNCEN WDT_IE; //中断使能
  42. TYPE_FUNCEN WDT_Rst; //复位使能
  43. WDT_TYPE_CLKS WDT_Clock;//时钟选择
  44. WDT_TYPE_WIN WDT_Win; //禁止喂狗窗口
  45. } WWDT_InitStruType;
  46. #define IWDT_RegUnLock() (IWDT->LOCK.Word = 0x1ACCE551)
  47. #define IWDT_RegLock() (IWDT->LOCK.Word = 0x0)
  48. #define IWDT_Enable() {IWDT_RegUnLock();IWDT->CON.EN = 1;IWDT_RegLock();}
  49. #define IWDT_Disable() {IWDT_RegUnLock();IWDT->CON.EN = 0;IWDT_RegLock();}
  50. #define IWDT_Clear() {IWDT_RegUnLock();IWDT->INTCLR.INTCLR = 0;IWDT_RegLock();}
  51. #define IWDT_ITEnable() {IWDT_RegUnLock();IWDT->CON.IE = 1;IWDT_RegLock();}
  52. #define IWDT_ITDisable() {IWDT_RegUnLock();IWDT->CON.IE = 0;IWDT_RegLock();}
  53. #define IWDT_RstEnable() {IWDT_RegUnLock();IWDT->CON.RSTEN = 1;IWDT_RegLock();}
  54. #define IWDT_RstDisable() {IWDT_RegUnLock();IWDT->CON.RSTEN = 0;IWDT_RegLock();}
  55. #define IWDT_CLOCK_PCLK() {IWDT_RegUnLock();IWDT->CON.CLKS = 0;IWDT_RegLock();}
  56. #define IWDT_CLOCK_WDT() {IWDT_RegUnLock();IWDT->CON.CLKS = 1;IWDT_RegLock();}
  57. #define WWDT_RegUnLock() (WWDT->LOCK.Word = 0x1ACCE551)
  58. #define WWDT_RegLock() (WWDT->LOCK.Word = 0x0)
  59. #define WWDT_Enable() {WWDT_RegUnLock();WWDT->CON.EN = 1;WWDT_RegLock();}
  60. #define WWDT_Disable() {WWDT_RegUnLock();WWDT->CON.EN = 0;WWDT_RegLock();}
  61. #define WWDT_Clear() {WWDT_RegUnLock();WWDT->INTCLR.INTCLR = 0;WWDT_RegLock();}
  62. #define WWDT_ITEnable() {WWDT_RegUnLock();WWDT->CON.IE = 1;WWDT_RegLock();}
  63. #define WWDT_ITDisable() {WWDT_RegUnLock();WWDT->CON.IE = 0;WWDT_RegLock();}
  64. #define WWDT_RstEnable() {WWDT_RegUnLock();WWDT->CON.RSTEN = 1;WWDT_RegLock();}
  65. #define WWDT_RstDisable() {WWDT_RegUnLock();WWDT->CON.RSTEN = 0;WWDT_RegLock();}
  66. #define WWDT_CLOCK_PCLK() {WWDT_RegUnLock();WWDT->CON.CLKS = 0;WWDT_RegLock();}
  67. #define WWDT_CLOCK_WDT() {WWDT_RegUnLock();WWDT->CON.CLKS = 1;WWDT_RegLock();}
  68. void IWDT_Init(IWDT_InitStruType *IWDT_InitStruct);
  69. void IWDT_SetReloadValue(uint32_t Value);
  70. uint32_t IWDT_GetValue(void);
  71. FlagStatus IWDT_GetFlagStatus(void);
  72. FlagStatus IWDT_GetITStatus(void);
  73. void WWDT_Init(WWDT_InitStruType *WDT_InitStruct);
  74. void WWDT_SetReloadValue(uint32_t Value);
  75. uint32_t WWDT_GetValue(void);
  76. FlagStatus WWDT_GetFlagStatus(void);
  77. FlagStatus WWDT_GetITStatus(void);
  78. #endif
  79. /*************************END OF FILE**********************/