at32f403a_407_dac.c 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. /**
  2. **************************************************************************
  3. * @file at32f403a_407_dac.c
  4. * @brief contains all the functions for the dac firmware library
  5. **************************************************************************
  6. * Copyright notice & Disclaimer
  7. *
  8. * The software Board Support Package (BSP) that is made available to
  9. * download from Artery official website is the copyrighted work of Artery.
  10. * Artery authorizes customers to use, copy, and distribute the BSP
  11. * software and its related documentation for the purpose of design and
  12. * development in conjunction with Artery microcontrollers. Use of the
  13. * software is governed by this copyright notice and the following disclaimer.
  14. *
  15. * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
  16. * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
  17. * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
  18. * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
  19. * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
  20. * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
  21. *
  22. **************************************************************************
  23. */
  24. #include "at32f403a_407_conf.h"
  25. /** @addtogroup AT32F403A_407_periph_driver
  26. * @{
  27. */
  28. /** @defgroup DAC
  29. * @brief DAC driver modules
  30. * @{
  31. */
  32. #ifdef DAC_MODULE_ENABLED
  33. /** @defgroup DAC_private_functions
  34. * @{
  35. */
  36. /**
  37. * @brief dac reset
  38. * @param none
  39. * @retval none
  40. */
  41. void dac_reset(void)
  42. {
  43. crm_periph_reset(CRM_DAC_PERIPH_RESET, TRUE);
  44. crm_periph_reset(CRM_DAC_PERIPH_RESET, FALSE);
  45. }
  46. /**
  47. * @brief enable or disable dac
  48. * @param dac_select
  49. * this parameter can be one of the following values:
  50. * - DAC1_SELECT
  51. * - DAC2_SELECT
  52. * @param new_state (TRUE or FALSE)
  53. * @retval none
  54. */
  55. void dac_enable(dac_select_type dac_select, confirm_state new_state)
  56. {
  57. switch(dac_select)
  58. {
  59. case DAC1_SELECT:
  60. DAC->ctrl_bit.d1en = new_state;
  61. break;
  62. case DAC2_SELECT:
  63. DAC->ctrl_bit.d2en = new_state;
  64. break;
  65. default:
  66. break;
  67. }
  68. }
  69. /**
  70. * @brief enable or disable dac output buffer
  71. * @param dac_select
  72. * this parameter can be one of the following values:
  73. * - DAC1_SELECT
  74. * - DAC2_SELECT
  75. * @param new_state (TRUE or FALSE)
  76. * @retval none
  77. */
  78. void dac_output_buffer_enable(dac_select_type dac_select, confirm_state new_state)
  79. {
  80. new_state = (confirm_state)!new_state;
  81. switch(dac_select)
  82. {
  83. case DAC1_SELECT:
  84. DAC->ctrl_bit.d1obdis = new_state;
  85. break;
  86. case DAC2_SELECT:
  87. DAC->ctrl_bit.d2obdis = new_state;
  88. break;
  89. default:
  90. break;
  91. }
  92. }
  93. /**
  94. * @brief enable or disable dac trigger
  95. * @param dac_select
  96. * this parameter can be one of the following values:
  97. * - DAC1_SELECT
  98. * - DAC2_SELECT
  99. * @param new_state (TRUE or FALSE)
  100. * @retval none
  101. */
  102. void dac_trigger_enable(dac_select_type dac_select, confirm_state new_state)
  103. {
  104. switch(dac_select)
  105. {
  106. case DAC1_SELECT:
  107. DAC->ctrl_bit.d1trgen = new_state;
  108. break;
  109. case DAC2_SELECT:
  110. DAC->ctrl_bit.d2trgen = new_state;
  111. break;
  112. default:
  113. break;
  114. }
  115. }
  116. /**
  117. * @brief select dac trigger
  118. * @param dac_select
  119. * this parameter can be one of the following values:
  120. * - DAC1_SELECT
  121. * - DAC2_SELECT
  122. * @param dac_trigger_source
  123. * this parameter can be one of the following values:
  124. * - DAC_TMR6_TRGOUT_EVENT
  125. * - DAC_TMR8_TRGOUT_EVENT
  126. * - DAC_TMR7_TRGOUT_EVENT
  127. * - DAC_TMR5_TRGOUT_EVENT
  128. * - DAC_TMR2_TRGOUT_EVENT
  129. * - DAC_TMR4_TRGOUT_EVENT
  130. * - DAC_EXTERNAL_INTERRUPT_LINE_9
  131. * - DAC_SOFTWARE_TRIGGER
  132. * @retval none
  133. */
  134. void dac_trigger_select(dac_select_type dac_select, dac_trigger_type dac_trigger_source)
  135. {
  136. switch(dac_select)
  137. {
  138. case DAC1_SELECT:
  139. DAC->ctrl_bit.d1trgsel = dac_trigger_source;
  140. break;
  141. case DAC2_SELECT:
  142. DAC->ctrl_bit.d2trgsel = dac_trigger_source;
  143. break;
  144. default:
  145. break;
  146. }
  147. }
  148. /**
  149. * @brief generate dac software trigger
  150. * @param dac_select
  151. * this parameter can be one of the following values:
  152. * - DAC1_SELECT
  153. * - DAC2_SELECT
  154. * @retval none
  155. */
  156. void dac_software_trigger_generate(dac_select_type dac_select)
  157. {
  158. switch(dac_select)
  159. {
  160. case DAC1_SELECT:
  161. DAC->swtrg_bit.d1swtrg = TRUE;
  162. break;
  163. case DAC2_SELECT:
  164. DAC->swtrg_bit.d2swtrg = TRUE;
  165. break;
  166. default:
  167. break;
  168. }
  169. }
  170. /**
  171. * @brief generate dac dual software trigger synchronously
  172. * @param none
  173. * @retval none
  174. */
  175. void dac_dual_software_trigger_generate(void)
  176. {
  177. DAC->swtrg |= 0x03;
  178. }
  179. /**
  180. * @brief generate dac wave
  181. * @param dac_select
  182. * this parameter can be one of the following values:
  183. * - DAC1_SELECT
  184. * - DAC2_SELECT
  185. * @param dac_wave
  186. * this parameter can be one of the following values:
  187. * - DAC_WAVE_GENERATE_NONE
  188. * - DAC_WAVE_GENERATE_NOISE
  189. * - DAC_WAVE_GENERATE_TRIANGLE
  190. * @retval none
  191. */
  192. void dac_wave_generate(dac_select_type dac_select, dac_wave_type dac_wave)
  193. {
  194. switch(dac_select)
  195. {
  196. case DAC1_SELECT:
  197. DAC->ctrl_bit.d1nm = dac_wave;
  198. break;
  199. case DAC2_SELECT:
  200. DAC->ctrl_bit.d2nm = dac_wave;
  201. break;
  202. default:
  203. break;
  204. }
  205. }
  206. /**
  207. * @brief select dac mask amplitude
  208. * @param dac_select
  209. * this parameter can be one of the following values:
  210. * - DAC1_SELECT
  211. * - DAC2_SELECT
  212. * @param dac_mask_amplitude
  213. * this parameter can be one of the following values:
  214. * - DAC_LSFR_BIT0_AMPLITUDE_1
  215. * - DAC_LSFR_BIT10_AMPLITUDE_3
  216. * - DAC_LSFR_BIT20_AMPLITUDE_7
  217. * - DAC_LSFR_BIT30_AMPLITUDE_15
  218. * - DAC_LSFR_BIT40_AMPLITUDE_31
  219. * - DAC_LSFR_BIT50_AMPLITUDE_63
  220. * - DAC_LSFR_BIT60_AMPLITUDE_127
  221. * - DAC_LSFR_BIT70_AMPLITUDE_255
  222. * - DAC_LSFR_BIT80_AMPLITUDE_511
  223. * - DAC_LSFR_BIT90_AMPLITUDE_1023
  224. * - DAC_LSFR_BITA0_AMPLITUDE_2047
  225. * - DAC_LSFR_BITB0_AMPLITUDE_4095
  226. * @retval none
  227. */
  228. void dac_mask_amplitude_select(dac_select_type dac_select, dac_mask_amplitude_type dac_mask_amplitude)
  229. {
  230. switch(dac_select)
  231. {
  232. case DAC1_SELECT:
  233. DAC->ctrl_bit.d1nbsel = dac_mask_amplitude;
  234. break;
  235. case DAC2_SELECT:
  236. DAC->ctrl_bit.d2nbsel = dac_mask_amplitude;
  237. break;
  238. default:
  239. break;
  240. }
  241. }
  242. /**
  243. * @brief enable or disable dac dma
  244. * @param dac_select
  245. * this parameter can be one of the following values:
  246. * - DAC1_SELECT
  247. * - DAC2_SELECT
  248. * @param new_state (TRUE or FALSE)
  249. * @retval none
  250. */
  251. void dac_dma_enable(dac_select_type dac_select, confirm_state new_state)
  252. {
  253. switch(dac_select)
  254. {
  255. case DAC1_SELECT:
  256. DAC->ctrl_bit.d1dmaen = new_state;
  257. break;
  258. case DAC2_SELECT:
  259. DAC->ctrl_bit.d2dmaen = new_state;
  260. break;
  261. default:
  262. break;
  263. }
  264. }
  265. /**
  266. * @brief get dac data output
  267. * @param dac_select
  268. * this parameter can be one of the following values:
  269. * - DAC1_SELECT
  270. * - DAC2_SELECT
  271. * @retval dac channel data output
  272. */
  273. uint16_t dac_data_output_get(dac_select_type dac_select)
  274. {
  275. uint16_t data_output =0 ;
  276. switch(dac_select)
  277. {
  278. case DAC1_SELECT:
  279. data_output = DAC->d1odt_bit.d1odt;
  280. break;
  281. case DAC2_SELECT:
  282. data_output = DAC->d2odt_bit.d2odt;
  283. break;
  284. default:
  285. break;
  286. }
  287. return data_output;
  288. }
  289. /**
  290. * @brief set dac1 data
  291. * @param dac1_aligned
  292. * this parameter can be one of the following values:
  293. * DAC1_12BIT_RIGHT
  294. * DAC1_12BIT_LEFT
  295. * DAC1_8BIT_RIGHT
  296. * @param dac1_data :indecate from selected data holding register
  297. * @retval none
  298. */
  299. void dac_1_data_set(dac1_aligned_data_type dac1_aligned, uint16_t dac1_data)
  300. {
  301. *(__IO uint32_t *) dac1_aligned = dac1_data;
  302. }
  303. /**
  304. * @brief set dac2 data
  305. * @param dac2_aligned
  306. * this parameter can be one of the following values:
  307. * DAC2_12BIT_RIGHT
  308. * DAC2_12BIT_LEFT
  309. * DAC2_8BIT_RIGHT
  310. * @param dac2_data :indecate from selected data holding register
  311. * @retval none
  312. */
  313. void dac_2_data_set(dac2_aligned_data_type dac2_aligned, uint16_t dac2_data)
  314. {
  315. *(__IO uint32_t *) dac2_aligned = dac2_data;
  316. }
  317. /**
  318. * @brief set dac dual data
  319. * @param dac_dual
  320. * this parameter can be one of the following values:
  321. * DAC_DUAL_12BIT_RIGHT
  322. * DAC_DUAL_12BIT_LEFT
  323. * DAC_DUAL_8BIT_RIGHT
  324. * @param data1 :dac1 channel indecate from selected data holding register
  325. * @param data2 :dac1 channel indecate from selected data holding register
  326. * @retval none
  327. */
  328. void dac_dual_data_set(dac_dual_data_type dac_dual, uint16_t data1, uint16_t data2)
  329. {
  330. switch(dac_dual)
  331. {
  332. case DAC_DUAL_12BIT_RIGHT:
  333. *(__IO uint32_t *) dac_dual = (uint32_t)(data1 | (data2 << 16));
  334. break;
  335. case DAC_DUAL_12BIT_LEFT:
  336. *(__IO uint32_t *) dac_dual = (uint32_t)(data1 | (data2 << 16));
  337. break;
  338. case DAC_DUAL_8BIT_RIGHT:
  339. *(__IO uint32_t *) dac_dual = (uint32_t)(data1 | (data2 << 8));
  340. break;
  341. default:
  342. break;
  343. }
  344. }
  345. /**
  346. * @}
  347. */
  348. #endif
  349. /**
  350. * @}
  351. */
  352. /**
  353. * @}
  354. */