wm_gpio_afsel.c 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112
  1. /**
  2. * @file wm_gpio.c
  3. *
  4. * @brief GPIO Driver Module
  5. *
  6. * @author dave
  7. *
  8. * Copyright (c) 2014 Winner Microelectronics Co., Ltd.
  9. */
  10. #include "wm_gpio.h"
  11. #include "wm_regs.h"
  12. #include "wm_irq.h"
  13. #include "wm_osal.h"
  14. #include "tls_common.h"
  15. #include "wm_gpio_afsel.h"
  16. #include "wm_debug.h"
  17. #include "wm_pmu.h"
  18. #ifndef WM_SWD_ENABLE
  19. #define WM_SWD_ENABLE 0
  20. #endif
  21. void wm_hspi_gpio_config(uint8_t numsel)
  22. {
  23. switch(numsel)
  24. {
  25. case 0:
  26. tls_io_cfg_set(WM_IO_PB_06, WM_IO_OPTION3);/*CK*/
  27. tls_io_cfg_set(WM_IO_PB_07, WM_IO_OPTION3);/*INT*/
  28. tls_io_cfg_set(WM_IO_PB_09, WM_IO_OPTION3);/*CS*/
  29. tls_io_cfg_set(WM_IO_PB_10, WM_IO_OPTION3);/*DI*/
  30. tls_io_cfg_set(WM_IO_PB_11, WM_IO_OPTION3);/*DO*/
  31. break;
  32. case 1://air103
  33. tls_io_cfg_set(WM_IO_PB_12, WM_IO_OPTION1);/*CK*/
  34. tls_io_cfg_set(WM_IO_PB_13, WM_IO_OPTION1);/*INT*/
  35. tls_io_cfg_set(WM_IO_PB_14, WM_IO_OPTION1);/*CS*/
  36. tls_io_cfg_set(WM_IO_PB_15, WM_IO_OPTION1);/*DI*/
  37. tls_io_cfg_set(WM_IO_PB_16, WM_IO_OPTION1);/*DO*/
  38. break;
  39. default:
  40. TLS_DBGPRT_ERR("highspeed spi gpio config error!");
  41. break;
  42. }
  43. }
  44. void wm_spi_ck_config(enum tls_io_name io_name)
  45. {
  46. switch(io_name)
  47. {
  48. case WM_IO_PB_01:
  49. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  50. break;
  51. case WM_IO_PB_02:
  52. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  53. break;
  54. case WM_IO_PB_15://air103
  55. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  56. break;
  57. case WM_IO_PB_24://air103
  58. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  59. break;
  60. default:
  61. TLS_DBGPRT_ERR("spi ck afsel config error!");
  62. return;
  63. }
  64. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_LSPI);
  65. }
  66. void wm_spi_cs_config(enum tls_io_name io_name)
  67. {
  68. switch(io_name)
  69. {
  70. case WM_IO_PA_00:
  71. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  72. break;
  73. case WM_IO_PB_04:
  74. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  75. break;
  76. case WM_IO_PB_14://air103
  77. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  78. break;
  79. case WM_IO_PB_23://air103
  80. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  81. break;
  82. default:
  83. TLS_DBGPRT_ERR("spi cs afsel config error!");
  84. break;
  85. }
  86. }
  87. void wm_spi_di_config(enum tls_io_name io_name)
  88. {
  89. switch(io_name)
  90. {
  91. case WM_IO_PB_00:
  92. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  93. break;
  94. case WM_IO_PB_03:
  95. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  96. break;
  97. case WM_IO_PB_16://air103
  98. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  99. break;
  100. case WM_IO_PB_25://air103
  101. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  102. break;
  103. default:
  104. TLS_DBGPRT_ERR("spi di afsel config error!");
  105. break;
  106. }
  107. }
  108. void wm_spi_do_config(enum tls_io_name io_name)
  109. {
  110. switch(io_name)
  111. {
  112. case WM_IO_PA_07:
  113. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  114. break;
  115. case WM_IO_PB_05:
  116. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  117. break;
  118. case WM_IO_PB_17://air103
  119. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  120. break;
  121. case WM_IO_PB_26://air103
  122. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  123. break;
  124. default:
  125. TLS_DBGPRT_ERR("spi do afsel config error!");
  126. break;
  127. }
  128. }
  129. void wm_sdio_host_config(uint8_t numsel)
  130. {
  131. switch(numsel)
  132. {
  133. case 0:
  134. tls_io_cfg_set(WM_IO_PB_06, WM_IO_OPTION2);/*CK*/
  135. tls_io_cfg_set(WM_IO_PB_07, WM_IO_OPTION2);/*CMD*/
  136. tls_io_cfg_set(WM_IO_PB_08, WM_IO_OPTION2);/*D0*/
  137. tls_io_cfg_set(WM_IO_PB_09, WM_IO_OPTION2);/*D1*/
  138. tls_io_cfg_set(WM_IO_PB_10, WM_IO_OPTION2);/*D2*/
  139. tls_io_cfg_set(WM_IO_PB_11, WM_IO_OPTION2);/*D3*/
  140. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_SDIO_MASTER);
  141. break;
  142. case 1: //air103
  143. tls_io_cfg_set(WM_IO_PA_09, WM_IO_OPTION1);/*CK*/
  144. tls_io_cfg_set(WM_IO_PA_10, WM_IO_OPTION1);/*CMD*/
  145. tls_io_cfg_set(WM_IO_PA_11, WM_IO_OPTION1);/*D0*/
  146. tls_io_cfg_set(WM_IO_PA_12, WM_IO_OPTION1);/*D1*/
  147. tls_io_cfg_set(WM_IO_PA_13, WM_IO_OPTION1);/*D2*/
  148. tls_io_cfg_set(WM_IO_PA_14, WM_IO_OPTION1);/*D3*/
  149. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_SDIO_MASTER);
  150. break;
  151. default:
  152. TLS_DBGPRT_ERR("sdio host afsel config error!");
  153. break;
  154. }
  155. }
  156. void wm_sdio_slave_config(uint8_t numsel)
  157. {
  158. switch(numsel)
  159. {
  160. case 0:
  161. tls_io_cfg_set(WM_IO_PB_06, WM_IO_OPTION4);/*CK*/
  162. tls_io_cfg_set(WM_IO_PB_07, WM_IO_OPTION4);/*CMD*/
  163. tls_io_cfg_set(WM_IO_PB_08, WM_IO_OPTION4);/*D0*/
  164. tls_io_cfg_set(WM_IO_PB_09, WM_IO_OPTION4);/*D1*/
  165. tls_io_cfg_set(WM_IO_PB_10, WM_IO_OPTION4);/*D2*/
  166. tls_io_cfg_set(WM_IO_PB_11, WM_IO_OPTION4);/*D3*/
  167. break;
  168. default:
  169. TLS_DBGPRT_ERR("sdio slave afsel config error!");
  170. break;
  171. }
  172. }
  173. void wm_psram_config(uint8_t numsel)
  174. {
  175. switch(numsel)
  176. {
  177. //------------------------------------------------------
  178. // --------------- by wendal, FIXED, DONOT MODIFY ------
  179. // numsel = 0 and numsel = 1 , using FIXED pin
  180. //------------------------------------------------------
  181. case 0:
  182. tls_io_cfg_set(WM_IO_PB_00, WM_IO_OPTION4);/*CK*/
  183. tls_io_cfg_set(WM_IO_PB_01, WM_IO_OPTION4);/*CS*/
  184. tls_io_cfg_set(WM_IO_PB_02, WM_IO_OPTION4);/*D0*/
  185. tls_io_cfg_set(WM_IO_PB_03, WM_IO_OPTION4);/*D1*/
  186. tls_io_cfg_set(WM_IO_PB_04, WM_IO_OPTION4);/*D2*/
  187. tls_io_cfg_set(WM_IO_PB_05, WM_IO_OPTION4);/*D3*/
  188. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PSRAM);
  189. break;
  190. case 1: //air103, by wendal, FIXED, DONOT MODIFY
  191. tls_io_cfg_set(WM_IO_PA_15, WM_IO_OPTION1);/*CK*/
  192. tls_io_cfg_set(WM_IO_PB_27, WM_IO_OPTION1);/*CS*/
  193. tls_io_cfg_set(WM_IO_PB_02, WM_IO_OPTION4);/*D0*/
  194. tls_io_cfg_set(WM_IO_PB_03, WM_IO_OPTION4);/*D1*/
  195. tls_io_cfg_set(WM_IO_PB_04, WM_IO_OPTION4);/*D2*/
  196. tls_io_cfg_set(WM_IO_PB_05, WM_IO_OPTION4);/*D3*/
  197. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PSRAM);
  198. break;
  199. // --------------- by wendal, FIXED, DONOT MODIFY ------
  200. //------------------------------------------------------
  201. // allow change for other chips
  202. case 2://w861
  203. tls_io_cfg_set(WM_IO_PA_15, WM_IO_OPTION1);/*CK*/
  204. tls_io_cfg_set(WM_IO_PB_27, WM_IO_OPTION1);/*CS*/
  205. tls_io_cfg_set(WM_IO_PB_28, WM_IO_OPTION1);/*D0*/
  206. tls_io_cfg_set(WM_IO_PB_29, WM_IO_OPTION1);/*D1*/
  207. tls_io_cfg_set(WM_IO_PB_30, WM_IO_OPTION1);/*D2*/
  208. tls_io_cfg_set(WM_IO_PB_31, WM_IO_OPTION1);/*D3*/
  209. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PSRAM);
  210. break;
  211. default:
  212. TLS_DBGPRT_ERR("psram afsel config error!");
  213. break;
  214. }
  215. }
  216. void wm_uart0_tx_config(enum tls_io_name io_name)
  217. {
  218. switch(io_name)
  219. {
  220. case WM_IO_PB_19:
  221. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  222. break;
  223. case WM_IO_PB_27:
  224. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  225. break;
  226. default:
  227. TLS_DBGPRT_ERR("uart0 tx afsel config error!");
  228. return;
  229. }
  230. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART0);
  231. }
  232. void wm_uart0_rx_config(enum tls_io_name io_name)
  233. {
  234. switch(io_name)
  235. {
  236. case WM_IO_PB_20:
  237. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  238. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 20, 0);
  239. break;
  240. default:
  241. TLS_DBGPRT_ERR("uart0 rx afsel config error!");
  242. return;
  243. }
  244. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART0);
  245. }
  246. void wm_uart1_tx_config(enum tls_io_name io_name)
  247. {
  248. switch(io_name)
  249. {
  250. case WM_IO_PB_06:
  251. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  252. break;
  253. default:
  254. TLS_DBGPRT_ERR("uart1 tx afsel config error!");
  255. return;
  256. }
  257. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART1);
  258. }
  259. void wm_uart1_rx_config(enum tls_io_name io_name)
  260. {
  261. switch(io_name)
  262. {
  263. case WM_IO_PB_07:
  264. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  265. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 7, 0);
  266. break;
  267. case WM_IO_PB_16:
  268. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  269. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 16, 0);
  270. break;
  271. default:
  272. TLS_DBGPRT_ERR("uart1 rx afsel config error!");
  273. return;
  274. }
  275. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART1);
  276. }
  277. void wm_uart1_rts_config(enum tls_io_name io_name)
  278. {
  279. switch(io_name)
  280. {
  281. case WM_IO_PB_19:
  282. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  283. break;
  284. case WM_IO_PA_02:
  285. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  286. break;
  287. default:
  288. TLS_DBGPRT_ERR("uart1 rts afsel config error!");
  289. return;
  290. }
  291. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART1);
  292. }
  293. void wm_uart1_cts_config(enum tls_io_name io_name)
  294. {
  295. switch(io_name)
  296. {
  297. case WM_IO_PB_20:
  298. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  299. break;
  300. case WM_IO_PA_03:
  301. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  302. break;
  303. default:
  304. TLS_DBGPRT_ERR("uart1 cts afsel config error!");
  305. return;
  306. }
  307. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART1);
  308. }
  309. void wm_uart2_tx_scio_config(enum tls_io_name io_name)
  310. {
  311. switch(io_name)
  312. {
  313. case WM_IO_PB_02:
  314. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  315. break;
  316. case WM_IO_PA_02:
  317. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  318. break;
  319. default:
  320. TLS_DBGPRT_ERR("uart2 tx afsel config error!");
  321. return;
  322. }
  323. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART2);
  324. }
  325. void wm_uart2_rx_config(enum tls_io_name io_name)
  326. {
  327. switch(io_name)
  328. {
  329. case WM_IO_PB_03:
  330. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  331. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 3, 0);
  332. break;
  333. case WM_IO_PA_03:
  334. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  335. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 3, 0);
  336. break;
  337. default:
  338. TLS_DBGPRT_ERR("uart2 rx afsel config error!");
  339. return;
  340. }
  341. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART2);
  342. }
  343. void wm_uart2_rts_scclk_config(enum tls_io_name io_name)
  344. {
  345. switch(io_name)
  346. {
  347. case WM_IO_PB_04:
  348. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  349. break;
  350. case WM_IO_PA_05:
  351. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  352. break;
  353. default:
  354. TLS_DBGPRT_ERR("uart2 rts afsel config error!");
  355. return;
  356. }
  357. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART2);
  358. }
  359. void wm_uart2_cts_config(enum tls_io_name io_name)
  360. {
  361. switch(io_name)
  362. {
  363. case WM_IO_PB_05:
  364. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  365. break;
  366. case WM_IO_PA_06:
  367. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  368. break;
  369. default:
  370. TLS_DBGPRT_ERR("uart2 cts afsel config error!");
  371. return;
  372. }
  373. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART2);
  374. }
  375. void wm_uart3_tx_config(enum tls_io_name io_name)
  376. {
  377. switch(io_name)
  378. {
  379. case WM_IO_PB_00:
  380. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  381. break;
  382. case WM_IO_PA_05:
  383. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  384. break;
  385. default:
  386. TLS_DBGPRT_ERR("uart3 tx afsel config error!");
  387. return;
  388. }
  389. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART3);
  390. }
  391. void wm_uart3_rx_config(enum tls_io_name io_name)
  392. {
  393. switch(io_name)
  394. {
  395. case WM_IO_PB_01:
  396. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  397. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 1, 0);
  398. break;
  399. case WM_IO_PA_06:
  400. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  401. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 6, 0);
  402. break;
  403. default:
  404. TLS_DBGPRT_ERR("uart3 rx afsel config error!");
  405. return;
  406. }
  407. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART3);
  408. }
  409. void wm_uart3_rts_config(enum tls_io_name io_name)
  410. {
  411. switch(io_name)
  412. {
  413. case WM_IO_PA_02:
  414. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  415. break;
  416. default:
  417. TLS_DBGPRT_ERR("uart1 rts afsel config error!");
  418. return;
  419. }
  420. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART3);
  421. }
  422. void wm_uart3_cts_config(enum tls_io_name io_name)
  423. {
  424. switch(io_name)
  425. {
  426. case WM_IO_PA_03:
  427. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  428. break;
  429. default:
  430. TLS_DBGPRT_ERR("uart1 cts afsel config error!");
  431. return;
  432. }
  433. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART3);
  434. }
  435. void wm_uart4_tx_config(enum tls_io_name io_name)
  436. {
  437. switch(io_name)
  438. {
  439. case WM_IO_PB_04:
  440. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  441. break;
  442. case WM_IO_PA_08:
  443. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  444. break;
  445. default:
  446. TLS_DBGPRT_ERR("uart4 tx afsel config error!");
  447. return;
  448. }
  449. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART4);
  450. }
  451. void wm_uart4_rx_config(enum tls_io_name io_name)
  452. {
  453. switch(io_name)
  454. {
  455. case WM_IO_PB_05:
  456. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  457. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 5, 0);
  458. break;
  459. case WM_IO_PA_09:
  460. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  461. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 9, 0);
  462. break;
  463. default:
  464. TLS_DBGPRT_ERR("uart4 rx afsel config error!");
  465. return;
  466. }
  467. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART4);
  468. }
  469. void wm_uart4_rts_config(enum tls_io_name io_name)
  470. {
  471. switch(io_name)
  472. {
  473. case WM_IO_PA_05:
  474. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  475. break;
  476. case WM_IO_PA_10:
  477. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  478. break;
  479. default:
  480. TLS_DBGPRT_ERR("uart1 rts afsel config error!");
  481. return;
  482. }
  483. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART4);
  484. }
  485. void wm_uart4_cts_config(enum tls_io_name io_name)
  486. {
  487. switch(io_name)
  488. {
  489. case WM_IO_PA_06:
  490. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  491. break;
  492. case WM_IO_PA_11:
  493. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  494. break;
  495. default:
  496. TLS_DBGPRT_ERR("uart1 cts afsel config error!");
  497. return;
  498. }
  499. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART4);
  500. }
  501. void wm_uart5_tx_config(enum tls_io_name io_name)
  502. {
  503. switch(io_name)
  504. {
  505. case WM_IO_PA_12:
  506. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  507. break;
  508. case WM_IO_PA_08:
  509. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  510. break;
  511. case WM_IO_PB_18:
  512. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  513. break;
  514. default:
  515. TLS_DBGPRT_ERR("uart4 tx afsel config error!");
  516. return;
  517. }
  518. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART5);
  519. }
  520. void wm_uart5_rx_config(enum tls_io_name io_name)
  521. {
  522. switch(io_name)
  523. {
  524. case WM_IO_PA_13:
  525. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  526. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 13, 0);
  527. break;
  528. case WM_IO_PA_09:
  529. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  530. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 9, 0);
  531. break;
  532. case WM_IO_PB_17:
  533. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  534. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 17, 0);
  535. break;
  536. default:
  537. TLS_DBGPRT_ERR("uart4 rx afsel config error!");
  538. return;
  539. }
  540. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART5);
  541. }
  542. void wm_uart5_rts_config(enum tls_io_name io_name)
  543. {
  544. switch(io_name)
  545. {
  546. case WM_IO_PB_12:
  547. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  548. break;
  549. case WM_IO_PA_14:
  550. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  551. break;
  552. default:
  553. TLS_DBGPRT_ERR("uart1 rts afsel config error!");
  554. return;
  555. }
  556. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART5);
  557. }
  558. void wm_uart5_cts_config(enum tls_io_name io_name)
  559. {
  560. switch(io_name)
  561. {
  562. case WM_IO_PB_13:
  563. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  564. break;
  565. case WM_IO_PA_15:
  566. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  567. break;
  568. default:
  569. TLS_DBGPRT_ERR("uart1 cts afsel config error!");
  570. return;
  571. }
  572. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART5);
  573. }
  574. void wm_i2s_ck_config(enum tls_io_name io_name)
  575. {
  576. switch(io_name)
  577. {
  578. case WM_IO_PA_04:
  579. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  580. break;
  581. case WM_IO_PB_08:
  582. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  583. break;
  584. case WM_IO_PA_08:
  585. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  586. break;
  587. case WM_IO_PB_12:
  588. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  589. break;
  590. default:
  591. TLS_DBGPRT_ERR("i2s master ck afsel config error!");
  592. return;
  593. }
  594. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  595. }
  596. void wm_i2s_ws_config(enum tls_io_name io_name)
  597. {
  598. switch(io_name)
  599. {
  600. case WM_IO_PA_01:
  601. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  602. break;
  603. case WM_IO_PB_09:
  604. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  605. break;
  606. case WM_IO_PA_09:
  607. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  608. break;
  609. case WM_IO_PB_13:
  610. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  611. break;
  612. default:
  613. return;
  614. }
  615. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  616. }
  617. void wm_i2s_do_config(enum tls_io_name io_name)
  618. {
  619. switch(io_name)
  620. {
  621. case WM_IO_PA_00:
  622. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  623. break;
  624. case WM_IO_PB_11:
  625. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  626. break;
  627. case WM_IO_PA_10:
  628. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  629. break;
  630. case WM_IO_PB_14:
  631. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  632. break;
  633. default:
  634. TLS_DBGPRT_ERR("i2s master do afsel config error!");
  635. return;
  636. }
  637. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  638. }
  639. void wm_i2s_di_config(enum tls_io_name io_name)
  640. {
  641. switch(io_name)
  642. {
  643. case WM_IO_PA_07:
  644. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  645. break;
  646. case WM_IO_PB_10:
  647. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  648. break;
  649. case WM_IO_PA_11:
  650. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  651. break;
  652. case WM_IO_PB_15:
  653. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  654. break;
  655. default:
  656. TLS_DBGPRT_ERR("i2s slave di afsel config error!");
  657. return;
  658. }
  659. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  660. }
  661. void wm_i2s_mclk_config(enum tls_io_name io_name)
  662. {
  663. switch(io_name)
  664. {
  665. case WM_IO_PA_00:
  666. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  667. break;
  668. case WM_IO_PA_07:
  669. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  670. break;
  671. case WM_IO_PB_17:
  672. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  673. break;
  674. default:
  675. TLS_DBGPRT_ERR("i2s mclk afsel config error!");
  676. return;
  677. }
  678. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  679. }
  680. void wm_i2s_extclk_config(enum tls_io_name io_name)
  681. {
  682. switch(io_name)
  683. {
  684. case WM_IO_PA_07:
  685. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  686. break;
  687. case WM_IO_PB_17:
  688. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  689. break;
  690. default:
  691. TLS_DBGPRT_ERR("i2s extclk afsel config error!");
  692. return;
  693. }
  694. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  695. }
  696. void wm_i2c_scl_config(enum tls_io_name io_name)
  697. {
  698. switch(io_name)
  699. {
  700. case WM_IO_PA_01:
  701. tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  702. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  703. break;
  704. case WM_IO_PB_20:
  705. tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  706. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  707. break;
  708. default:
  709. TLS_DBGPRT_ERR("i2c scl afsel config error!");
  710. return;
  711. }
  712. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2C);
  713. }
  714. void wm_i2c_sda_config(enum tls_io_name io_name)
  715. {
  716. switch(io_name)
  717. {
  718. case WM_IO_PA_04:
  719. tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  720. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  721. break;
  722. case WM_IO_PB_19:
  723. tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  724. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  725. break;
  726. default:
  727. TLS_DBGPRT_ERR("i2c sda afsel config error!");
  728. return;
  729. }
  730. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2C);
  731. }
  732. void wm_pwm0_config(enum tls_io_name io_name)
  733. {
  734. switch(io_name)
  735. {
  736. case WM_IO_PB_00:
  737. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  738. break;
  739. case WM_IO_PB_19:
  740. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  741. break;
  742. case WM_IO_PB_12:
  743. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  744. break;
  745. case WM_IO_PA_02:
  746. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  747. break;
  748. case WM_IO_PA_10:
  749. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  750. break;
  751. default:
  752. TLS_DBGPRT_ERR("pwm0 afsel config error!");
  753. return;
  754. }
  755. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  756. }
  757. void wm_pwm1_config(enum tls_io_name io_name)
  758. {
  759. switch(io_name)
  760. {
  761. case WM_IO_PB_01:
  762. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  763. break;
  764. case WM_IO_PB_20:
  765. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  766. break;
  767. case WM_IO_PA_03:
  768. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  769. break;
  770. case WM_IO_PA_11:
  771. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  772. break;
  773. case WM_IO_PB_13:
  774. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  775. break;
  776. default:
  777. TLS_DBGPRT_ERR("pwm1 afsel config error!");
  778. return;
  779. }
  780. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  781. }
  782. void wm_pwm2_config(enum tls_io_name io_name)
  783. {
  784. switch(io_name)
  785. {
  786. case WM_IO_PA_00:
  787. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  788. break;
  789. case WM_IO_PB_02:
  790. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  791. break;
  792. case WM_IO_PA_12:
  793. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  794. break;
  795. case WM_IO_PB_14:
  796. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  797. break;
  798. case WM_IO_PB_24:
  799. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  800. break;
  801. default:
  802. TLS_DBGPRT_ERR("pwm2 afsel config error!");
  803. return;
  804. }
  805. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  806. }
  807. void wm_pwm3_config(enum tls_io_name io_name)
  808. {
  809. switch(io_name)
  810. {
  811. case WM_IO_PA_01:
  812. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  813. break;
  814. case WM_IO_PB_03:
  815. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  816. break;
  817. case WM_IO_PA_13:
  818. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  819. break;
  820. case WM_IO_PB_15:
  821. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  822. break;
  823. case WM_IO_PB_25:
  824. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  825. break;
  826. default:
  827. TLS_DBGPRT_ERR("pwm3 afsel config error!");
  828. return;
  829. }
  830. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  831. }
  832. void wm_pwm4_config(enum tls_io_name io_name)
  833. {
  834. switch(io_name)
  835. {
  836. case WM_IO_PA_04:
  837. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  838. break;
  839. case WM_IO_PA_07:
  840. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  841. break;
  842. case WM_IO_PA_14:
  843. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  844. break;
  845. case WM_IO_PB_16:
  846. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  847. break;
  848. case WM_IO_PB_26:
  849. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  850. break;
  851. default:
  852. TLS_DBGPRT_ERR("pwm4 afsel config error!");
  853. return;
  854. }
  855. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  856. }
  857. void wm_pwmbrk_config(enum tls_io_name io_name)
  858. {
  859. switch(io_name)
  860. {
  861. case WM_IO_PB_08:
  862. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  863. break;
  864. case WM_IO_PA_05:
  865. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  866. break;
  867. case WM_IO_PA_08:
  868. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  869. break;
  870. case WM_IO_PA_15:
  871. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  872. break;
  873. case WM_IO_PB_17:
  874. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  875. break;
  876. default:
  877. TLS_DBGPRT_ERR("pwmbrk afsel config error!");
  878. return;
  879. }
  880. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  881. }
  882. void wm_swd_config(bool enable)
  883. {
  884. if (enable)
  885. {
  886. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION1);
  887. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION1);
  888. }
  889. else
  890. {
  891. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION5);
  892. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION5);
  893. }
  894. }
  895. void wm_adc_config(u8 Channel)
  896. {
  897. switch(Channel)
  898. {
  899. case 0:
  900. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION6);
  901. break;
  902. case 1:
  903. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION6);
  904. break;
  905. case 2:
  906. tls_io_cfg_set(WM_IO_PA_03, WM_IO_OPTION6);
  907. break;
  908. case 3:
  909. tls_io_cfg_set(WM_IO_PA_02, WM_IO_OPTION6);
  910. break;
  911. default:
  912. return;
  913. }
  914. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_SDADC);
  915. }
  916. void wm_touch_sensor_config(enum tls_io_name io_name)
  917. {
  918. switch(io_name)
  919. {
  920. case WM_IO_PA_07: /*touch sensor 1*/
  921. case WM_IO_PA_09: /*touch sensor 2*/
  922. case WM_IO_PA_10: /*touch sensor 3*/
  923. case WM_IO_PB_00: /*touch sensor 4*/
  924. case WM_IO_PB_01: /*touch sensor 5*/
  925. case WM_IO_PB_02: /*touch sensor 6*/
  926. case WM_IO_PB_03: /*touch sensor 7*/
  927. case WM_IO_PB_04: /*touch sensor 8*/
  928. case WM_IO_PB_05: /*touch sensor 9*/
  929. case WM_IO_PB_06: /*touch sensor 10*/
  930. case WM_IO_PB_07: /*touch sensor 11*/
  931. case WM_IO_PB_08: /*touch sensor 12*/
  932. case WM_IO_PB_09: /*touch sensor 13*/
  933. case WM_IO_PA_12: /*touch sensor 14*/
  934. case WM_IO_PA_14: /*touch sensor 15*/
  935. tls_io_cfg_set(io_name, WM_IO_OPTION7);
  936. break;
  937. default:
  938. return;
  939. }
  940. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_TOUCH_SENSOR);
  941. }
  942. void wm_gpio_af_disable(void)
  943. {
  944. tls_reg_write32(HR_GPIOA_DATA_DIR, 0x0);
  945. tls_reg_write32(HR_GPIOB_DATA_DIR, 0x0);
  946. #if WM_SWD_ENABLE
  947. tls_reg_write32(HR_GPIOA_AFSEL, 0x12); /*PA1:JTAG_CK,PA4:JTAG_SWO*/
  948. #else
  949. tls_reg_write32(HR_GPIOA_AFSEL, 0x0);
  950. #endif
  951. tls_reg_write32(HR_GPIOB_AFSEL, 0x0);
  952. tls_reg_write32(HR_GPIOA_DATA_PULLEN, 0xffff);
  953. tls_reg_write32(HR_GPIOB_DATA_PULLEN, 0xffffffff);
  954. }