wm_gpio_afsel.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116
  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. tls_bitband_write(HR_GPIOA_DATA_PULLEN,1, 0);
  704. break;
  705. case WM_IO_PB_20:
  706. // tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  707. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  708. tls_bitband_write(HR_GPIOB_DATA_PULLEN,20, 0);
  709. break;
  710. default:
  711. TLS_DBGPRT_ERR("i2c scl afsel config error!");
  712. return;
  713. }
  714. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2C);
  715. }
  716. void wm_i2c_sda_config(enum tls_io_name io_name)
  717. {
  718. switch(io_name)
  719. {
  720. case WM_IO_PA_04:
  721. // tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  722. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  723. tls_bitband_write(HR_GPIOA_DATA_PULLEN,4, 0);
  724. break;
  725. case WM_IO_PB_19:
  726. // tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  727. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  728. tls_bitband_write(HR_GPIOB_DATA_PULLEN,19, 0);
  729. break;
  730. default:
  731. TLS_DBGPRT_ERR("i2c sda afsel config error!");
  732. return;
  733. }
  734. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2C);
  735. }
  736. void wm_pwm0_config(enum tls_io_name io_name)
  737. {
  738. switch(io_name)
  739. {
  740. case WM_IO_PB_00:
  741. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  742. break;
  743. case WM_IO_PB_19:
  744. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  745. break;
  746. case WM_IO_PB_12:
  747. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  748. break;
  749. case WM_IO_PA_02:
  750. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  751. break;
  752. case WM_IO_PA_10:
  753. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  754. break;
  755. default:
  756. TLS_DBGPRT_ERR("pwm0 afsel config error!");
  757. return;
  758. }
  759. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  760. }
  761. void wm_pwm1_config(enum tls_io_name io_name)
  762. {
  763. switch(io_name)
  764. {
  765. case WM_IO_PB_01:
  766. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  767. break;
  768. case WM_IO_PB_20:
  769. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  770. break;
  771. case WM_IO_PA_03:
  772. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  773. break;
  774. case WM_IO_PA_11:
  775. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  776. break;
  777. case WM_IO_PB_13:
  778. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  779. break;
  780. default:
  781. TLS_DBGPRT_ERR("pwm1 afsel config error!");
  782. return;
  783. }
  784. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  785. }
  786. void wm_pwm2_config(enum tls_io_name io_name)
  787. {
  788. switch(io_name)
  789. {
  790. case WM_IO_PA_00:
  791. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  792. break;
  793. case WM_IO_PB_02:
  794. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  795. break;
  796. case WM_IO_PA_12:
  797. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  798. break;
  799. case WM_IO_PB_14:
  800. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  801. break;
  802. case WM_IO_PB_24:
  803. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  804. break;
  805. default:
  806. TLS_DBGPRT_ERR("pwm2 afsel config error!");
  807. return;
  808. }
  809. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  810. }
  811. void wm_pwm3_config(enum tls_io_name io_name)
  812. {
  813. switch(io_name)
  814. {
  815. case WM_IO_PA_01:
  816. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  817. break;
  818. case WM_IO_PB_03:
  819. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  820. break;
  821. case WM_IO_PA_13:
  822. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  823. break;
  824. case WM_IO_PB_15:
  825. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  826. break;
  827. case WM_IO_PB_25:
  828. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  829. break;
  830. default:
  831. TLS_DBGPRT_ERR("pwm3 afsel config error!");
  832. return;
  833. }
  834. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  835. }
  836. void wm_pwm4_config(enum tls_io_name io_name)
  837. {
  838. switch(io_name)
  839. {
  840. case WM_IO_PA_04:
  841. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  842. break;
  843. case WM_IO_PA_07:
  844. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  845. break;
  846. case WM_IO_PA_14:
  847. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  848. break;
  849. case WM_IO_PB_16:
  850. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  851. break;
  852. case WM_IO_PB_26:
  853. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  854. break;
  855. default:
  856. TLS_DBGPRT_ERR("pwm4 afsel config error!");
  857. return;
  858. }
  859. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  860. }
  861. void wm_pwmbrk_config(enum tls_io_name io_name)
  862. {
  863. switch(io_name)
  864. {
  865. case WM_IO_PB_08:
  866. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  867. break;
  868. case WM_IO_PA_05:
  869. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  870. break;
  871. case WM_IO_PA_08:
  872. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  873. break;
  874. case WM_IO_PA_15:
  875. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  876. break;
  877. case WM_IO_PB_17:
  878. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  879. break;
  880. default:
  881. TLS_DBGPRT_ERR("pwmbrk afsel config error!");
  882. return;
  883. }
  884. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  885. }
  886. void wm_swd_config(bool enable)
  887. {
  888. if (enable)
  889. {
  890. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION1);
  891. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION1);
  892. }
  893. else
  894. {
  895. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION5);
  896. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION5);
  897. }
  898. }
  899. void wm_adc_config(u8 Channel)
  900. {
  901. switch(Channel)
  902. {
  903. case 0:
  904. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION6);
  905. break;
  906. case 1:
  907. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION6);
  908. break;
  909. case 2:
  910. tls_io_cfg_set(WM_IO_PA_03, WM_IO_OPTION6);
  911. break;
  912. case 3:
  913. tls_io_cfg_set(WM_IO_PA_02, WM_IO_OPTION6);
  914. break;
  915. default:
  916. return;
  917. }
  918. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_SDADC);
  919. }
  920. void wm_touch_sensor_config(enum tls_io_name io_name)
  921. {
  922. switch(io_name)
  923. {
  924. case WM_IO_PA_07: /*touch sensor 1*/
  925. case WM_IO_PA_09: /*touch sensor 2*/
  926. case WM_IO_PA_10: /*touch sensor 3*/
  927. case WM_IO_PB_00: /*touch sensor 4*/
  928. case WM_IO_PB_01: /*touch sensor 5*/
  929. case WM_IO_PB_02: /*touch sensor 6*/
  930. case WM_IO_PB_03: /*touch sensor 7*/
  931. case WM_IO_PB_04: /*touch sensor 8*/
  932. case WM_IO_PB_05: /*touch sensor 9*/
  933. case WM_IO_PB_06: /*touch sensor 10*/
  934. case WM_IO_PB_07: /*touch sensor 11*/
  935. case WM_IO_PB_08: /*touch sensor 12*/
  936. case WM_IO_PB_09: /*touch sensor 13*/
  937. case WM_IO_PA_12: /*touch sensor 14*/
  938. case WM_IO_PA_14: /*touch sensor 15*/
  939. tls_io_cfg_set(io_name, WM_IO_OPTION7);
  940. break;
  941. default:
  942. return;
  943. }
  944. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_TOUCH_SENSOR);
  945. }
  946. void wm_gpio_af_disable(void)
  947. {
  948. tls_reg_write32(HR_GPIOA_DATA_DIR, 0x0);
  949. tls_reg_write32(HR_GPIOB_DATA_DIR, 0x0);
  950. #if WM_SWD_ENABLE
  951. tls_reg_write32(HR_GPIOA_AFSEL, 0x12); /*PA1:JTAG_CK,PA4:JTAG_SWO*/
  952. #else
  953. tls_reg_write32(HR_GPIOA_AFSEL, 0x0);
  954. #endif
  955. tls_reg_write32(HR_GPIOB_AFSEL, 0x0);
  956. tls_reg_write32(HR_GPIOA_DATA_PULLEN, 0);
  957. tls_reg_write32(HR_GPIOB_DATA_PULLEN, 0);
  958. }