wm_gpio_afsel.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095
  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. case 0:
  178. tls_io_cfg_set(WM_IO_PB_00, WM_IO_OPTION4);/*CK*/
  179. tls_io_cfg_set(WM_IO_PB_01, WM_IO_OPTION4);/*CS*/
  180. tls_io_cfg_set(WM_IO_PB_02, WM_IO_OPTION4);/*D0*/
  181. tls_io_cfg_set(WM_IO_PB_03, WM_IO_OPTION4);/*D1*/
  182. tls_io_cfg_set(WM_IO_PB_04, WM_IO_OPTION4);/*D2*/
  183. tls_io_cfg_set(WM_IO_PB_05, WM_IO_OPTION4);/*D3*/
  184. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PSRAM);
  185. break;
  186. case 1://air103
  187. tls_io_cfg_set(WM_IO_PA_15, WM_IO_OPTION1);/*CK*/
  188. tls_io_cfg_set(WM_IO_PB_27, WM_IO_OPTION1);/*CS*/
  189. tls_io_cfg_set(WM_IO_PB_28, WM_IO_OPTION1);/*D0*/
  190. tls_io_cfg_set(WM_IO_PB_29, WM_IO_OPTION1);/*D1*/
  191. tls_io_cfg_set(WM_IO_PB_30, WM_IO_OPTION1);/*D2*/
  192. tls_io_cfg_set(WM_IO_PB_31, WM_IO_OPTION1);/*D3*/
  193. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PSRAM);
  194. break;
  195. default:
  196. TLS_DBGPRT_ERR("psram afsel config error!");
  197. break;
  198. }
  199. }
  200. void wm_uart0_tx_config(enum tls_io_name io_name)
  201. {
  202. switch(io_name)
  203. {
  204. case WM_IO_PB_19:
  205. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  206. break;
  207. case WM_IO_PB_27:
  208. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  209. break;
  210. default:
  211. TLS_DBGPRT_ERR("uart0 tx afsel config error!");
  212. return;
  213. }
  214. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART0);
  215. }
  216. void wm_uart0_rx_config(enum tls_io_name io_name)
  217. {
  218. switch(io_name)
  219. {
  220. case WM_IO_PB_20:
  221. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  222. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 20, 0);
  223. break;
  224. default:
  225. TLS_DBGPRT_ERR("uart0 rx afsel config error!");
  226. return;
  227. }
  228. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART0);
  229. }
  230. void wm_uart1_tx_config(enum tls_io_name io_name)
  231. {
  232. switch(io_name)
  233. {
  234. case WM_IO_PB_06:
  235. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  236. break;
  237. default:
  238. TLS_DBGPRT_ERR("uart1 tx afsel config error!");
  239. return;
  240. }
  241. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART1);
  242. }
  243. void wm_uart1_rx_config(enum tls_io_name io_name)
  244. {
  245. switch(io_name)
  246. {
  247. case WM_IO_PB_07:
  248. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  249. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 7, 0);
  250. break;
  251. case WM_IO_PB_16:
  252. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  253. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 16, 0);
  254. break;
  255. default:
  256. TLS_DBGPRT_ERR("uart1 rx afsel config error!");
  257. return;
  258. }
  259. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART1);
  260. }
  261. void wm_uart1_rts_config(enum tls_io_name io_name)
  262. {
  263. switch(io_name)
  264. {
  265. case WM_IO_PB_19:
  266. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  267. break;
  268. case WM_IO_PA_02:
  269. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  270. break;
  271. default:
  272. TLS_DBGPRT_ERR("uart1 rts afsel config error!");
  273. return;
  274. }
  275. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART1);
  276. }
  277. void wm_uart1_cts_config(enum tls_io_name io_name)
  278. {
  279. switch(io_name)
  280. {
  281. case WM_IO_PB_20:
  282. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  283. break;
  284. case WM_IO_PA_03:
  285. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  286. break;
  287. default:
  288. TLS_DBGPRT_ERR("uart1 cts afsel config error!");
  289. return;
  290. }
  291. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART1);
  292. }
  293. void wm_uart2_tx_scio_config(enum tls_io_name io_name)
  294. {
  295. switch(io_name)
  296. {
  297. case WM_IO_PB_02:
  298. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  299. break;
  300. case WM_IO_PA_02:
  301. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  302. break;
  303. default:
  304. TLS_DBGPRT_ERR("uart2 tx afsel config error!");
  305. return;
  306. }
  307. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART2);
  308. }
  309. void wm_uart2_rx_config(enum tls_io_name io_name)
  310. {
  311. switch(io_name)
  312. {
  313. case WM_IO_PB_03:
  314. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  315. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 3, 0);
  316. break;
  317. case WM_IO_PA_03:
  318. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  319. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 3, 0);
  320. break;
  321. default:
  322. TLS_DBGPRT_ERR("uart2 rx afsel config error!");
  323. return;
  324. }
  325. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART2);
  326. }
  327. void wm_uart2_rts_scclk_config(enum tls_io_name io_name)
  328. {
  329. switch(io_name)
  330. {
  331. case WM_IO_PB_04:
  332. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  333. break;
  334. case WM_IO_PA_05:
  335. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  336. break;
  337. default:
  338. TLS_DBGPRT_ERR("uart2 rts afsel config error!");
  339. return;
  340. }
  341. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART2);
  342. }
  343. void wm_uart2_cts_config(enum tls_io_name io_name)
  344. {
  345. switch(io_name)
  346. {
  347. case WM_IO_PB_05:
  348. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  349. break;
  350. case WM_IO_PA_06:
  351. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  352. break;
  353. default:
  354. TLS_DBGPRT_ERR("uart2 cts afsel config error!");
  355. return;
  356. }
  357. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART2);
  358. }
  359. void wm_uart3_tx_config(enum tls_io_name io_name)
  360. {
  361. switch(io_name)
  362. {
  363. case WM_IO_PB_00:
  364. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  365. break;
  366. case WM_IO_PA_05:
  367. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  368. break;
  369. default:
  370. TLS_DBGPRT_ERR("uart3 tx afsel config error!");
  371. return;
  372. }
  373. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART3);
  374. }
  375. void wm_uart3_rx_config(enum tls_io_name io_name)
  376. {
  377. switch(io_name)
  378. {
  379. case WM_IO_PB_01:
  380. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  381. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 1, 0);
  382. break;
  383. case WM_IO_PA_06:
  384. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  385. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 6, 0);
  386. break;
  387. default:
  388. TLS_DBGPRT_ERR("uart3 rx afsel config error!");
  389. return;
  390. }
  391. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART3);
  392. }
  393. void wm_uart3_rts_config(enum tls_io_name io_name)
  394. {
  395. switch(io_name)
  396. {
  397. case WM_IO_PA_02:
  398. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  399. break;
  400. default:
  401. TLS_DBGPRT_ERR("uart1 rts afsel config error!");
  402. return;
  403. }
  404. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART3);
  405. }
  406. void wm_uart3_cts_config(enum tls_io_name io_name)
  407. {
  408. switch(io_name)
  409. {
  410. case WM_IO_PA_03:
  411. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  412. break;
  413. default:
  414. TLS_DBGPRT_ERR("uart1 cts afsel config error!");
  415. return;
  416. }
  417. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART3);
  418. }
  419. void wm_uart4_tx_config(enum tls_io_name io_name)
  420. {
  421. switch(io_name)
  422. {
  423. case WM_IO_PB_04:
  424. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  425. break;
  426. case WM_IO_PA_08:
  427. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  428. break;
  429. default:
  430. TLS_DBGPRT_ERR("uart4 tx afsel config error!");
  431. return;
  432. }
  433. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART4);
  434. }
  435. void wm_uart4_rx_config(enum tls_io_name io_name)
  436. {
  437. switch(io_name)
  438. {
  439. case WM_IO_PB_05:
  440. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  441. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 5, 0);
  442. break;
  443. case WM_IO_PA_09:
  444. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  445. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 9, 0);
  446. break;
  447. default:
  448. TLS_DBGPRT_ERR("uart4 rx afsel config error!");
  449. return;
  450. }
  451. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART4);
  452. }
  453. void wm_uart4_rts_config(enum tls_io_name io_name)
  454. {
  455. switch(io_name)
  456. {
  457. case WM_IO_PA_05:
  458. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  459. break;
  460. case WM_IO_PA_10:
  461. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  462. break;
  463. default:
  464. TLS_DBGPRT_ERR("uart1 rts afsel config error!");
  465. return;
  466. }
  467. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART4);
  468. }
  469. void wm_uart4_cts_config(enum tls_io_name io_name)
  470. {
  471. switch(io_name)
  472. {
  473. case WM_IO_PA_06:
  474. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  475. break;
  476. case WM_IO_PA_11:
  477. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  478. break;
  479. default:
  480. TLS_DBGPRT_ERR("uart1 cts afsel config error!");
  481. return;
  482. }
  483. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART4);
  484. }
  485. void wm_uart5_tx_config(enum tls_io_name io_name)
  486. {
  487. switch(io_name)
  488. {
  489. case WM_IO_PA_12:
  490. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  491. break;
  492. case WM_IO_PA_08:
  493. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  494. break;
  495. case WM_IO_PB_18:
  496. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  497. break;
  498. default:
  499. TLS_DBGPRT_ERR("uart4 tx afsel config error!");
  500. return;
  501. }
  502. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART5);
  503. }
  504. void wm_uart5_rx_config(enum tls_io_name io_name)
  505. {
  506. switch(io_name)
  507. {
  508. case WM_IO_PA_13:
  509. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  510. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 13, 0);
  511. break;
  512. case WM_IO_PA_09:
  513. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  514. tls_bitband_write(HR_GPIOA_DATA_PULLEN, 9, 0);
  515. break;
  516. case WM_IO_PB_17:
  517. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  518. tls_bitband_write(HR_GPIOB_DATA_PULLEN, 17, 0);
  519. break;
  520. default:
  521. TLS_DBGPRT_ERR("uart4 rx afsel config error!");
  522. return;
  523. }
  524. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART5);
  525. }
  526. void wm_uart5_rts_config(enum tls_io_name io_name)
  527. {
  528. switch(io_name)
  529. {
  530. case WM_IO_PB_12:
  531. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  532. break;
  533. case WM_IO_PA_14:
  534. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  535. break;
  536. default:
  537. TLS_DBGPRT_ERR("uart1 rts afsel config error!");
  538. return;
  539. }
  540. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART5);
  541. }
  542. void wm_uart5_cts_config(enum tls_io_name io_name)
  543. {
  544. switch(io_name)
  545. {
  546. case WM_IO_PB_13:
  547. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  548. break;
  549. case WM_IO_PA_15:
  550. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  551. break;
  552. default:
  553. TLS_DBGPRT_ERR("uart1 cts afsel config error!");
  554. return;
  555. }
  556. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_UART5);
  557. }
  558. void wm_i2s_ck_config(enum tls_io_name io_name)
  559. {
  560. switch(io_name)
  561. {
  562. case WM_IO_PA_04:
  563. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  564. break;
  565. case WM_IO_PB_08:
  566. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  567. break;
  568. case WM_IO_PA_08:
  569. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  570. break;
  571. case WM_IO_PB_12:
  572. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  573. break;
  574. default:
  575. TLS_DBGPRT_ERR("i2s master ck afsel config error!");
  576. return;
  577. }
  578. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  579. }
  580. void wm_i2s_ws_config(enum tls_io_name io_name)
  581. {
  582. switch(io_name)
  583. {
  584. case WM_IO_PA_01:
  585. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  586. break;
  587. case WM_IO_PB_09:
  588. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  589. break;
  590. case WM_IO_PA_09:
  591. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  592. break;
  593. case WM_IO_PB_13:
  594. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  595. break;
  596. default:
  597. return;
  598. }
  599. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  600. }
  601. void wm_i2s_do_config(enum tls_io_name io_name)
  602. {
  603. switch(io_name)
  604. {
  605. case WM_IO_PA_00:
  606. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  607. break;
  608. case WM_IO_PB_11:
  609. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  610. break;
  611. case WM_IO_PA_10:
  612. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  613. break;
  614. case WM_IO_PB_14:
  615. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  616. break;
  617. default:
  618. TLS_DBGPRT_ERR("i2s master do afsel config error!");
  619. return;
  620. }
  621. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  622. }
  623. void wm_i2s_di_config(enum tls_io_name io_name)
  624. {
  625. switch(io_name)
  626. {
  627. case WM_IO_PA_07:
  628. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  629. break;
  630. case WM_IO_PB_10:
  631. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  632. break;
  633. case WM_IO_PA_11:
  634. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  635. break;
  636. case WM_IO_PB_15:
  637. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  638. break;
  639. default:
  640. TLS_DBGPRT_ERR("i2s slave di afsel config error!");
  641. return;
  642. }
  643. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  644. }
  645. void wm_i2s_mclk_config(enum tls_io_name io_name)
  646. {
  647. switch(io_name)
  648. {
  649. case WM_IO_PA_00:
  650. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  651. break;
  652. case WM_IO_PA_07:
  653. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  654. break;
  655. case WM_IO_PB_17:
  656. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  657. break;
  658. default:
  659. TLS_DBGPRT_ERR("i2s mclk afsel config error!");
  660. return;
  661. }
  662. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  663. }
  664. void wm_i2s_extclk_config(enum tls_io_name io_name)
  665. {
  666. switch(io_name)
  667. {
  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 extclk afsel config error!");
  676. return;
  677. }
  678. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2S);
  679. }
  680. void wm_i2c_scl_config(enum tls_io_name io_name)
  681. {
  682. switch(io_name)
  683. {
  684. case WM_IO_PA_01:
  685. tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  686. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  687. break;
  688. case WM_IO_PB_20:
  689. tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  690. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  691. break;
  692. default:
  693. TLS_DBGPRT_ERR("i2c scl afsel config error!");
  694. return;
  695. }
  696. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2C);
  697. }
  698. void wm_i2c_sda_config(enum tls_io_name io_name)
  699. {
  700. switch(io_name)
  701. {
  702. case WM_IO_PA_04:
  703. tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  704. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  705. break;
  706. case WM_IO_PB_19:
  707. tls_gpio_cfg(io_name, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
  708. tls_io_cfg_set(io_name, WM_IO_OPTION4);
  709. break;
  710. default:
  711. TLS_DBGPRT_ERR("i2c sda afsel config error!");
  712. return;
  713. }
  714. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_I2C);
  715. }
  716. void wm_pwm0_config(enum tls_io_name io_name)
  717. {
  718. switch(io_name)
  719. {
  720. case WM_IO_PB_00:
  721. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  722. break;
  723. case WM_IO_PB_19:
  724. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  725. break;
  726. case WM_IO_PB_12:
  727. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  728. break;
  729. case WM_IO_PA_02:
  730. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  731. break;
  732. case WM_IO_PA_10:
  733. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  734. break;
  735. default:
  736. TLS_DBGPRT_ERR("pwm0 afsel config error!");
  737. return;
  738. }
  739. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  740. }
  741. void wm_pwm1_config(enum tls_io_name io_name)
  742. {
  743. switch(io_name)
  744. {
  745. case WM_IO_PB_01:
  746. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  747. break;
  748. case WM_IO_PB_20:
  749. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  750. break;
  751. case WM_IO_PA_03:
  752. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  753. break;
  754. case WM_IO_PA_11:
  755. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  756. break;
  757. case WM_IO_PB_13:
  758. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  759. break;
  760. default:
  761. TLS_DBGPRT_ERR("pwm1 afsel config error!");
  762. return;
  763. }
  764. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  765. }
  766. void wm_pwm2_config(enum tls_io_name io_name)
  767. {
  768. switch(io_name)
  769. {
  770. case WM_IO_PA_00:
  771. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  772. break;
  773. case WM_IO_PB_02:
  774. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  775. break;
  776. case WM_IO_PA_12:
  777. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  778. break;
  779. case WM_IO_PB_14:
  780. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  781. break;
  782. case WM_IO_PB_24:
  783. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  784. break;
  785. default:
  786. TLS_DBGPRT_ERR("pwm2 afsel config error!");
  787. return;
  788. }
  789. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  790. }
  791. void wm_pwm3_config(enum tls_io_name io_name)
  792. {
  793. switch(io_name)
  794. {
  795. case WM_IO_PA_01:
  796. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  797. break;
  798. case WM_IO_PB_03:
  799. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  800. break;
  801. case WM_IO_PA_13:
  802. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  803. break;
  804. case WM_IO_PB_15:
  805. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  806. break;
  807. case WM_IO_PB_25:
  808. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  809. break;
  810. default:
  811. TLS_DBGPRT_ERR("pwm3 afsel config error!");
  812. return;
  813. }
  814. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  815. }
  816. void wm_pwm4_config(enum tls_io_name io_name)
  817. {
  818. switch(io_name)
  819. {
  820. case WM_IO_PA_04:
  821. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  822. break;
  823. case WM_IO_PA_07:
  824. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  825. break;
  826. case WM_IO_PA_14:
  827. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  828. break;
  829. case WM_IO_PB_16:
  830. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  831. break;
  832. case WM_IO_PB_26:
  833. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  834. break;
  835. default:
  836. TLS_DBGPRT_ERR("pwm4 afsel config error!");
  837. return;
  838. }
  839. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  840. }
  841. void wm_pwmbrk_config(enum tls_io_name io_name)
  842. {
  843. switch(io_name)
  844. {
  845. case WM_IO_PB_08:
  846. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  847. break;
  848. case WM_IO_PA_05:
  849. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  850. break;
  851. case WM_IO_PA_08:
  852. tls_io_cfg_set(io_name, WM_IO_OPTION1);
  853. break;
  854. case WM_IO_PA_15:
  855. tls_io_cfg_set(io_name, WM_IO_OPTION3);
  856. break;
  857. case WM_IO_PB_17:
  858. tls_io_cfg_set(io_name, WM_IO_OPTION2);
  859. break;
  860. default:
  861. TLS_DBGPRT_ERR("pwmbrk afsel config error!");
  862. return;
  863. }
  864. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PWM);
  865. }
  866. void wm_swd_config(bool enable)
  867. {
  868. if (enable)
  869. {
  870. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION1);
  871. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION1);
  872. }
  873. else
  874. {
  875. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION5);
  876. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION5);
  877. }
  878. }
  879. void wm_adc_config(u8 Channel)
  880. {
  881. switch(Channel)
  882. {
  883. case 0:
  884. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION6);
  885. break;
  886. case 1:
  887. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION6);
  888. break;
  889. case 2:
  890. tls_io_cfg_set(WM_IO_PA_03, WM_IO_OPTION6);
  891. break;
  892. case 3:
  893. tls_io_cfg_set(WM_IO_PA_02, WM_IO_OPTION6);
  894. break;
  895. default:
  896. return;
  897. }
  898. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_SDADC);
  899. }
  900. void wm_touch_sensor_config(enum tls_io_name io_name)
  901. {
  902. switch(io_name)
  903. {
  904. case WM_IO_PA_07: /*touch sensor 1*/
  905. case WM_IO_PA_09: /*touch sensor 2*/
  906. case WM_IO_PA_10: /*touch sensor 3*/
  907. case WM_IO_PB_00: /*touch sensor 4*/
  908. case WM_IO_PB_01: /*touch sensor 5*/
  909. case WM_IO_PB_02: /*touch sensor 6*/
  910. case WM_IO_PB_03: /*touch sensor 7*/
  911. case WM_IO_PB_04: /*touch sensor 8*/
  912. case WM_IO_PB_05: /*touch sensor 9*/
  913. case WM_IO_PB_06: /*touch sensor 10*/
  914. case WM_IO_PB_07: /*touch sensor 11*/
  915. case WM_IO_PB_08: /*touch sensor 12*/
  916. case WM_IO_PB_09: /*touch sensor 13*/
  917. case WM_IO_PA_12: /*touch sensor 14*/
  918. case WM_IO_PA_14: /*touch sensor 15*/
  919. tls_io_cfg_set(io_name, WM_IO_OPTION7);
  920. break;
  921. default:
  922. return;
  923. }
  924. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_TOUCH_SENSOR);
  925. }
  926. void wm_gpio_af_disable(void)
  927. {
  928. tls_reg_write32(HR_GPIOA_DATA_DIR, 0x0);
  929. tls_reg_write32(HR_GPIOB_DATA_DIR, 0x0);
  930. #if WM_SWD_ENABLE
  931. tls_reg_write32(HR_GPIOA_AFSEL, 0x12); /*PA1:JTAG_CK,PA4:JTAG_SWO*/
  932. #else
  933. tls_reg_write32(HR_GPIOA_AFSEL, 0x0);
  934. #endif
  935. tls_reg_write32(HR_GPIOB_AFSEL, 0x0);
  936. tls_reg_write32(HR_GPIOA_DATA_PULLEN, 0xffff);
  937. tls_reg_write32(HR_GPIOB_DATA_PULLEN, 0xffffffff);
  938. }