t_gpio.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include "t_define.h"
  2. #include "t_bk3231sf.h"
  3. #include "t_icu.h"
  4. //#include "useruart.h"
  5. //#include "userpower.h"
  6. #include "t_gpio.h"
  7. // #include "useradc.h"
  8. static GPIO_INT_HANDLE_CB_PFN gpioIntHandleCbPfn = NULL;
  9. void GpioGenCfg(uint8 port, uint8 bitoffset, uint32 mode, uint32 io, uint32 pull)
  10. {
  11. uint32 *preg, regbitmask, temp;
  12. preg = (uint32 *)(REG_GPIO_BASE+(port<<3));
  13. regbitmask = (BM_GPIO_MODE<<bitoffset)|
  14. (BM_GPIO_IO_OUT_NOR<<bitoffset)|
  15. (BM_GPIO_PULL_UP<<bitoffset)|
  16. (BM_GPIO_PULL_DOWN<<bitoffset);
  17. temp = (mode<<bitoffset)|
  18. ((io&BM_GPIO_IO_OUT_NOR)<<bitoffset)|
  19. (pull<<bitoffset);
  20. *preg = SET_VALUE(*preg, regbitmask, temp);
  21. preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));
  22. regbitmask = (BM_GPIO_IO_IN<<bitoffset);
  23. temp = ((io&BM_GPIO_IO_IN)<<bitoffset);
  24. *preg = SET_VALUE(*preg, regbitmask, temp);
  25. }
  26. void GpioModeCfg(uint8 port, uint8 bitoffset, uint32 mode)
  27. {
  28. uint32 *preg, regbitmask, temp;
  29. preg = (uint32 *)(REG_GPIO_BASE+(port<<3));
  30. regbitmask = (BM_GPIO_MODE<<bitoffset);
  31. temp = (mode<<bitoffset);
  32. *preg = SET_VALUE(*preg, regbitmask, temp);
  33. }
  34. void GpioIoCfg(uint8 port, uint8 bitoffset, uint32 io)
  35. {
  36. uint32 *preg, regbitmask, temp;
  37. preg = (uint32 *)(REG_GPIO_BASE+(port<<3));
  38. regbitmask = (BM_GPIO_IO_OUT_NOR<<bitoffset);
  39. temp = ((io&BM_GPIO_IO_OUT_NOR)<<bitoffset);
  40. *preg = SET_VALUE(*preg, regbitmask, temp);
  41. preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));
  42. regbitmask = (BM_GPIO_IO_IN<<bitoffset);
  43. temp = ((io&BM_GPIO_IO_IN)<<bitoffset);
  44. *preg = SET_VALUE(*preg, regbitmask, temp);
  45. }
  46. void GpioPullCfg(uint8 port, uint8 bitoffset, uint32 pull)
  47. {
  48. uint32 *preg, regbitmask, temp;
  49. preg = (uint32 *)(REG_GPIO_BASE+(port<<3));
  50. regbitmask = (BM_GPIO_PULL_UP<<bitoffset)|
  51. (BM_GPIO_PULL_DOWN<<bitoffset);
  52. temp = (pull<<bitoffset);
  53. *preg = SET_VALUE(*preg, regbitmask, temp);
  54. }
  55. void GpioSetOutNegate(uint8 port, uint8 bitoffset)
  56. {
  57. uint32 *preg;
  58. preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));
  59. *preg = NEGATE(*preg,BM_GPIO_OUT_DATA<<bitoffset);
  60. }
  61. void GpioSetOut(uint8 port, uint8 bitoffset, uint32 out)
  62. {
  63. uint32 *preg;
  64. preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));
  65. *preg = SET_VALUE(*preg, BM_GPIO_OUT_DATA<<bitoffset, (out<<BO_GPIO_OUT_DATA)<<bitoffset);
  66. }
  67. bool8 GpioGetIn(uint8 port, uint8 bitoffset)
  68. {
  69. uint32 *preg;
  70. uint32 temp;
  71. preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));
  72. temp = ((*preg) & (BM_GPIO_IN_DATA<<bitoffset)) >> bitoffset >> BO_GPIO_IN_DATA;
  73. return (bool8)temp;
  74. }
  75. void GpioIntCfg(uint8 port, uint8 bitoffset, uint32 interruptenable, uint32 trigedge)
  76. {
  77. REG_GPIO0T3_INT_EN = SET_VALUE(REG_GPIO0T3_INT_EN,
  78. 1ul<<((port<<3)+bitoffset),
  79. interruptenable<<((port<<3)+bitoffset));
  80. REG_GPIO0T3_INT_EDGE = SET_VALUE(REG_GPIO0T3_INT_EDGE,
  81. 1ul<<((port<<3)+bitoffset),
  82. trigedge<<((port<<3)+bitoffset));
  83. }
  84. void GpioIntEnCfg(uint8 port, uint8 bitoffset, uint32 interruptenable)
  85. {
  86. REG_GPIO0T3_INT_EN = SET_VALUE(REG_GPIO0T3_INT_EN,
  87. 1ul<<((port<<3)+bitoffset),
  88. interruptenable<<((port<<3)+bitoffset));
  89. }
  90. void GpioInTrigedgeCfg(uint8 port, uint8 bitoffset, uint32 trigedge)
  91. {
  92. REG_GPIO0T3_INT_EDGE = SET_VALUE(REG_GPIO0T3_INT_EDGE,
  93. 1ul<<((port<<3)+bitoffset),
  94. trigedge<<((port<<3)+bitoffset));
  95. }
  96. void GpioDeepWakeupCfg(uint8 port, uint8 bitoffset, uint32 wakeupenable)
  97. {
  98. REG_ICU_GPIO0T3_DEEP_WAKEUP_EN = SET_VALUE(REG_ICU_GPIO0T3_DEEP_WAKEUP_EN,
  99. (1ul<<((port<<3))<<bitoffset),
  100. ((wakeupenable<<(port<<3))<<bitoffset));
  101. }
  102. uint32 GpioGetInitSta(void)
  103. {
  104. return REG_GPIO0T3_INT_STA;
  105. }
  106. void GpioClearInitSta(uint32 gpiointstate)
  107. {
  108. REG_GPIO0T3_INT_STA = gpiointstate;
  109. }
  110. void GpioIntHandleCbCfg(GPIO_INT_HANDLE_CB_PFN cbpfn)
  111. {
  112. gpioIntHandleCbPfn = cbpfn;
  113. }
  114. void GpioIntHandle(void)
  115. {
  116. // uint32 gpiointstate = REG_GPIO0T3_INT_STA;
  117. // REG_GPIO0T3_INT_STA = gpiointstate;
  118. // ir_callback();
  119. // if(gpioIntHandleCbPfn != NULL)
  120. // {
  121. // (*gpioIntHandleCbPfn)(gpiointstate);
  122. // }
  123. }