driver_ir.h 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  1. /**
  2. ******************************************************************************************************************************
  3. *
  4. *@file driver_ir.h
  5. *
  6. *@brief Header file for IR driver
  7. *
  8. *Copyright (c) 2023, BLUETRUM
  9. ******************************************************************************************************************************
  10. **/
  11. #ifndef _IR_H_
  12. #define _IR_H_
  13. #include "driver_com.h"
  14. //IRTX
  15. // IR One Code Time Register
  16. #define ADDR_REG_IRONETIME *(volatile unsigned long*) (SFR7_BASE + 0x20*4)
  17. // IR Zero Code Time Register
  18. #define ADDR_REG_IRZEROTIME *(volatile unsigned long*) (SFR7_BASE + 0x21*4)
  19. // IR Start Code Time Register
  20. #define ADDR_REG_IRSTARTTIME *(volatile unsigned long*) (SFR7_BASE + 0x22*4)
  21. // IR Repeat Code Time Register
  22. #define ADDR_REG_IRREPEATTIME *(volatile unsigned long*) (SFR7_BASE + 0x23*4)
  23. // IR Repeat Code Control Register
  24. #define ADDR_REG_IRREPEATCON *(volatile unsigned long*) (SFR7_BASE + 0x24*4)
  25. // IR TX Interval Between Repeat Time = (IRREPTIME + 1) * (1M Or 32K)
  26. #define POS_REG_IRREPEATCON_IRREPTIME 13
  27. #define BIT_REG_IRREPEATCON_IRREPTIME 0xFFFFE000
  28. #define SET_REG_IRREPEATCON_IRREPTIME(val) ADDR_REG_IRREPEATCON = ((ADDR_REG_IRREPEATCON & (~BIT_REG_IRREPEATCON_IRREPTIME)) | ((val) << POS_REG_IRREPEATCON_IRREPTIME))
  29. #define GET_REG_IRREPEATCON_IRREPTIME() ((ADDR_REG_IRREPEATCON & BIT_REG_IRREPEATCON_IRREPTIME) >> POS_REG_IRREPEATCON_IRREPTIME)
  30. // IR TX End Pulse Time(NEC Or TC9012) = (IRENDTIME + 1) * (1M Or 32K)
  31. #define POS_REG_IRREPEATCON_IRENDTIME 3
  32. #define BIT_REG_IRREPEATCON_IRENDTIME 0x8FF8
  33. #define SET_REG_IRREPEATCON_IRENDTIME(val) ADDR_REG_IRREPEATCON = ((ADDR_REG_IRREPEATCON & (~BIT_REG_IRREPEATCON_IRENDTIME)) | ((val) << POS_REG_IRREPEATCON_IRENDTIME))
  34. #define GET_REG_IRREPEATCON_IRENDTIME() ((ADDR_REG_IRREPEATCON & BIT_REG_IRREPEATCON_IRENDTIME) >> POS_REG_IRREPEATCON_IRENDTIME)
  35. // IR TX If tc9012 Indicated As Sync Code
  36. #define POS_REG_IRREPEATCON_IRTX_SYC 2
  37. #define BIT_REG_IRREPEATCON_IRTX_SYC 0x4
  38. #define SETF_REG_IRREPEATCON_IRTX_SYC() ADDR_REG_IRREPEATCON |= BIT_REG_IRREPEATCON_IRTX_SYC
  39. #define CLRF_REG_IRREPEATCON_IRTX_SYC() ADDR_REG_IRREPEATCON &= ~BIT_REG_IRREPEATCON_IRTX_SYC
  40. #define GETF_REG_IRREPEATCON_IRTX_SYC() ((ADDR_REG_IRREPEATCON & BIT_REG_IRREPEATCON_IRTX_SYC) >> POS_REG_IRREPEATCON_IRTX_SYC)
  41. // IR TX Repeat Mode
  42. #define POS_REG_IRREPEATCON_IRREP_SEL 1
  43. #define BIT_REG_IRREPEATCON_IRREP_SEL 0x2
  44. #define SETF_REG_IRREPEATCON_IRREP_SEL() ADDR_REG_IRREPEATCON |= BIT_REG_IRREPEATCON_IRREP_SEL
  45. #define CLRF_REG_IRREPEATCON_IRREP_SEL() ADDR_REG_IRREPEATCON &= ~BIT_REG_IRREPEATCON_IRREP_SEL
  46. #define GETF_REG_IRREPEATCON_IRREP_SEL() ((ADDR_REG_IRREPEATCON & BIT_REG_IRREPEATCON_IRREP_SEL) >> POS_REG_IRREPEATCON_IRREP_SEL)
  47. // IR TX Whether Key Is Release
  48. #define POS_REG_IRREPEATCON_IRTX_KEY 0
  49. #define BIT_REG_IRREPEATCON_IRTX_KEY 0x1
  50. #define SETF_REG_IRREPEATCON_IRTX_KEY() ADDR_REG_IRREPEATCON |= BIT_REG_IRREPEATCON_IRTX_KEY
  51. #define CLRF_REG_IRREPEATCON_IRTX_KEY() ADDR_REG_IRREPEATCON &= ~BIT_REG_IRREPEATCON_IRTX_KEY
  52. #define GETF_REG_IRREPEATCON_IRTX_KEY() ((ADDR_REG_IRREPEATCON & BIT_REG_IRREPEATCON_IRTX_KEY) >> POS_REG_IRREPEATCON_IRTX_KEY)
  53. // IR TX Control Register
  54. #define ADDR_REG_IRTXCON *(volatile unsigned long*) (SFR7_BASE + 0x25*4)
  55. // IR TX Carrier Duty = (IRCW_DUTY / IRCW_LENGTH + 1)
  56. #define POS_REG_IRTXCON_IRCW_DUTY 20
  57. #define BIT_REG_IRTXCON_IRCW_DUTY 0xFF00000
  58. #define SET_REG_IRTXCON_IRCW_DUTY(val) ADDR_REG_IRTXCON = ((ADDR_REG_IRTXCON & (~BIT_REG_IRTXCON_IRCW_DUTY)) | ((val) << POS_REG_IRTXCON_IRCW_DUTY))
  59. #define GET_REG_IRTXCON_IRCW_DUTY() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRCW_DUTY) >> POS_REG_IRTXCON_IRCW_DUTY)
  60. // IR TX Carrier Freq = (3M(or 4M) / IRCW_LENGTH + 1)
  61. #define POS_REG_IRTXCON_IRCW_LENGTH 12
  62. #define BIT_REG_IRTXCON_IRCW_LENGTH 0xFF000
  63. #define SET_REG_IRTXCON_IRCW_LENGTH(val) ADDR_REG_IRTXCON = ((ADDR_REG_IRTXCON & (~BIT_REG_IRTXCON_IRCW_LENGTH)) | ((val) << POS_REG_IRTXCON_IRCW_LENGTH))
  64. #define GET_REG_IRTXCON_IRCW_LENGTH() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRCW_LENGTH) >> POS_REG_IRTXCON_IRCW_LENGTH)
  65. // IR TX Carrier Enable
  66. #define POS_REG_IRTXCON_IRTX_CARRIER_EN 11
  67. #define BIT_REG_IRTXCON_IRTX_CARRIER_EN 0x800
  68. #define SETF_REG_IRTXCON_IRTX_CARRIER_EN() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IRTX_CARRIER_EN
  69. #define CLRF_REG_IRTXCON_IRTX_CARRIER_EN() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IRTX_CARRIER_EN
  70. #define GETF_REG_IRTXCON_IRTX_CARRIER_EN() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRTX_CARRIER_EN) >> POS_REG_IRTXCON_IRTX_CARRIER_EN)
  71. // IR TX Select Fall Or Rise Trigger In Capture Mode
  72. #define POS_REG_IRTXCON_IREDGE_SEL 10
  73. #define BIT_REG_IRTXCON_IREDGE_SEL 0x400
  74. #define SETF_REG_IRTXCON_IREDGE_SEL() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IREDGE_SEL
  75. #define CLRF_REG_IRTXCON_IREDGE_SEL() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IREDGE_SEL
  76. #define GETF_REG_IRTXCON_IREDGE_SEL() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IREDGE_SEL) >> POS_REG_IRTXCON_IREDGE_SEL)
  77. // IR TX Select Encoding Format In Modulation Mode
  78. #define POS_REG_IRTXCON_IRTX_SEL 8
  79. #define BIT_REG_IRTXCON_IRTX_SEL 0x300
  80. #define SET_REG_IRTXCON_IRTX_SEL(val) ADDR_REG_IRTXCON = ((ADDR_REG_IRTXCON & (~BIT_REG_IRTXCON_IRTX_SEL)) | ((val) << POS_REG_IRTXCON_IRTX_SEL))
  81. #define GET_REG_IRTXCON_IRTX_SEL() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRTX_SEL) >> POS_REG_IRTXCON_IRTX_SEL)
  82. // IR TX Interrup Enable In Modualtion Mode
  83. #define POS_REG_IRTXCON_IRTX_IE 7
  84. #define BIT_REG_IRTXCON_IRTX_IE 0x80
  85. #define SETF_REG_IRTXCON_IRTX_IE() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IRTX_IE
  86. #define CLRF_REG_IRTXCON_IRTX_IE() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IRTX_IE
  87. #define GETF_REG_IRTXCON_IRTX_IE() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRTX_IE) >> POS_REG_IRTXCON_IRTX_IE)
  88. // IR Capture Enable
  89. #define POS_REG_IRTXCON_IR_CAPEN 6
  90. #define BIT_REG_IRTXCON_IR_CAPEN 0x40
  91. #define SETF_REG_IRTXCON_IR_CAPEN() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IR_CAPEN
  92. #define CLRF_REG_IRTXCON_IR_CAPEN() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IR_CAPEN
  93. #define GETF_REG_IRTXCON_IR_CAPEN() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IR_CAPEN) >> POS_REG_IRTXCON_IR_CAPEN)
  94. // IR TX Code "1" Mode
  95. #define POS_REG_IRTXCON_IRTX_1MODE 5
  96. #define BIT_REG_IRTXCON_IRTX_1MODE 0x20
  97. #define SETF_REG_IRTXCON_IRTX_1MODE() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IRTX_1MODE
  98. #define CLRF_REG_IRTXCON_IRTX_1MODE() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IRTX_1MODE
  99. #define GETF_REG_IRTXCON_IRTX_1MODE() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRTX_1MODE) >> POS_REG_IRTXCON_IRTX_1MODE)
  100. // IR TX Code "0" Mode
  101. #define POS_REG_IRTXCON_IRTX_0MODE 4
  102. #define BIT_REG_IRTXCON_IRTX_0MODE 0x10
  103. #define SETF_REG_IRTXCON_IRTX_0MODE() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IRTX_0MODE
  104. #define CLRF_REG_IRTXCON_IRTX_0MODE() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IRTX_0MODE
  105. #define GETF_REG_IRTXCON_IRTX_0MODE() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRTX_0MODE) >> POS_REG_IRTXCON_IRTX_0MODE)
  106. // IR TX Invert
  107. #define POS_REG_IRTXCON_IRTX_INV 3
  108. #define BIT_REG_IRTXCON_IRTX_INV 0x8
  109. #define SETF_REG_IRTXCON_IRTX_INV() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IRTX_INV
  110. #define CLRF_REG_IRTXCON_IRTX_INV() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IRTX_INV
  111. #define GETF_REG_IRTXCON_IRTX_INV() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRTX_INV) >> POS_REG_IRTXCON_IRTX_INV)
  112. // IR TX Kick Start In Modulation Mode Or Learn Mode
  113. #define POS_REG_IRTXCON_IRTX_KST 2
  114. #define BIT_REG_IRTXCON_IRTX_KST 0x4
  115. #define SETF_REG_IRTXCON_IRTX_KST() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IRTX_KST
  116. #define CLRF_REG_IRTXCON_IRTX_KST() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IRTX_KST
  117. // IR TX Learn Mode Enable
  118. #define POS_REG_IRTXCON_IRTXLEN_EN 1
  119. #define BIT_REG_IRTXCON_IRTXLEN_EN 0x2
  120. #define SETF_REG_IRTXCON_IRTXLEN_EN() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IRTXLEN_EN
  121. #define CLRF_REG_IRTXCON_IRTXLEN_EN() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IRTXLEN_EN
  122. #define GETF_REG_IRTXCON_IRTXLEN_EN() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRTXLEN_EN) >> POS_REG_IRTXCON_IRTXLEN_EN)
  123. // IR TX Modulation Mode Enable
  124. #define POS_REG_IRTXCON_IRTXMOD_EN 0
  125. #define BIT_REG_IRTXCON_IRTXMOD_EN 0x1
  126. #define SETF_REG_IRTXCON_IRTXMOD_EN() ADDR_REG_IRTXCON |= BIT_REG_IRTXCON_IRTXMOD_EN
  127. #define CLRF_REG_IRTXCON_IRTXMOD_EN() ADDR_REG_IRTXCON &= ~BIT_REG_IRTXCON_IRTXMOD_EN
  128. #define GETF_REG_IRTXCON_IRTXMOD_EN() ((ADDR_REG_IRTXCON & BIT_REG_IRTXCON_IRTXMOD_EN) >> POS_REG_IRTXCON_IRTXMOD_EN)
  129. // IR TX Data Register
  130. #define ADDR_REG_IRTXDAT *(volatile unsigned long*) (SFR7_BASE + 0x26*4)
  131. // IR TX Data
  132. #define POS_REG_IRTXDAT 0
  133. #define BIT_REG_IRTXDAT 0xFFFFFFFF
  134. #define SET_REG_IRTXDAT(val) ADDR_REG_IRTXDAT = ((ADDR_REG_IRTXDAT & (~BIT_REG_IRTXDAT)) | ((val) << POS_REG_IRTXDAT))
  135. #define GET_REG_IRTXDAT() ((ADDR_REG_IRTXDAT & BIT_REG_IRTXDAT) >> POS_REG_IRTXDAT)
  136. // IR TX Data Length Register
  137. #define ADDR_REG_IRTXLEN *(volatile unsigned long*) (SFR7_BASE + 0x27*4)
  138. // IR TX Length
  139. #define POS_REG_IRTXLEN 0
  140. #define BIT_REG_IRTXLEN 0xFFFFFFFF
  141. #define SET_REG_IRTXLEN(val) ADDR_REG_IRTXLEN = ((ADDR_REG_IRTXLEN & (~BIT_REG_IRTXLEN)) | ((val) << POS_REG_IRTXLEN))
  142. #define GET_REG_IRTXLEN() ((ADDR_REG_IRTXLEN & BIT_REG_IRTXLEN) >> POS_REG_IRTXLEN)
  143. // IR TX Clear Pending Register
  144. #define ADDR_REG_IRTXPEND *(volatile unsigned long*) (SFR7_BASE + 0x28*4)
  145. // IR TX Modulation Mode Enable
  146. #define POS_REG_IRTXPEND_IRTX_PND 0
  147. #define BIT_REG_IRTXPEND_IRTX_PND 0x1
  148. #define SETF_REG_IRTXPEND_IRTX_PND() ADDR_REG_IRTXPEND |= BIT_REG_IRTXPEND_IRTX_PND
  149. #define CLRF_REG_IRTXPEND_IRTX_PND() ADDR_REG_IRTXPEND &= ~BIT_REG_IRTXPEND_IRTX_PND
  150. #define GETF_REG_IRTXPEND_IRTX_PND() ((ADDR_REG_IRTXPEND & BIT_REG_IRTXPEND_IRTX_PND) >> POS_REG_IRTXPEND_IRTX_PND)
  151. // IR DMA Control Register
  152. #define ADDR_REG_IRDMACON *(volatile unsigned long*) (SFR7_BASE + 0x29*4)
  153. // IR Write DMA Mode
  154. #define POS_REG_IRDMACON_IR_WDMA_MODE 7
  155. #define BIT_REG_IRDMACON_IR_WDMA_MODE 0x80
  156. #define SETF_REG_IRDMACON_IR_WDMA_MODE() ADDR_REG_IRDMACON |= BIT_REG_IRDMACON_IR_WDMA_MODE
  157. #define CLRF_REG_IRDMACON_IR_WDMA_MODE() ADDR_REG_IRDMACON &= ~BIT_REG_IRDMACON_IR_WDMA_MODE
  158. #define GETF_REG_IRDMACON_IR_WDMA_MODE() ((ADDR_REG_IRDMACON & BIT_REG_IRDMACON_IR_WDMA_MODE) >> POS_REG_IRDMACON_IR_WDMA_MODE)
  159. // IR Write DMA Half Interrup Enable
  160. #define POS_REG_IRDMACON_IR_WDMA_HPND_IE 6
  161. #define BIT_REG_IRDMACON_IR_WDMA_HPND_IE 0x40
  162. #define SETF_REG_IRDMACON_IR_WDMA_HPND_IE() ADDR_REG_IRDMACON |= BIT_REG_IRDMACON_IR_WDMA_HPND_IE
  163. #define CLRF_REG_IRDMACON_IR_WDMA_HPND_IE() ADDR_REG_IRDMACON &= ~BIT_REG_IRDMACON_IR_WDMA_HPND_IE
  164. #define GETF_REG_IRDMACON_IR_WDMA_HPND_IE() ((ADDR_REG_IRDMACON & BIT_REG_IRDMACON_IR_WDMA_HPND_IE) >> POS_REG_IRDMACON_IR_WDMA_HPND_IE)
  165. // IR Write DMA All Interrup Enable
  166. #define POS_REG_IRDMACON_IR_WDMA_APND_IE 5
  167. #define BIT_REG_IRDMACON_IR_WDMA_APND_IE 0x20
  168. #define SETF_REG_IRDMACON_IR_WDMA_APND_IE() ADDR_REG_IRDMACON |= BIT_REG_IRDMACON_IR_WDMA_APND_IE
  169. #define CLRF_REG_IRDMACON_IR_WDMA_APND_IE() ADDR_REG_IRDMACON &= ~BIT_REG_IRDMACON_IR_WDMA_APND_IE
  170. #define GETF_REG_IRDMACON_IR_WDMA_APND_IE() ((ADDR_REG_IRDMACON & BIT_REG_IRDMACON_IR_WDMA_APND_IE) >> POS_REG_IRDMACON_IR_WDMA_APND_IE)
  171. // IR Write DMA Enable
  172. #define POS_REG_IRDMACON_IR_WDMA_EN 4
  173. #define BIT_REG_IRDMACON_IR_WDMA_EN 0x10
  174. #define SETF_REG_IRDMACON_IR_WDMA_EN() ADDR_REG_IRDMACON |= BIT_REG_IRDMACON_IR_WDMA_EN
  175. #define CLRF_REG_IRDMACON_IR_WDMA_EN() ADDR_REG_IRDMACON &= ~BIT_REG_IRDMACON_IR_WDMA_EN
  176. #define GETF_REG_IRDMACON_IR_WDMA_EN() ((ADDR_REG_IRDMACON & BIT_REG_IRDMACON_IR_WDMA_EN) >> POS_REG_IRDMACON_IR_WDMA_EN)
  177. // IR Read DMA Mode
  178. #define POS_REG_IRDMACON_IR_RDMA_MODE 3
  179. #define BIT_REG_IRDMACON_IR_RDMA_MODE 0x8
  180. #define SETF_REG_IRDMACON_IR_RDMA_MODE() ADDR_REG_IRDMACON |= BIT_REG_IRDMACON_IR_RDMA_MODE
  181. #define CLRF_REG_IRDMACON_IR_RDMA_MODE() ADDR_REG_IRDMACON &= ~BIT_REG_IRDMACON_IR_RDMA_MODE
  182. #define GETF_REG_IRDMACON_IR_RDMA_MODE() ((ADDR_REG_IRDMACON & BIT_REG_IRDMACON_IR_RDMA_MODE) >> POS_REG_IRDMACON_IR_RDMA_MODE)
  183. // IR Read DMA Half Interrup Enable
  184. #define POS_REG_IRDMACON_IR_RDMA_HPND_IE 2
  185. #define BIT_REG_IRDMACON_IR_RDMA_HPND_IE 0x4
  186. #define SETF_REG_IRDMACON_IR_RDMA_HPND_IE() ADDR_REG_IRDMACON |= BIT_REG_IRDMACON_IR_RDMA_HPND_IE
  187. #define CLRF_REG_IRDMACON_IR_RDMA_HPND_IE() ADDR_REG_IRDMACON &= ~BIT_REG_IRDMACON_IR_RDMA_HPND_IE
  188. #define GETF_REG_IRDMACON_IR_RDMA_HPND_IE() ((ADDR_REG_IRDMACON & BIT_REG_IRDMACON_IR_RDMA_HPND_IE) >> POS_REG_IRDMACON_IR_RDMA_HPND_IE)
  189. // IR Read DMA All Interrup Enable
  190. #define POS_REG_IRDMACON_IR_RDMA_APND_IE 1
  191. #define BIT_REG_IRDMACON_IR_RDMA_APND_IE 0x2
  192. #define SETF_REG_IRDMACON_IR_RDMA_APND_IE() ADDR_REG_IRDMACON |= BIT_REG_IRDMACON_IR_RDMA_APND_IE
  193. #define CLRF_REG_IRDMACON_IR_RDMA_APND_IE() ADDR_REG_IRDMACON &= ~BIT_REG_IRDMACON_IR_RDMA_APND_IE
  194. #define GETF_REG_IRDMACON_IR_RDMA_APND_IE() ((ADDR_REG_IRDMACON & BIT_REG_IRDMACON_IR_RDMA_APND_IE) >> POS_REG_IRDMACON_IR_RDMA_APND_IE)
  195. // IR Read DMA Enable
  196. #define POS_REG_IRDMACON_IR_RDMA_EN 0
  197. #define BIT_REG_IRDMACON_IR_RDMA_EN 0x1
  198. #define SETF_REG_IRDMACON_IR_RDMA_EN() ADDR_REG_IRDMACON |= BIT_REG_IRDMACON_IR_RDMA_EN
  199. #define CLRF_REG_IRDMACON_IR_RDMA_EN() ADDR_REG_IRDMACON &= ~BIT_REG_IRDMACON_IR_RDMA_EN
  200. #define GETF_REG_IRDMACON_IR_RDMA_EN() ((ADDR_REG_IRDMACON & BIT_REG_IRDMACON_IR_RDMA_EN) >> POS_REG_IRDMACON_IR_RDMA_EN)
  201. // IR DMA Input Address Register
  202. #define ADDR_REG_IRDMAIADR *(volatile unsigned long*) (SFR7_BASE + 0x2A*4)
  203. // IR DMA Input Size Register
  204. #define ADDR_REG_IRDMAISIZE *(volatile unsigned long*) (SFR7_BASE + 0x2B*4)
  205. // IR DMA Output Address Register
  206. #define ADDR_REG_IRDMAOADR *(volatile unsigned long*) (SFR7_BASE + 0x2C*4)
  207. // IR DMA Output Size Register
  208. #define ADDR_REG_IRDMAOSIZE *(volatile unsigned long*) (SFR7_BASE + 0x2D*4)
  209. // IR DMA Pending Register
  210. #define ADDR_REG_IRDMAPEND *(volatile unsigned long*) (SFR7_BASE + 0x2E*4)
  211. // IR Write DMA Half Size Pending Bit
  212. #define POS_REG_IRDMAPEND_WDMA_HPND 17
  213. #define BIT_REG_IRDMAPEND_WDMA_HPND 0x20000
  214. #define SETF_REG_IRDMAPEND_WDMA_HPND() ADDR_REG_IRDMAPEND |= BIT_REG_IRDMAPEND_WDMA_HPND
  215. #define CLRF_REG_IRDMAPEND_WDMA_HPND() ADDR_REG_IRDMAPEND &= ~BIT_REG_IRDMAPEND_WDMA_HPND
  216. #define GETF_REG_IRDMAPEND_WDMA_HPND() ((ADDR_REG_IRDMAPEND & BIT_REG_IRDMAPEND_WDMA_HPND) >> POS_REG_IRDMAPEND_WDMA_HPND)
  217. // IR Write DMA All Size Pending Bit
  218. #define POS_REG_IRDMAPEND_WDMA_APND 16
  219. #define BIT_REG_IRDMAPEND_WDMA_APND 0x10000
  220. #define SETF_REG_IRDMAPEND_WDMA_APND() ADDR_REG_IRDMAPEND |= BIT_REG_IRDMAPEND_WDMA_APND
  221. #define CLRF_REG_IRDMAPEND_WDMA_APND() ADDR_REG_IRDMAPEND &= ~BIT_REG_IRDMAPEND_WDMA_APND
  222. #define GETF_REG_IRDMAPEND_WDMA_APND() ((ADDR_REG_IRDMAPEND & BIT_REG_IRDMAPEND_WDMA_APND) >> POS_REG_IRDMAPEND_WDMA_APND)
  223. // IR Read DMA Half Size Pending Bit
  224. #define POS_REG_IRDMAPEND_RDMA_HPND 1
  225. #define BIT_REG_IRDMAPEND_RDMA_HPND 0x2
  226. #define SETF_REG_IRDMAPEND_RDMA_HPND() ADDR_REG_IRDMAPEND |= BIT_REG_IRDMAPEND_RDMA_HPND
  227. #define CLRF_REG_IRDMAPEND_RDMA_HPND() ADDR_REG_IRDMAPEND &= ~BIT_REG_IRDMAPEND_RDMA_HPND
  228. #define GETF_REG_IRDMAPEND_RDMA_HPND() ((ADDR_REG_IRDMAPEND & BIT_REG_IRDMAPEND_RDMA_HPND) >> POS_REG_IRDMAPEND_RDMA_HPND)
  229. // IR Read DMA All Size Pending Bit
  230. #define POS_REG_IRDMAPEND_RDMA_APND 0
  231. #define BIT_REG_IRDMAPEND_RDMA_APND 0x1
  232. #define SETF_REG_IRDMAPEND_RDMA_APND() ADDR_REG_IRDMAPEND |= BIT_REG_IRDMAPEND_RDMA_APND
  233. #define CLRF_REG_IRDMAPEND_RDMA_APND() ADDR_REG_IRDMAPEND &= ~BIT_REG_IRDMAPEND_RDMA_APND
  234. #define GETF_REG_IRDMAPEND_RDMA_APND() ((ADDR_REG_IRDMAPEND & BIT_REG_IRDMAPEND_RDMA_APND) >> POS_REG_IRDMAPEND_RDMA_APND)
  235. // IRRX
  236. // IR RX Control Register
  237. #define ADDR_REG_IRRXCON *(volatile unsigned long*) (SFR7_BASE + 0x2F*4)
  238. // IR Key Release Pending
  239. #define POS_REG_IRRXCON_KEYRELS 17
  240. #define BIT_REG_IRRXCON_KEYRELS 0x20000
  241. #define SETF_REG_IRRXCON_KEYRELS() ADDR_REG_IRRXCON |= BIT_REG_IRRXCON_KEYRELS
  242. #define CLRF_REG_IRRXCON_KEYRELS() ADDR_REG_IRRXCON &= ~BIT_REG_IRRXCON_KEYRELS
  243. #define GETF_REG_IRRXCON_KEYRELS() ((ADDR_REG_IRRXCON & BIT_REG_IRRXCON_KEYRELS) >> POS_REG_IRRXCON_KEYRELS)
  244. // IR Rx Data Finish Pending
  245. #define POS_REG_IRRXCON_RXPND 16
  246. #define BIT_REG_IRRXCON_RXPND 0x10000
  247. #define SETF_REG_IRRXCON_RXPND() ADDR_REG_IRRXCON |= BIT_REG_IRRXCON_RXPND
  248. #define CLRF_REG_IRRXCON_RXPND() ADDR_REG_IRRXCON &= ~BIT_REG_IRRXCON_RXPND
  249. #define GETF_REG_IRRXCON_RXPND() ((ADDR_REG_IRRXCON & BIT_REG_IRRXCON_RXPND) >> POS_REG_IRRXCON_RXPND)
  250. // IR Rx Wake Up Sleep Mode Enable
  251. #define POS_REG_IRRXCON_IRWKEN 4
  252. #define BIT_REG_IRRXCON_IRWKEN 0x10
  253. #define SETF_REG_IRRXCON_IRWKEN() ADDR_REG_IRRXCON |= BIT_REG_IRRXCON_IRWKEN
  254. #define CLRF_REG_IRRXCON_IRWKEN() ADDR_REG_IRRXCON &= ~BIT_REG_IRRXCON_IRWKEN
  255. #define GETF_REG_IRRXCON_IRWKEN() ((ADDR_REG_IRRXCON & BIT_REG_IRRXCON_IRWKEN) >> POS_REG_IRRXCON_IRWKEN)
  256. // IR Rx 32K Configure Select
  257. #define POS_REG_IRRXCON_IR32KSEL 3
  258. #define BIT_REG_IRRXCON_IR32KSEL 0x8
  259. #define SETF_REG_IRRXCON_IR32KSEL() ADDR_REG_IRRXCON |= BIT_REG_IRRXCON_IR32KSEL
  260. #define CLRF_REG_IRRXCON_IR32KSEL() ADDR_REG_IRRXCON &= ~BIT_REG_IRRXCON_IR32KSEL
  261. #define GETF_REG_IRRXCON_IR32KSEL() ((ADDR_REG_IRRXCON & BIT_REG_IRRXCON_IR32KSEL) >> POS_REG_IRRXCON_IR32KSEL)
  262. // IR Rx Data Select
  263. #define POS_REG_IRRXCON_IRRXSEL 2
  264. #define BIT_REG_IRRXCON_IRRXSEL 0x4
  265. #define SETF_REG_IRRXCON_IRRXSEL() ADDR_REG_IRRXCON |= BIT_REG_IRRXCON_IRRXSEL
  266. #define CLRF_REG_IRRXCON_IRRXSEL() ADDR_REG_IRRXCON &= ~BIT_REG_IRRXCON_IRRXSEL
  267. #define GETF_REG_IRRXCON_IRRXSEL() ((ADDR_REG_IRRXCON & BIT_REG_IRRXCON_IRRXSEL) >> POS_REG_IRRXCON_IRRXSEL)
  268. // IR Rx Interrupt Enable
  269. #define POS_REG_IRRXCON_IRIE 1
  270. #define BIT_REG_IRRXCON_IRIE 0x2
  271. #define SETF_REG_IRRXCON_IRIE() ADDR_REG_IRRXCON |= BIT_REG_IRRXCON_IRIE
  272. #define CLRF_REG_IRRXCON_IRIE() ADDR_REG_IRRXCON &= ~BIT_REG_IRRXCON_IRIE
  273. #define GETF_REG_IRRXCON_IRIE() ((ADDR_REG_IRRXCON & BIT_REG_IRRXCON_IRIE) >> POS_REG_IRRXCON_IRIE)
  274. // IR Rx Enable
  275. #define POS_REG_IRRXCON_IREN 0
  276. #define BIT_REG_IRRXCON_IREN 0x1
  277. #define SETF_REG_IRRXCON_IREN() ADDR_REG_IRRXCON |= BIT_REG_IRRXCON_IREN
  278. #define CLRF_REG_IRRXCON_IREN() ADDR_REG_IRRXCON &= ~BIT_REG_IRRXCON_IREN
  279. #define GETF_REG_IRRXCON_IREN() ((ADDR_REG_IRRXCON & BIT_REG_IRRXCON_IREN) >> POS_REG_IRRXCON_IREN)
  280. // IR RX Data Register
  281. #define ADDR_REG_IRRXDAT *(volatile unsigned long*) (SFR7_BASE + 0x30*4)
  282. // IR RX Data
  283. #define POS_REG_IRRXDAT 0
  284. #define BIT_REG_IRRXDAT 0xFFFFFFFF
  285. #define GET_REG_IRRXDAT() ((ADDR_REG_IRRXDAT & BIT_REG_IRRXDAT) >> POS_REG_IRRXDAT)
  286. // IR RX Clear Pending Register
  287. #define ADDR_REG_IRRXCPND *(volatile unsigned long*) (SFR7_BASE + 0x31*4)
  288. // IR Clear Key Release Pending
  289. #define POS_REG_IRRXCPND_CRELSPND 17
  290. #define BIT_REG_IRRXCPND_CRELSPND 0x20000
  291. #define SETF_REG_IRRXCPND_CRELSPND() ADDR_REG_IRRXCPND |= BIT_REG_IRRXCPND_CRELSPND
  292. #define CLRF_REG_IRRXCPND_CRELSPND() ADDR_REG_IRRXCPND &= ~BIT_REG_IRRXCPND_CRELSPND
  293. #define GETF_REG_IRRXCPND_CRELSPND() ((ADDR_REG_IRRXCPND & BIT_REG_IRRXCPND_CRELSPND) >> POS_REG_IRRXCPND_CRELSPND)
  294. // IR Clear RX Finish Pending
  295. #define POS_REG_IRRXCPND_CRXSPND 16
  296. #define BIT_REG_IRRXCPND_CRXSPND 0x10000
  297. #define SETF_REG_IRRXCPND_CRXSPND() ADDR_REG_IRRXCPND |= BIT_REG_IRRXCPND_CRXSPND
  298. #define CLRF_REG_IRRXCPND_CRXSPND() ADDR_REG_IRRXCPND &= ~BIT_REG_IRRXCPND_CRXSPND
  299. #define GETF_REG_IRRXCPND_CRXSPND() ((ADDR_REG_IRRXCPND & BIT_REG_IRRXCPND_CRXSPND) >> POS_REG_IRRXCPND_CRXSPND)
  300. // IR RX Error Configure Register 0
  301. #define ADDR_REG_IRRXERR0 *(volatile unsigned long*) (SFR7_BASE + 0x32*4)
  302. // IR Repeat Time Error = (RPTERR + 1 ) * (1M or 32K)
  303. #define POS_REG_IRRXERR0_RPTERR 16
  304. #define BIT_REG_IRRXERR0_RPTERR 0xFFF0000
  305. #define SET_REG_IRRXERR0_RPTERR(val) ADDR_REG_IRRXERR0 = ((ADDR_REG_IRRXERR0 & (~BIT_REG_IRRXERR0_RPTERR)) | ((val) << POS_REG_IRRXERR0_RPTERR))
  306. #define GET_REG_IRRXERR0_RPTERR() ((ADDR_REG_IRRXERR0 & BIT_REG_IRRXERR0_RPTERR) >> POS_REG_IRRXERR0_RPTERR)
  307. // IR Data Time Error = (DATERR + 1 ) * (1M or 32K)
  308. #define POS_REG_IRRXERR0_DATERR 0
  309. #define BIT_REG_IRRXERR0_DATERR 0xFFF
  310. #define SET_REG_IRRXERR0_DATERR(val) ADDR_REG_IRRXERR0 = ((ADDR_REG_IRRXERR0 & (~BIT_REG_IRRXERR0_DATERR)) | ((val) << POS_REG_IRRXERR0_DATERR))
  311. #define GET_REG_IRRXERR0_DATERR() ((ADDR_REG_IRRXERR0 & BIT_REG_IRRXERR0_DATERR) >> POS_REG_IRRXERR0_DATERR)
  312. // IR RX Error Configure Register 1
  313. #define ADDR_REG_IRRXERR1 *(volatile unsigned long*) (SFR7_BASE + 0x33*4)
  314. // IR Time Out Length = (TOPR + 1 ) * (1M or 32K)
  315. #define POS_REG_IRRXERR1_TOPR 20
  316. #define BIT_REG_IRRXERR1_TOPR 0xFFF00000
  317. #define SET_REG_IRRXERR1_TOPR(val) ADDR_REG_IRRXERR1 = ((ADDR_REG_IRRXERR1 & (~BIT_REG_IRRXERR1_TOPR)) | ((val) << POS_REG_IRRXERR1_TOPR))
  318. #define GET_REG_IRRXERR1_TOPR() ((ADDR_REG_IRRXERR1 & BIT_REG_IRRXERR1_TOPR) >> POS_REG_IRRXERR1_TOPR)
  319. // IR Data One Time Error = (ONEERR + 1 ) * (1M or 32K)
  320. #define POS_REG_IRRXERR1_ONEERR 10
  321. #define BIT_REG_IRRXERR1_ONEERR 0xFFC00
  322. #define SET_REG_IRRXERR1_ONEERR(val) ADDR_REG_IRRXERR1 = ((ADDR_REG_IRRXERR1 & (~BIT_REG_IRRXERR1_ONEERR)) | ((val) << POS_REG_IRRXERR1_ONEERR))
  323. #define GET_REG_IRRXERR1_ONEERR() ((ADDR_REG_IRRXERR1 & BIT_REG_IRRXERR1_ONEERR) >> POS_REG_IRRXERR1_ONEERR)
  324. // IR Data Zero Time Error = (ZEROERR + 1 ) * (1M or 32K)
  325. #define POS_REG_IRRXERR1_ZEROERR 0
  326. #define BIT_REG_IRRXERR1_ZEROERR 0x3FF
  327. #define SET_REG_IRRXERR1_ZEROERR(val) ADDR_REG_IRRXERR1 = ((ADDR_REG_IRRXERR1 & (~BIT_REG_IRRXERR1_ZEROERR)) | ((val) << POS_REG_IRRXERR1_ZEROERR))
  328. #define GET_REG_IRRXERR1_ZEROERR() ((ADDR_REG_IRRXERR1 & BIT_REG_IRRXERR1_ZEROERR) >> POS_REG_IRRXERR1_ZEROERR)
  329. // IR RX Period Configure Register 0
  330. #define ADDR_REG_IRRXPR0 *(volatile unsigned long*) (SFR7_BASE + 0x34*4)
  331. // IR Repeat Time Period = (IRRXPR + 1 ) * (1M or 32K)
  332. #define POS_REG_IRRXPR0_RPTPR 16
  333. #define BIT_REG_IRRXPR0_RPTPR 0x7FFF0000
  334. #define SET_REG_IRRXPR0_RPTPR(val) ADDR_REG_IRRXPR0 = ((ADDR_REG_IRRXPR0 & (~BIT_REG_IRRXPR0_RPTPR)) | ((val) << POS_REG_IRRXPR0_RPTPR))
  335. #define GET_REG_IRRXPR0_RPTPR() ((ADDR_REG_IRRXPR0 & BIT_REG_IRRXPR0_RPTPR) >> POS_REG_IRRXPR0_RPTPR)
  336. // IR Data Time Period = (DATPR + 1 ) * (1M or 32K)
  337. #define POS_REG_IRRXPR0_DATPR 0
  338. #define BIT_REG_IRRXPR0_DATPR 0x7FFF
  339. #define SET_REG_IRRXPR0_DATPR(val) ADDR_REG_IRRXPR0 = ((ADDR_REG_IRRXPR0 & (~BIT_REG_IRRXPR0_DATPR)) | ((val) << POS_REG_IRRXPR0_DATPR))
  340. #define GET_REG_IRRXPR0_DATPR() ((ADDR_REG_IRRXPR0 & BIT_REG_IRRXPR0_DATPR) >> POS_REG_IRRXPR0_DATPR)
  341. // IR RX Period Configure Register 1
  342. #define ADDR_REG_IRRXPR1 *(volatile unsigned long*) (SFR7_BASE + 0x35*4)
  343. // IR Data One Time Period = (IRRXPR + 1 ) * (1M or 32K)
  344. #define POS_REG_IRRXPR1_ONEPR 16
  345. #define BIT_REG_IRRXPR1_ONEPR 0x7FFF0000
  346. #define SET_REG_IRRXPR1_ONEPR(val) ADDR_REG_IRRXPR1 = ((ADDR_REG_IRRXPR1 & (~BIT_REG_IRRXPR1_ONEPR)) | ((val) << POS_REG_IRRXPR1_ONEPR))
  347. #define GET_REG_IRRXPR1_ONEPR() ((ADDR_REG_IRRXPR1 & BIT_REG_IRRXPR1_ONEPR) >> POS_REG_IRRXPR1_ONEPR)
  348. // IR Data Zero Time Period = (ZEROPR + 1 ) * (1M or 32K)
  349. #define POS_REG_IRRXPR1_ZEROPR 0
  350. #define BIT_REG_IRRXPR1_ZEROPR 0x7FFF
  351. #define SET_REG_IRRXPR1_ZEROPR(val) ADDR_REG_IRRXPR1 = ((ADDR_REG_IRRXPR1 & (~BIT_REG_IRRXPR1_ZEROPR)) | ((val) << POS_REG_IRRXPR1_ZEROPR))
  352. #define GET_REG_IRRXPR1_ZEROPR() ((ADDR_REG_IRRXPR1 & BIT_REG_IRRXPR1_ZEROPR) >> POS_REG_IRRXPR1_ZEROPR)
  353. // IR TX Filter Control Register
  354. #define ADDR_REG_IRFLTCON *(volatile unsigned long*) (SFR7_BASE + 0x36*4)
  355. // IR Filter Length
  356. #define POS_REG_IRFLTCON_IRFLT_LEN 8
  357. #define BIT_REG_IRFLTCON_IRFLT_LEN 0xFF00
  358. #define SET_REG_IRFLTCON_IRFLT_LEN(val) ADDR_REG_IRFLTCON = ((ADDR_REG_IRFLTCON & (~BIT_REG_IRFLTCON_IRFLT_LEN)) | ((val) << POS_REG_IRFLTCON_IRFLT_LEN))
  359. #define GET_REG_IRFLTCON_IRFLT_LEN() ((ADDR_REG_IRFLTCON & BIT_REG_IRFLTCON_IRFLT_LEN) >> POS_REG_IRFLTCON_IRFLT_LEN)
  360. // IR Filter Input Source Select
  361. #define POS_REG_IRFLTCON_IRFLT_SRCS 1
  362. #define BIT_REG_IRFLTCON_IRFLT_SRCS 0x2
  363. #define SETF_REG_IRFLTCON_IRFLT_SRCS() ADDR_REG_IRFLTCON |= BIT_REG_IRFLTCON_IRFLT_SRCS
  364. #define CLRF_REG_IRFLTCON_IRFLT_SRCS() ADDR_REG_IRFLTCON &= ~BIT_REG_IRFLTCON_IRFLT_SRCS
  365. #define GETF_REG_IRFLTCON_IRFLT_SRCS() ((ADDR_REG_IRFLTCON & BIT_REG_IRFLTCON_IRFLT_SRCS) >> POS_REG_IRFLTCON_IRFLT_SRCS)
  366. // IR Filter Enable
  367. #define POS_REG_IRFLTCON_IRFLT_EN 0
  368. #define BIT_REG_IRFLTCON_IRFLT_EN 0x1
  369. #define SETF_REG_IRFLTCON_IRFLT_EN() ADDR_REG_IRFLTCON |= BIT_REG_IRFLTCON_IRFLT_EN
  370. #define CLRF_REG_IRFLTCON_IRFLT_EN() ADDR_REG_IRFLTCON &= ~BIT_REG_IRFLTCON_IRFLT_EN
  371. #define GETF_REG_IRFLTCON_IRFLT_EN() ((ADDR_REG_IRFLTCON & BIT_REG_IRFLTCON_IRFLT_EN) >> POS_REG_IRFLTCON_IRFLT_EN)
  372. //1m时钟下的解码timing
  373. #define RPTERR_CNT 1000
  374. #define DATERR_CNT 1000
  375. #define ONEERR_CNT 250
  376. #define ZEROERR_CNT 125
  377. #define TOPR_CNT 1718
  378. #define RPTPR_CNT 11249
  379. #define DATPR_CNT 13499
  380. #define DATA_0_CNT 1119
  381. #define DATA_1_CNT 2249
  382. /**
  383. * @brief Flag Enumeration.
  384. */
  385. typedef enum {
  386. IRTX_FLAG_WDMA_HPND = (1 << 0),
  387. IRTX_FLAG_WDMA_APND = (1 << 1),
  388. IRTX_FLAG_RDMA_HPND = (1 << 2),
  389. IRTX_FLAG_RDMA_APND = (1 << 3),
  390. } IRTX_FLAG_TYPEDEF;
  391. // irrx
  392. typedef enum
  393. {
  394. IRRX_WAKUP_SLEEP_DISABLE,
  395. IRRX_WAKUP_SLEEP_ENABLE,
  396. }irrx_wakup_en_t;
  397. typedef enum
  398. {
  399. IRRX_DATA_SELECT_32BIT,
  400. IRRX_DATA_SELECT_16BIT,
  401. }irrx_data_select_t;
  402. typedef enum
  403. {
  404. IRRX_INT_DISABLE,
  405. IRRX_INT_ENABLE,
  406. }irrx_interrupt_en_t;
  407. typedef enum
  408. {
  409. IRRX_DISABLE,
  410. IRRX_ENABLE,
  411. }irrx_en_t;
  412. typedef struct
  413. {
  414. uint8_t clk_sel;
  415. irrx_wakup_en_t wakup_en;
  416. irrx_data_select_t data_format;
  417. irrx_interrupt_en_t int_en;
  418. irrx_en_t irrx_en;
  419. }irrx_param_t;
  420. // irtx
  421. typedef enum
  422. {
  423. IRTX_ENCODE_FORMAT_NEC,
  424. IRTX_ENCODE_FORMAT_TC9012,
  425. IRTX_ENCODE_FORMAT_RC5,
  426. IRTX_ENCODE_FORMAT_RC6,
  427. }irtx_encode_format_t;
  428. typedef enum
  429. {
  430. // irtx repeat
  431. IRTX_KEY_RELEASED,
  432. IRTX_KEY_PRESSED,
  433. }irtx_key_t;
  434. typedef enum
  435. {
  436. IRTX_CAP_EDGE_FALLING,
  437. IRTX_CAP_EDGE_RISING,
  438. }irtx_cap_edge_t;
  439. typedef enum
  440. {
  441. IRTX_CARRIER_DISABLE,
  442. IRTX_CARRIER_ENABLE,
  443. }irtx_carrier_en_t;
  444. /*if tc9012 indicated as sync code
  445. 0: sync code is "0"
  446. 1: sync code is "1"
  447. if rc6 indicated as trailer code
  448. 0: trailer code is "0"
  449. 1: trailer code is "1"
  450. */
  451. typedef enum
  452. {
  453. IRTX_SYNC_OR_TRAILER_CODE_0,
  454. IRTX_SYNC_OR_TRAILER_CODE_1,
  455. }irtx_sync_code_t;
  456. typedef enum
  457. {
  458. IRTX_INVERT_OUTPUT_DISABLE,
  459. IRTX_INVERT_OUTPUT_ENABLE,
  460. }irtx_invert_en_t;
  461. typedef enum
  462. {
  463. IRTX_FILTER_DISABLE,
  464. IRTX_FILTER_ENABLE,
  465. }irtx_filter_en_t;
  466. typedef enum
  467. {
  468. IRTX_MODE_CLKSEL_4M,
  469. IRTX_MODE_CLKSEL_3M,
  470. }irtx_mod_clksel_t;
  471. typedef enum
  472. {
  473. IRTX_DMA_MODE_32BIT,
  474. IRTX_DMA_MODE_16BIT,
  475. }irtx_dma_mode_t;
  476. //时钟选择
  477. typedef enum {
  478. IR_CLK_X24M32K,
  479. IR_CLK_X24MDIV,
  480. IR_CLK_OSC32K,
  481. IR_CLK_RC32K,
  482. }ir_clk_t;
  483. typedef struct
  484. {
  485. irtx_filter_en_t filter_en; // IR Filter Enable(In Capture Mode Or IR_RX Mode)
  486. uint8_t filter_len;
  487. }irtx_filter_config_t;
  488. typedef struct
  489. {
  490. irtx_carrier_en_t carrier_en;
  491. irtx_mod_clksel_t mod_clksel; // Tx Modulation Clock Select. 1-4M; 0-3M
  492. uint8_t ircw_duty; // Tx Carrier Duty = (ircw_duty) / (ircw_length + 1))
  493. uint8_t ircw_length; // Tx Carrier Freq = (3M or 4M) / (ircw_length + 1))
  494. }irtx_carrier_config_t;
  495. typedef struct
  496. {
  497. irtx_dma_mode_t wdma_mode; //IR write DMA mode
  498. irtx_dma_mode_t rdma_mode; //IR read DMA mode
  499. }irtx_dma_config_t;
  500. typedef struct
  501. {
  502. ir_clk_t clk_sel;
  503. uint32_t tx_data;
  504. irtx_encode_format_t encode_format;
  505. irtx_key_t key;
  506. irtx_cap_edge_t cap_edge;
  507. irtx_carrier_config_t carrier_config;
  508. irtx_filter_config_t filter_config;
  509. irtx_sync_code_t sync_code;
  510. irtx_invert_en_t invert_en;
  511. irtx_dma_config_t dma_config;
  512. }irtx_param_t;
  513. //TIMING信息结构体
  514. typedef struct
  515. {
  516. // irtx select encoding format in modulatin mode. 0-nec; 1-tc9012; 2-rc5; 3-rc6.
  517. uint16_t em;
  518. // irtx code "1" mode. 0-mark + space; 1-space + mark.
  519. uint16_t o;
  520. // irtx code "0" mode. 0-mark + space; 1-space + mark.
  521. uint16_t z;
  522. // irtx code "1" mark time = (m1 + 1) * (1M or 32K).
  523. uint16_t m1;
  524. // irtx code "1" space time = (s1 + 1) * (1M or 32K).
  525. uint16_t s1;
  526. // irtx code "0" mark time = (m0 + 1) * (1M or 32K).
  527. uint16_t m0;
  528. // irtx code "0" space time = (s0 + 1) * (1M or 32K).
  529. uint16_t s0;
  530. // irtx start code "1" time = (t1 + 1) * (1M or 32K).
  531. uint16_t t1;
  532. // irtx start code "0" time = (t0 + 1) * (1M or 32K).
  533. uint16_t t0;
  534. //irtx repeat code "1" time = (r1 + 1) * (1M or 32K).
  535. uint16_t r1;
  536. // irtx repeat code "0" time = (r0 + 1) * (1M or 32K).
  537. uint16_t r0;
  538. // irtx the interval between repeat time = (rt + 1) * (1M or 32K).
  539. uint32_t rt;
  540. // irtx end pulse time = (et + 1) * (1M or 32K).
  541. uint16_t et;
  542. // irtx sync code in tc9012 or trailer code in rc6.
  543. uint16_t sy;
  544. // irtx repeat mode. 0-indicates duplicate code(nec or tc9012); 1-indicates no duplicate code(rc5 or rc6)
  545. uint16_t rm;
  546. // irtx length
  547. uint16_t l;
  548. } IRTX_timingTypeDef;
  549. // #if IRTXCLK_SEL
  550. // //em, o,z, m1, s1, m0, s0, t1, t0, r1, r0, rt,et,sy,rm,l
  551. // #define IRTX_TIMING_NEC (const uint32_t[])IRTX_TIMING(IRTX_ENCMOD_NEC, 0,0,559,1689,559,559,8999,4499,8999,2249,108000,559,0,0,32)
  552. // #define IRTX_TIMING_TC9012 (const uint32_t[])IRTX_TIMING(IRTX_ENCMOD_TC9012,0,0,559,1689,559,559,4499,4499,4499,2249,108000,559,1,0,32)
  553. // #define IRTX_TIMING_RC5 (const uint32_t[])IRTX_TIMING(IRTX_ENCMOD_RC5, 1,0,844, 844,844,844,1687,1687, 0, 0,108000, 17,0,1,12)
  554. // #define IRTX_TIMING_RC6 (const uint32_t[])IRTX_TIMING(IRTX_ENCMOD_RC6, 0,1,443, 443,443,443,2665, 888, 0, 0,106699, 17,0,1,16)
  555. // #else
  556. // #define IRTX_TIMING_NEC (const uint32_t[])IRTX_TIMING(IRTX_ENCMOD_NEC, 0,0, 18, 54, 18, 17, 293, 147, 294, 73, 3537, 18,0,0,32)
  557. // #define IRTX_TIMING_TC9012 (const uint32_t[])IRTX_TIMING(IRTX_ENCMOD_TC9012,0,0, 18, 54, 18, 17, 147, 146, 147, 74, 3537, 18,1,0,32)
  558. // #define IRTX_TIMING_RC5 (const uint32_t[])IRTX_TIMING(IRTX_ENCMOD_RC5, 1,0, 28, 26, 28, 26, 55, 55, 0, 0, 3537, 1,0,1,12)
  559. // #define IRTX_TIMING_RC6 (const uint32_t[])IRTX_TIMING(IRTX_ENCMOD_RC6, 0,1, 14, 13, 14, 13, 87, 28, 0, 0, 3494, 1,0,1,16)
  560. // #endif
  561. //1m时钟下TIMING数据
  562. //em, o,z, m1, s1, m0, s0, t1, t0, r1, r0, rt,et,sy,rm,l
  563. #define IRTX_TIMING_NEC {IRTX_ENCODE_FORMAT_NEC, 0,0,559,1689,559,559,8999,4499,8999,2249,(uint32_t)108000,559,0,0,32}
  564. #define IRTX_TIMING_TC9012 {IRTX_ENCODE_FORMAT_TC9012,0,0,559,1689,559,559,4499,4499,4499,2249,(uint32_t)108000,559,1,0,32}
  565. #define IRTX_TIMING_RC5 {IRTX_ENCODE_FORMAT_RC5, 1,0,844, 844,844,844,1687,1687, 0, 0,(uint32_t)108000, 17,0,1,12}
  566. #define IRTX_TIMING_RC6 {IRTX_ENCODE_FORMAT_RC6, 0,1,443, 443,443,443,2665, 888, 0, 0,(uint32_t)106699, 17,0,1,16}
  567. //以1m时钟的timing信息为基准缩放其他时钟下的timing信息
  568. //缩放使用浮点数防止精度丢失或直接为0
  569. static uint32_t timing_freq[4] = {32760, 1000000, 31250, 32812};
  570. static uint32_t inline ir_timing_freq_get(uint8_t clk_sel)
  571. {
  572. return timing_freq[clk_sel];
  573. }
  574. void irtx_kick_wait(void);
  575. void irtx_clk_init (uint8_t clksel);
  576. void ir_clk_init(uint8_t clksel);
  577. void irtx_io_init (void);
  578. void irrx_io_init (void);
  579. void irrx_done_clr(void);
  580. void irtx_cap_done_clr(void);
  581. void irrx_done_set(void);
  582. void irtx_cap_done_set(void);
  583. uint8_t irrx_done_get(void);
  584. uint8_t irtx_cap_done_get(void);
  585. void irrx_decode_config(irrx_typedef *irrx_reg, const irrx_param_t *irrx_param);
  586. void irrx_decode_init(irrx_typedef *irrx_reg, const irrx_param_t *irrx_param);
  587. void irrx_init(irrx_typedef *irrx_reg, const irrx_param_t *irrx_param);
  588. void irrx_wake_init(irrx_typedef *irrx_reg, const irrx_param_t *irrx_param);
  589. void irtx_init(irtx_typedef *irtx_reg, const irtx_param_t *irtx_param);
  590. void irtx_timing_init(irtx_typedef *irtx_reg, const irtx_param_t *irtx_param);
  591. void irtx_capture_buf_init(irtx_typedef *irtx_reg, void *buf, uint32_t len);
  592. void irtx_learn_buf_init(irtx_typedef *irtx_reg, void *buf, uint32_t len);
  593. void irtx_capture_init(irtx_typedef *irtx_reg, const irtx_param_t *irtx_param);
  594. void irtx_learn_init(irtx_typedef *irtx_reg, const irtx_param_t *irtx_param);
  595. void irtx_base_init(irtx_typedef *irtx_reg, const irtx_param_t *irtx_param);
  596. void irtx_data_set (irtx_typedef *irtx_reg, uint32_t code);
  597. void irtx_send(void);
  598. void irtx_repeat_send(void);
  599. void irtx_pic_config(isr_t isr, int pr, IRTX_FLAG_TYPEDEF flag_type, FUNCTIONAL_STATE state);
  600. /*function name of redefining*/
  601. #define irtx_softmodulation_init(x,y) irtx_learn_init(x,y)
  602. #define irtx_softmodulation_buf_init(x,y,z) irtx_learn_buf_init(x,y,z)
  603. #endif