drv_wdt.h 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * Copyright (c) 2006-2024, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2024/03/02 ShichengChu first version
  9. */
  10. #ifndef __DRV_WDT_H__
  11. #define __DRV_WDT_H__
  12. #include "pinctrl.h"
  13. #include "mmio.h"
  14. struct cvi_wdt_regs_t {
  15. uint32_t CR;
  16. uint32_t TORR;
  17. uint32_t CCVR;
  18. uint32_t CRR;
  19. uint32_t STAT;
  20. uint32_t EOI;
  21. };
  22. static struct cvi_wdt_regs_t cv182x_wdt_reg = {
  23. .CR = 0x0,
  24. .TORR = 0x4,
  25. .CCVR = 0x8,
  26. .CRR = 0xc,
  27. .STAT = 0x10,
  28. .EOI = 0x14,
  29. };
  30. static struct cvi_wdt_regs_t *cvi_wdt_reg = &cv182x_wdt_reg;
  31. #define CVI_WDT0_BASE 0x03010000
  32. #define CVI_WDT1_BASE 0x03011000
  33. #define CVI_WDT2_BASE 0x03012000
  34. #define WDT_CR(reg_base) *((volatile uint32_t *)(reg_base + cvi_wdt_reg->CR))
  35. #define WDT_TORR(reg_base) *((volatile uint32_t *)(reg_base + cvi_wdt_reg->TORR))
  36. #define WDT_CCVR(reg_base) *((volatile const uint32_t *)(reg_base + cvi_wdt_reg->CCVR))
  37. #define WDT_CRR(reg_base) *((volatile uint32_t *)(reg_base + cvi_wdt_reg->CRR))
  38. #define WDT_STAT(reg_base) *((volatile const uint32_t *)(reg_base + cvi_wdt_reg->STAT))
  39. #define WDT_EOI(reg_base) *((volatile const uint32_t *)(reg_base + cvi_wdt_reg->EOI))
  40. #define CVI_WDT_TORR_WDT_TORR_Pos (0U)
  41. #define CVI_WDT_TORR_WDT_TORR_Msk (0xf << CVI_WDT_TORR_WDT_TORR_Pos)
  42. #define CVI_WDT_TORR_WDT_ITORR_Pos (4U)
  43. #define CVI_WDT_TORR_WDT_ITORR_Msk (0xf << CVI_WDT_TORR_WDT_ITORR_Pos)
  44. #define CVI_WDT_CR_WDT_ENABLE_Pos (0U)
  45. #define CVI_WDT_CR_WDT_ENABLE_Msk (1U << CVI_WDT_CR_WDT_ENABLE_Pos)
  46. #define CVI_WDT_CR_WDT_ENABLE_En CVI_WDT_CR_WDT_ENABLE_Msk
  47. #define CVI_WDT_CR_WDT_RESPOND_Pos (1U)
  48. #define CVI_WDT_CR_WDT_RESPOND_Msk (1U << CVI_WDT_CR_WDT_RESPOND_Pos)
  49. #define CVI_WDT_CR_WDT_RESPOND_IRQ_THEN_RST CVI_WDT_CR_WDT_RESPOND_Msk
  50. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos (2U)
  51. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Msk (7U << CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos)
  52. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_2_PCLK (0U << CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos)
  53. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_4_PCLK (1U << CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos)
  54. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_8_PCLK (2U << CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos)
  55. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_16_PCLK (3U << CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos)
  56. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_32_PCLK (4U << CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos)
  57. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_64_PCLK (5U << CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos)
  58. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_128_PCLK (6U << CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Pos)
  59. #define CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_256_PCLK CVI_WDT_CR_WDT_RESET_PULSE_WIDTH_Msk
  60. #define CVI_WDT_CRR_FEED_Value 0x76
  61. #define CVI_WDT_CRR_FEED_Pos (0U)
  62. #define CVI_WDT_CRR_FEED_Msk (0xff << CVI_WDT_CRR_FEED_Pos)
  63. #define CVI_WDT_CRR_FEED_En CVI_WDT_CRR_FEED_Value
  64. #define CVI_WDT_CCVR_COUNTER_Pos (0U)
  65. #define CVI_WDT_CCVR_COUNTER_Msk (0xffffffff << CVI_WDT_CCVR_COUNTER_Pos)
  66. #define CVI_WDT_STAT_IRQ_STAT_Pos (0U)
  67. #define CVI_WDT_STAT_IRQ_STAT_Msk (1U << CVI_WDT_STAT_IRQ_STAT_Pos)
  68. #define CVI_WDT_STAT_IRQ_CLR_Pos (0U)
  69. #define CVI_WDT_STAT_IRQ_CLR_Msk (1U << CVI_WDT_STAT_IRQ_STAT_Pos)
  70. #define CVI_WDT_STAT_IRQ_CLR_En CVI_WDT_STAT_IRQ_CLR_Msk
  71. #define CV_TOP 0x03000000
  72. #define CV_TOP_WDT_OFFSET 0x8
  73. #define CV_TOP_WDT_VAL 0x100
  74. #define CV_RST_REG (CV_TOP + 0x3004)
  75. #define CV_RST_WDT (1U << 16)
  76. int rt_hw_wdt_init(void);
  77. #endif /* __DRV_WDT_H__ */