hri_wdt_e70b.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. /**
  2. * \file
  3. *
  4. * \brief SAM WDT
  5. *
  6. * Copyright (c) 2017-2018 Microchip Technology Inc. and its subsidiaries.
  7. *
  8. * \asf_license_start
  9. *
  10. * \page License
  11. *
  12. * Subject to your compliance with these terms, you may use Microchip
  13. * software and any derivatives exclusively with Microchip products.
  14. * It is your responsibility to comply with third party license terms applicable
  15. * to your use of third party software (including open source software) that
  16. * may accompany Microchip software.
  17. *
  18. * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
  19. * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
  20. * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
  21. * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
  22. * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
  23. * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
  24. * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
  25. * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
  26. * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
  27. * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
  28. * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
  29. *
  30. * \asf_license_stop
  31. */
  32. #ifdef _SAME70_WDT_COMPONENT_
  33. #ifndef _HRI_WDT_E70B_H_INCLUDED_
  34. #define _HRI_WDT_E70B_H_INCLUDED_
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38. #include <stdbool.h>
  39. #include <hal_atomic.h>
  40. #if defined(ENABLE_WDT_CRITICAL_SECTIONS)
  41. #define WDT_CRITICAL_SECTION_ENTER() CRITICAL_SECTION_ENTER()
  42. #define WDT_CRITICAL_SECTION_LEAVE() CRITICAL_SECTION_LEAVE()
  43. #else
  44. #define WDT_CRITICAL_SECTION_ENTER()
  45. #define WDT_CRITICAL_SECTION_LEAVE()
  46. #endif
  47. typedef uint32_t hri_wdt_cr_reg_t;
  48. typedef uint32_t hri_wdt_mr_reg_t;
  49. typedef uint32_t hri_wdt_sr_reg_t;
  50. static inline bool hri_wdt_get_SR_WDUNF_bit(const void *const hw)
  51. {
  52. return (((Wdt *)hw)->WDT_SR & WDT_SR_WDUNF) > 0;
  53. }
  54. static inline bool hri_wdt_get_SR_WDERR_bit(const void *const hw)
  55. {
  56. return (((Wdt *)hw)->WDT_SR & WDT_SR_WDERR) > 0;
  57. }
  58. static inline hri_wdt_sr_reg_t hri_wdt_get_SR_reg(const void *const hw, hri_wdt_sr_reg_t mask)
  59. {
  60. uint32_t tmp;
  61. tmp = ((Wdt *)hw)->WDT_SR;
  62. tmp &= mask;
  63. return tmp;
  64. }
  65. static inline hri_wdt_sr_reg_t hri_wdt_read_SR_reg(const void *const hw)
  66. {
  67. return ((Wdt *)hw)->WDT_SR;
  68. }
  69. static inline void hri_wdt_set_MR_WDFIEN_bit(const void *const hw)
  70. {
  71. WDT_CRITICAL_SECTION_ENTER();
  72. ((Wdt *)hw)->WDT_MR |= WDT_MR_WDFIEN;
  73. WDT_CRITICAL_SECTION_LEAVE();
  74. }
  75. static inline bool hri_wdt_get_MR_WDFIEN_bit(const void *const hw)
  76. {
  77. uint32_t tmp;
  78. tmp = ((Wdt *)hw)->WDT_MR;
  79. tmp = (tmp & WDT_MR_WDFIEN) >> WDT_MR_WDFIEN_Pos;
  80. return (bool)tmp;
  81. }
  82. static inline void hri_wdt_write_MR_WDFIEN_bit(const void *const hw, bool value)
  83. {
  84. uint32_t tmp;
  85. WDT_CRITICAL_SECTION_ENTER();
  86. tmp = ((Wdt *)hw)->WDT_MR;
  87. tmp &= ~WDT_MR_WDFIEN;
  88. tmp |= value << WDT_MR_WDFIEN_Pos;
  89. ((Wdt *)hw)->WDT_MR = tmp;
  90. WDT_CRITICAL_SECTION_LEAVE();
  91. }
  92. static inline void hri_wdt_clear_MR_WDFIEN_bit(const void *const hw)
  93. {
  94. WDT_CRITICAL_SECTION_ENTER();
  95. ((Wdt *)hw)->WDT_MR &= ~WDT_MR_WDFIEN;
  96. WDT_CRITICAL_SECTION_LEAVE();
  97. }
  98. static inline void hri_wdt_toggle_MR_WDFIEN_bit(const void *const hw)
  99. {
  100. WDT_CRITICAL_SECTION_ENTER();
  101. ((Wdt *)hw)->WDT_MR ^= WDT_MR_WDFIEN;
  102. WDT_CRITICAL_SECTION_LEAVE();
  103. }
  104. static inline void hri_wdt_set_MR_WDRSTEN_bit(const void *const hw)
  105. {
  106. WDT_CRITICAL_SECTION_ENTER();
  107. ((Wdt *)hw)->WDT_MR |= WDT_MR_WDRSTEN;
  108. WDT_CRITICAL_SECTION_LEAVE();
  109. }
  110. static inline bool hri_wdt_get_MR_WDRSTEN_bit(const void *const hw)
  111. {
  112. uint32_t tmp;
  113. tmp = ((Wdt *)hw)->WDT_MR;
  114. tmp = (tmp & WDT_MR_WDRSTEN) >> WDT_MR_WDRSTEN_Pos;
  115. return (bool)tmp;
  116. }
  117. static inline void hri_wdt_write_MR_WDRSTEN_bit(const void *const hw, bool value)
  118. {
  119. uint32_t tmp;
  120. WDT_CRITICAL_SECTION_ENTER();
  121. tmp = ((Wdt *)hw)->WDT_MR;
  122. tmp &= ~WDT_MR_WDRSTEN;
  123. tmp |= value << WDT_MR_WDRSTEN_Pos;
  124. ((Wdt *)hw)->WDT_MR = tmp;
  125. WDT_CRITICAL_SECTION_LEAVE();
  126. }
  127. static inline void hri_wdt_clear_MR_WDRSTEN_bit(const void *const hw)
  128. {
  129. WDT_CRITICAL_SECTION_ENTER();
  130. ((Wdt *)hw)->WDT_MR &= ~WDT_MR_WDRSTEN;
  131. WDT_CRITICAL_SECTION_LEAVE();
  132. }
  133. static inline void hri_wdt_toggle_MR_WDRSTEN_bit(const void *const hw)
  134. {
  135. WDT_CRITICAL_SECTION_ENTER();
  136. ((Wdt *)hw)->WDT_MR ^= WDT_MR_WDRSTEN;
  137. WDT_CRITICAL_SECTION_LEAVE();
  138. }
  139. static inline void hri_wdt_set_MR_WDDIS_bit(const void *const hw)
  140. {
  141. WDT_CRITICAL_SECTION_ENTER();
  142. ((Wdt *)hw)->WDT_MR |= WDT_MR_WDDIS;
  143. WDT_CRITICAL_SECTION_LEAVE();
  144. }
  145. static inline bool hri_wdt_get_MR_WDDIS_bit(const void *const hw)
  146. {
  147. uint32_t tmp;
  148. tmp = ((Wdt *)hw)->WDT_MR;
  149. tmp = (tmp & WDT_MR_WDDIS) >> WDT_MR_WDDIS_Pos;
  150. return (bool)tmp;
  151. }
  152. static inline void hri_wdt_write_MR_WDDIS_bit(const void *const hw, bool value)
  153. {
  154. uint32_t tmp;
  155. WDT_CRITICAL_SECTION_ENTER();
  156. tmp = ((Wdt *)hw)->WDT_MR;
  157. tmp &= ~WDT_MR_WDDIS;
  158. tmp |= value << WDT_MR_WDDIS_Pos;
  159. ((Wdt *)hw)->WDT_MR = tmp;
  160. WDT_CRITICAL_SECTION_LEAVE();
  161. }
  162. static inline void hri_wdt_clear_MR_WDDIS_bit(const void *const hw)
  163. {
  164. WDT_CRITICAL_SECTION_ENTER();
  165. ((Wdt *)hw)->WDT_MR &= ~WDT_MR_WDDIS;
  166. WDT_CRITICAL_SECTION_LEAVE();
  167. }
  168. static inline void hri_wdt_toggle_MR_WDDIS_bit(const void *const hw)
  169. {
  170. WDT_CRITICAL_SECTION_ENTER();
  171. ((Wdt *)hw)->WDT_MR ^= WDT_MR_WDDIS;
  172. WDT_CRITICAL_SECTION_LEAVE();
  173. }
  174. static inline void hri_wdt_set_MR_WDDBGHLT_bit(const void *const hw)
  175. {
  176. WDT_CRITICAL_SECTION_ENTER();
  177. ((Wdt *)hw)->WDT_MR |= WDT_MR_WDDBGHLT;
  178. WDT_CRITICAL_SECTION_LEAVE();
  179. }
  180. static inline bool hri_wdt_get_MR_WDDBGHLT_bit(const void *const hw)
  181. {
  182. uint32_t tmp;
  183. tmp = ((Wdt *)hw)->WDT_MR;
  184. tmp = (tmp & WDT_MR_WDDBGHLT) >> WDT_MR_WDDBGHLT_Pos;
  185. return (bool)tmp;
  186. }
  187. static inline void hri_wdt_write_MR_WDDBGHLT_bit(const void *const hw, bool value)
  188. {
  189. uint32_t tmp;
  190. WDT_CRITICAL_SECTION_ENTER();
  191. tmp = ((Wdt *)hw)->WDT_MR;
  192. tmp &= ~WDT_MR_WDDBGHLT;
  193. tmp |= value << WDT_MR_WDDBGHLT_Pos;
  194. ((Wdt *)hw)->WDT_MR = tmp;
  195. WDT_CRITICAL_SECTION_LEAVE();
  196. }
  197. static inline void hri_wdt_clear_MR_WDDBGHLT_bit(const void *const hw)
  198. {
  199. WDT_CRITICAL_SECTION_ENTER();
  200. ((Wdt *)hw)->WDT_MR &= ~WDT_MR_WDDBGHLT;
  201. WDT_CRITICAL_SECTION_LEAVE();
  202. }
  203. static inline void hri_wdt_toggle_MR_WDDBGHLT_bit(const void *const hw)
  204. {
  205. WDT_CRITICAL_SECTION_ENTER();
  206. ((Wdt *)hw)->WDT_MR ^= WDT_MR_WDDBGHLT;
  207. WDT_CRITICAL_SECTION_LEAVE();
  208. }
  209. static inline void hri_wdt_set_MR_WDIDLEHLT_bit(const void *const hw)
  210. {
  211. WDT_CRITICAL_SECTION_ENTER();
  212. ((Wdt *)hw)->WDT_MR |= WDT_MR_WDIDLEHLT;
  213. WDT_CRITICAL_SECTION_LEAVE();
  214. }
  215. static inline bool hri_wdt_get_MR_WDIDLEHLT_bit(const void *const hw)
  216. {
  217. uint32_t tmp;
  218. tmp = ((Wdt *)hw)->WDT_MR;
  219. tmp = (tmp & WDT_MR_WDIDLEHLT) >> WDT_MR_WDIDLEHLT_Pos;
  220. return (bool)tmp;
  221. }
  222. static inline void hri_wdt_write_MR_WDIDLEHLT_bit(const void *const hw, bool value)
  223. {
  224. uint32_t tmp;
  225. WDT_CRITICAL_SECTION_ENTER();
  226. tmp = ((Wdt *)hw)->WDT_MR;
  227. tmp &= ~WDT_MR_WDIDLEHLT;
  228. tmp |= value << WDT_MR_WDIDLEHLT_Pos;
  229. ((Wdt *)hw)->WDT_MR = tmp;
  230. WDT_CRITICAL_SECTION_LEAVE();
  231. }
  232. static inline void hri_wdt_clear_MR_WDIDLEHLT_bit(const void *const hw)
  233. {
  234. WDT_CRITICAL_SECTION_ENTER();
  235. ((Wdt *)hw)->WDT_MR &= ~WDT_MR_WDIDLEHLT;
  236. WDT_CRITICAL_SECTION_LEAVE();
  237. }
  238. static inline void hri_wdt_toggle_MR_WDIDLEHLT_bit(const void *const hw)
  239. {
  240. WDT_CRITICAL_SECTION_ENTER();
  241. ((Wdt *)hw)->WDT_MR ^= WDT_MR_WDIDLEHLT;
  242. WDT_CRITICAL_SECTION_LEAVE();
  243. }
  244. static inline void hri_wdt_set_MR_WDV_bf(const void *const hw, hri_wdt_mr_reg_t mask)
  245. {
  246. WDT_CRITICAL_SECTION_ENTER();
  247. ((Wdt *)hw)->WDT_MR |= WDT_MR_WDV(mask);
  248. WDT_CRITICAL_SECTION_LEAVE();
  249. }
  250. static inline hri_wdt_mr_reg_t hri_wdt_get_MR_WDV_bf(const void *const hw, hri_wdt_mr_reg_t mask)
  251. {
  252. uint32_t tmp;
  253. tmp = ((Wdt *)hw)->WDT_MR;
  254. tmp = (tmp & WDT_MR_WDV(mask)) >> WDT_MR_WDV_Pos;
  255. return tmp;
  256. }
  257. static inline void hri_wdt_write_MR_WDV_bf(const void *const hw, hri_wdt_mr_reg_t data)
  258. {
  259. uint32_t tmp;
  260. WDT_CRITICAL_SECTION_ENTER();
  261. tmp = ((Wdt *)hw)->WDT_MR;
  262. tmp &= ~WDT_MR_WDV_Msk;
  263. tmp |= WDT_MR_WDV(data);
  264. ((Wdt *)hw)->WDT_MR = tmp;
  265. WDT_CRITICAL_SECTION_LEAVE();
  266. }
  267. static inline void hri_wdt_clear_MR_WDV_bf(const void *const hw, hri_wdt_mr_reg_t mask)
  268. {
  269. WDT_CRITICAL_SECTION_ENTER();
  270. ((Wdt *)hw)->WDT_MR &= ~WDT_MR_WDV(mask);
  271. WDT_CRITICAL_SECTION_LEAVE();
  272. }
  273. static inline void hri_wdt_toggle_MR_WDV_bf(const void *const hw, hri_wdt_mr_reg_t mask)
  274. {
  275. WDT_CRITICAL_SECTION_ENTER();
  276. ((Wdt *)hw)->WDT_MR ^= WDT_MR_WDV(mask);
  277. WDT_CRITICAL_SECTION_LEAVE();
  278. }
  279. static inline hri_wdt_mr_reg_t hri_wdt_read_MR_WDV_bf(const void *const hw)
  280. {
  281. uint32_t tmp;
  282. tmp = ((Wdt *)hw)->WDT_MR;
  283. tmp = (tmp & WDT_MR_WDV_Msk) >> WDT_MR_WDV_Pos;
  284. return tmp;
  285. }
  286. static inline void hri_wdt_set_MR_WDD_bf(const void *const hw, hri_wdt_mr_reg_t mask)
  287. {
  288. WDT_CRITICAL_SECTION_ENTER();
  289. ((Wdt *)hw)->WDT_MR |= WDT_MR_WDD(mask);
  290. WDT_CRITICAL_SECTION_LEAVE();
  291. }
  292. static inline hri_wdt_mr_reg_t hri_wdt_get_MR_WDD_bf(const void *const hw, hri_wdt_mr_reg_t mask)
  293. {
  294. uint32_t tmp;
  295. tmp = ((Wdt *)hw)->WDT_MR;
  296. tmp = (tmp & WDT_MR_WDD(mask)) >> WDT_MR_WDD_Pos;
  297. return tmp;
  298. }
  299. static inline void hri_wdt_write_MR_WDD_bf(const void *const hw, hri_wdt_mr_reg_t data)
  300. {
  301. uint32_t tmp;
  302. WDT_CRITICAL_SECTION_ENTER();
  303. tmp = ((Wdt *)hw)->WDT_MR;
  304. tmp &= ~WDT_MR_WDD_Msk;
  305. tmp |= WDT_MR_WDD(data);
  306. ((Wdt *)hw)->WDT_MR = tmp;
  307. WDT_CRITICAL_SECTION_LEAVE();
  308. }
  309. static inline void hri_wdt_clear_MR_WDD_bf(const void *const hw, hri_wdt_mr_reg_t mask)
  310. {
  311. WDT_CRITICAL_SECTION_ENTER();
  312. ((Wdt *)hw)->WDT_MR &= ~WDT_MR_WDD(mask);
  313. WDT_CRITICAL_SECTION_LEAVE();
  314. }
  315. static inline void hri_wdt_toggle_MR_WDD_bf(const void *const hw, hri_wdt_mr_reg_t mask)
  316. {
  317. WDT_CRITICAL_SECTION_ENTER();
  318. ((Wdt *)hw)->WDT_MR ^= WDT_MR_WDD(mask);
  319. WDT_CRITICAL_SECTION_LEAVE();
  320. }
  321. static inline hri_wdt_mr_reg_t hri_wdt_read_MR_WDD_bf(const void *const hw)
  322. {
  323. uint32_t tmp;
  324. tmp = ((Wdt *)hw)->WDT_MR;
  325. tmp = (tmp & WDT_MR_WDD_Msk) >> WDT_MR_WDD_Pos;
  326. return tmp;
  327. }
  328. static inline void hri_wdt_set_MR_reg(const void *const hw, hri_wdt_mr_reg_t mask)
  329. {
  330. WDT_CRITICAL_SECTION_ENTER();
  331. ((Wdt *)hw)->WDT_MR |= mask;
  332. WDT_CRITICAL_SECTION_LEAVE();
  333. }
  334. static inline hri_wdt_mr_reg_t hri_wdt_get_MR_reg(const void *const hw, hri_wdt_mr_reg_t mask)
  335. {
  336. uint32_t tmp;
  337. tmp = ((Wdt *)hw)->WDT_MR;
  338. tmp &= mask;
  339. return tmp;
  340. }
  341. static inline void hri_wdt_write_MR_reg(const void *const hw, hri_wdt_mr_reg_t data)
  342. {
  343. WDT_CRITICAL_SECTION_ENTER();
  344. ((Wdt *)hw)->WDT_MR = data;
  345. WDT_CRITICAL_SECTION_LEAVE();
  346. }
  347. static inline void hri_wdt_clear_MR_reg(const void *const hw, hri_wdt_mr_reg_t mask)
  348. {
  349. WDT_CRITICAL_SECTION_ENTER();
  350. ((Wdt *)hw)->WDT_MR &= ~mask;
  351. WDT_CRITICAL_SECTION_LEAVE();
  352. }
  353. static inline void hri_wdt_toggle_MR_reg(const void *const hw, hri_wdt_mr_reg_t mask)
  354. {
  355. WDT_CRITICAL_SECTION_ENTER();
  356. ((Wdt *)hw)->WDT_MR ^= mask;
  357. WDT_CRITICAL_SECTION_LEAVE();
  358. }
  359. static inline hri_wdt_mr_reg_t hri_wdt_read_MR_reg(const void *const hw)
  360. {
  361. return ((Wdt *)hw)->WDT_MR;
  362. }
  363. static inline void hri_wdt_write_CR_reg(const void *const hw, hri_wdt_cr_reg_t data)
  364. {
  365. WDT_CRITICAL_SECTION_ENTER();
  366. ((Wdt *)hw)->WDT_CR = data;
  367. WDT_CRITICAL_SECTION_LEAVE();
  368. }
  369. #ifdef __cplusplus
  370. }
  371. #endif
  372. #endif /* _HRI_WDT_E70B_H_INCLUDED */
  373. #endif /* _SAME70_WDT_COMPONENT_ */