fiopad_config.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. /*
  2. * Copyright : (C) 2022 Phytium Information Technology, Inc.
  3. * All Rights Reserved.
  4. *
  5. * This program is OPEN SOURCE software: you can redistribute it and/or modify it
  6. * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
  7. * either version 1.0 of the License, or (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
  10. * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. * See the Phytium Public License for more details.
  12. *
  13. *
  14. * FilePath: fiopad_config.c
  15. * Date: 2022-02-10 14:53:42
  16. * LastEditTime: 2022-02-18 08:25:29
  17. * Description:  This files is for io-pad function definition
  18. *
  19. * Modify History:
  20. * Ver   Who        Date         Changes
  21. * ----- ------     --------    --------------------------------------
  22. * 1.0 huanghe 2021/11/5 init commit
  23. * 1.1 zhugengyu 2022/3/21 adopt to lastest tech spec.
  24. */
  25. /***************************** Include Files *********************************/
  26. #include "fiopad.h"
  27. #include "fparameters.h"
  28. #include "fdebug.h"
  29. #include "fpinctrl.h"
  30. #include "fassert.h"
  31. /************************** Constant Definitions *****************************/
  32. /**************************** Type Definitions *******************************/
  33. /***************** Macros (Inline Functions) Definitions *********************/
  34. #define FIOPAD_DEBUG_TAG "FIOPAD-CFG"
  35. #define FIOPAD_ERROR(format, ...) FT_DEBUG_PRINT_E(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__)
  36. #define FIOPAD_WARN(format, ...) FT_DEBUG_PRINT_W(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__)
  37. #define FIOPAD_INFO(format, ...) FT_DEBUG_PRINT_I(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__)
  38. #define FIOPAD_DEBUG(format, ...) FT_DEBUG_PRINT_D(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__)
  39. /************************** Function Prototypes ******************************/
  40. /*****************************************************************************/
  41. /**
  42. * @name: FIOPadSetSpimMux
  43. * @msg: set iopad mux for spim
  44. * @return {*}
  45. * @param {u32} spim_id, instance id of spi
  46. */
  47. void FIOPadSetSpimMux(u32 spim_id)
  48. {
  49. if (FSPI2_ID == spim_id)
  50. {
  51. FPinSetFunc(FIOPAD_A29, FPIN_FUNC0); /* sclk */
  52. FPinSetFunc(FIOPAD_C29, FPIN_FUNC0); /* txd */
  53. FPinSetFunc(FIOPAD_C27, FPIN_FUNC0); /* rxd */
  54. FPinSetFunc(FIOPAD_A27, FPIN_FUNC0); /* csn0 */
  55. }
  56. }
  57. /**
  58. * @name: FIOPadSetGpioMux
  59. * @msg: set iopad mux for gpio
  60. * @return {*}
  61. * @param {u32} gpio_id, instance id of gpio
  62. * @param {u32} pin_id, index of pin
  63. */
  64. void FIOPadSetGpioMux(u32 gpio_id, u32 pin_id)
  65. {
  66. if (FGPIO_ID_3 == gpio_id)
  67. {
  68. switch (pin_id)
  69. {
  70. case 3: /* gpio 3-a-3 */
  71. FPinSetFunc(FIOPAD_A29, FPIN_FUNC6);
  72. break;
  73. case 4: /* gpio 3-a-4 */
  74. FPinSetFunc(FIOPAD_C29, FPIN_FUNC6);
  75. break;
  76. case 5: /* gpio 3-a-5 */
  77. FPinSetFunc(FIOPAD_C27, FPIN_FUNC6);
  78. break;
  79. case 6: /* gpio 3-a-6 */
  80. FPinSetFunc(FIOPAD_A27, FPIN_FUNC6);
  81. break;
  82. case 7: /* gpio 3-a-7 */ /*cannot use this pin*/
  83. FPinSetFunc(FIOPAD_AJ49, FPIN_FUNC6);
  84. break;
  85. case 8: /* gpio 3-a-8 */
  86. FPinSetFunc(FIOPAD_AL45, FPIN_FUNC6);
  87. break;
  88. case 9: /* gpio 3-a-9 */
  89. FPinSetFunc(FIOPAD_AL43, FPIN_FUNC6);
  90. break;
  91. default:
  92. break;
  93. }
  94. }
  95. }
  96. /**
  97. * @name: FIOPadSetCanMux
  98. * @msg: set iopad mux for can
  99. * @return {*}
  100. * @param {u32} can_id, instance id of can
  101. */
  102. void FIOPadSetCanMux(u32 can_id)
  103. {
  104. if (can_id == FCAN_INSTANCE_0)
  105. {
  106. /* mio0 */
  107. FPinSetFunc(FIOPAD_A37, FPIN_FUNC0); /* can0-tx: func 0 */
  108. FPinSetFunc(FIOPAD_A39, FPIN_FUNC0); /* can0-rx: func 0 */
  109. }
  110. else if (can_id == FCAN_INSTANCE_1)
  111. {
  112. /* mio1 */
  113. FPinSetFunc(FIOPAD_A41, FPIN_FUNC0); /* can1-tx: func 0 */
  114. FPinSetFunc(FIOPAD_C41, FPIN_FUNC0); /* can1-rx: func 0 */
  115. }
  116. else
  117. {
  118. FIOPAD_ERROR("can id is error.\r\n");
  119. }
  120. }
  121. /**
  122. * @name: FIOPadSetQspiMux
  123. * @msg: set iopad mux for qspi
  124. * @return {*}
  125. * @param {u32} qspi_id, id of qspi instance
  126. * @param {u32} cs_id, id of qspi cs
  127. */
  128. void FIOPadSetQspiMux(u32 qspi_id, u32 cs_id)
  129. {
  130. if (qspi_id == FQSPI_INSTANCE_0)
  131. {
  132. /* add sck, io0-io3 iopad multiplex */
  133. }
  134. if (cs_id == FQSPI_CS_0)
  135. {
  136. FPinSetFunc(FIOPAD_AR51, FPIN_FUNC0);
  137. }
  138. else if (cs_id == FQSPI_CS_1)
  139. {
  140. FPinSetFunc(FIOPAD_AR45, FPIN_FUNC0);
  141. }
  142. else if (cs_id == FQSPI_CS_2)
  143. {
  144. FPinSetFunc(FIOPAD_C33, FPIN_FUNC5);
  145. }
  146. else if (cs_id == FQSPI_CS_3)
  147. {
  148. FPinSetFunc(FIOPAD_A33, FPIN_FUNC5);
  149. }
  150. else
  151. {
  152. FIOPAD_ERROR("can id is error.\r\n");
  153. }
  154. }
  155. /**
  156. * @name: FIOPadSetPwmMux
  157. * @msg: set iopad mux for pwm
  158. * @return {*}
  159. * @param {u32} pwm_id, id of pwm instance
  160. * @param {u32} pwm_channel, channel of pwm instance
  161. */
  162. void FIOPadSetPwmMux(u32 pwm_id, u32 pwm_channel)
  163. {
  164. FASSERT(pwm_id < FPWM_INSTANCE_NUM);
  165. FASSERT(pwm_channel < FPWM_CHANNEL_NUM);
  166. switch (pwm_id)
  167. {
  168. case FPWM_INSTANCE_0:
  169. if (pwm_channel == 0)
  170. {
  171. FPinSetFunc(FIOPAD_AL55, FPIN_FUNC1); /* PWM0_OUT: func 1 */
  172. }
  173. if (pwm_channel == 1)
  174. {
  175. FPinSetFunc(FIOPAD_AJ53, FPIN_FUNC1); /* PWM1_OUT: func 1 */
  176. }
  177. break;
  178. case FPWM_INSTANCE_1:
  179. if (pwm_channel == 0)
  180. {
  181. FPinSetFunc(FIOPAD_AG53, FPIN_FUNC1); /* PWM2_OUT: func 1 */
  182. }
  183. if (pwm_channel == 1)
  184. {
  185. FPinSetFunc(FIOPAD_AC55, FPIN_FUNC1); /* PWM3_OUT: func 1 */
  186. }
  187. break;
  188. case FPWM_INSTANCE_2:
  189. if (pwm_channel == 0)
  190. {
  191. FPinSetFunc(FIOPAD_BA51, FPIN_FUNC1); /* PWM4_OUT: func 1 */
  192. }
  193. if (pwm_channel == 1)
  194. {
  195. FPinSetFunc(FIOPAD_C35, FPIN_FUNC2); /* PWM5_OUT: func 2 */
  196. }
  197. break;
  198. case FPWM_INSTANCE_3:
  199. if (pwm_channel == 0)
  200. {
  201. FPinSetFunc(FIOPAD_A33, FPIN_FUNC2); /* PWM6_OUT: func 2 */
  202. }
  203. if (pwm_channel == 1)
  204. {
  205. FPinSetFunc(FIOPAD_A39, FPIN_FUNC2); /* PWM7_OUT: func 2 */
  206. }
  207. break;
  208. case FPWM_INSTANCE_4:
  209. if (pwm_channel == 0)
  210. {
  211. FPinSetFunc(FIOPAD_C41, FPIN_FUNC2); /* PWM8_OUT: func 2 */
  212. }
  213. if (pwm_channel == 1)
  214. {
  215. FPinSetFunc(FIOPAD_A45, FPIN_FUNC2); /* PWM9_OUT: func 2 */
  216. }
  217. break;
  218. case FPWM_INSTANCE_5:
  219. if (pwm_channel == 0)
  220. {
  221. FPinSetFunc(FIOPAD_A47, FPIN_FUNC2); /* PWM10_OUT: func 2 */
  222. }
  223. if (pwm_channel == 1)
  224. {
  225. FPinSetFunc(FIOPAD_C29, FPIN_FUNC2); /* PWM11_OUT: func 2 */
  226. }
  227. break;
  228. case FPWM_INSTANCE_6:
  229. if (pwm_channel == 0)
  230. {
  231. FPinSetFunc(FIOPAD_A27, FPIN_FUNC2); /* PWM12_OUT: func 2 */
  232. }
  233. if (pwm_channel == 1)
  234. {
  235. FPinSetFunc(FIOPAD_J35, FPIN_FUNC3); /* PWM13_OUT: func 3 */
  236. }
  237. break;
  238. case FPWM_INSTANCE_7:
  239. if (pwm_channel == 0)
  240. {
  241. FPinSetFunc(FIOPAD_E39, FPIN_FUNC3); /* PWM14_OUT: func 3 */
  242. }
  243. if (pwm_channel == 1)
  244. {
  245. FPinSetFunc(FIOPAD_C39, FPIN_FUNC3); /* PWM15_OUT: func 3 */
  246. }
  247. break;
  248. default:
  249. FIOPAD_ERROR("pwm id is error.\r\n");
  250. break;
  251. }
  252. }
  253. /**
  254. * @name: FIOPadSetAdcMux
  255. * @msg: set iopad mux for adc
  256. * @return {*}
  257. * @param {u32} adc_id, id of adc instance
  258. * @param {u32} adc_channel, id of adc channel
  259. */
  260. void FIOPadSetAdcMux(u32 adc_id, u32 adc_channel)
  261. {
  262. if (adc_id == FADC_INSTANCE_0)
  263. {
  264. switch (adc_channel)
  265. {
  266. case FADC_CHANNEL_0:
  267. FPinSetFunc(FIOPAD_R47, FPIN_FUNC7); /* adc0-0: func 7 */
  268. break;
  269. case FADC_CHANNEL_1:
  270. FPinSetFunc(FIOPAD_R45, FPIN_FUNC7); /* adc0-1: func 7 */
  271. break;
  272. case FADC_CHANNEL_2:
  273. FPinSetFunc(FIOPAD_N47, FPIN_FUNC7); /* adc0-2: func 7 */
  274. break;
  275. case FADC_CHANNEL_3:
  276. FPinSetFunc(FIOPAD_N51, FPIN_FUNC7); /* adc0-3: func 7 */
  277. break;
  278. case FADC_CHANNEL_4:
  279. FPinSetFunc(FIOPAD_L51, FPIN_FUNC7); /* adc0-4: func 7 */
  280. break;
  281. case FADC_CHANNEL_5:
  282. FPinSetFunc(FIOPAD_J51, FPIN_FUNC7); /* adc0-5: func 7 */
  283. break;
  284. case FADC_CHANNEL_6:
  285. FPinSetFunc(FIOPAD_J41, FPIN_FUNC7); /* adc0-6: func 7 */
  286. break;
  287. case FADC_CHANNEL_7:
  288. FPinSetFunc(FIOPAD_E43, FPIN_FUNC7); /* adc0-7: func 7 */
  289. break;
  290. default:
  291. FIOPAD_ERROR("adc %d channel %d is error.\r\n", adc_id, adc_channel);
  292. break;
  293. }
  294. }
  295. else if (adc_id == FADC_INSTANCE_1)
  296. {
  297. switch (adc_channel)
  298. {
  299. case FADC_CHANNEL_0:
  300. FPinSetFunc(FIOPAD_G43, FPIN_FUNC7); /* adc1-0: func 7 */
  301. break;
  302. case FADC_CHANNEL_1:
  303. FPinSetFunc(FIOPAD_J43, FPIN_FUNC7); /* adc1-1: func 7 */
  304. break;
  305. case FADC_CHANNEL_2:
  306. FPinSetFunc(FIOPAD_J45, FPIN_FUNC7); /* adc1-2: func 7 */
  307. break;
  308. case FADC_CHANNEL_3:
  309. FPinSetFunc(FIOPAD_N45, FPIN_FUNC7); /* adc1-3: func 7 */
  310. break;
  311. case FADC_CHANNEL_4:
  312. FPinSetFunc(FIOPAD_L47, FPIN_FUNC7); /* adc1-4: func 7 */
  313. break;
  314. case FADC_CHANNEL_5:
  315. FPinSetFunc(FIOPAD_L45, FPIN_FUNC7); /* adc1-5: func 7 */
  316. break;
  317. case FADC_CHANNEL_6:
  318. FPinSetFunc(FIOPAD_N49, FPIN_FUNC7); /* adc1-6: func 7 */
  319. break;
  320. case FADC_CHANNEL_7:
  321. FPinSetFunc(FIOPAD_J49, FPIN_FUNC7); /* adc1-7: func 7 */
  322. break;
  323. default:
  324. FIOPAD_ERROR("adc %d channel %d is error.\r\n", adc_id, adc_channel);
  325. break;
  326. }
  327. }
  328. else
  329. {
  330. FIOPAD_ERROR("adc %d channel %d is error.\r\n", adc_id, adc_channel);
  331. }
  332. }
  333. /**
  334. * @name: FIOPadSetMioMux
  335. * @msg: set iopad mux for mio
  336. * @return {*}
  337. * @param {u32} mio_id, instance id of i2c
  338. */
  339. void FIOPadSetMioMux(u32 mio_id)
  340. {
  341. switch (mio_id)
  342. {
  343. case MIO_INSTANCE_0:
  344. {
  345. FPinSetFunc(FIOPAD_A37, FPIN_FUNC5); /* scl */
  346. FPinSetFunc(FIOPAD_A39, FPIN_FUNC5); /* sda */
  347. }
  348. break;
  349. case MIO_INSTANCE_1:
  350. {
  351. FPinSetFunc(FIOPAD_A41, FPIN_FUNC5); /* scl */
  352. FPinSetFunc(FIOPAD_C41, FPIN_FUNC5); /* sda */
  353. }
  354. break;
  355. case MIO_INSTANCE_2:
  356. {
  357. FPinSetFunc(FIOPAD_A43, FPIN_FUNC5); /* scl */
  358. FPinSetFunc(FIOPAD_A45, FPIN_FUNC5); /* sda */
  359. }
  360. break;
  361. case MIO_INSTANCE_3:
  362. {
  363. FPinSetFunc(FIOPAD_BA51, FPIN_FUNC4); /* scl */
  364. FPinSetFunc(FIOPAD_BA49, FPIN_FUNC4); /* sda */
  365. }
  366. break;
  367. case MIO_INSTANCE_4:
  368. {
  369. FPinSetFunc(FIOPAD_R55, FPIN_FUNC4); /* scl */
  370. FPinSetFunc(FIOPAD_U55, FPIN_FUNC4); /* sda */
  371. }
  372. break;
  373. case MIO_INSTANCE_5:
  374. {
  375. FPinSetFunc(FIOPAD_W45, FPIN_FUNC4); /* scl */
  376. FPinSetFunc(FIOPAD_U53, FPIN_FUNC4); /* sda */
  377. }
  378. break;
  379. case MIO_INSTANCE_6:
  380. {
  381. FPinSetFunc(FIOPAD_AA53, FPIN_FUNC4); /* scl */
  382. FPinSetFunc(FIOPAD_AA55, FPIN_FUNC4); /* sda */
  383. }
  384. break;
  385. case MIO_INSTANCE_7:
  386. {
  387. FPinSetFunc(FIOPAD_A35, FPIN_FUNC4); /* scl */
  388. FPinSetFunc(FIOPAD_C35, FPIN_FUNC4); /* sda */
  389. }
  390. break;
  391. case MIO_INSTANCE_8:
  392. {
  393. FPinSetFunc(FIOPAD_AA45, FPIN_FUNC4); /* scl */
  394. FPinSetFunc(FIOPAD_W45, FPIN_FUNC4); /* sda */
  395. }
  396. break;
  397. case MIO_INSTANCE_9:
  398. {
  399. FPinSetFunc(FIOPAD_AA47, FPIN_FUNC4); /* scl */
  400. FPinSetFunc(FIOPAD_U45, FPIN_FUNC4); /* sda */
  401. }
  402. break;
  403. case MIO_INSTANCE_10:
  404. {
  405. FPinSetFunc(FIOPAD_C45, FPIN_FUNC5); /* scl */
  406. FPinSetFunc(FIOPAD_A47, FPIN_FUNC5); /* sda */
  407. }
  408. break;
  409. case MIO_INSTANCE_11:
  410. {
  411. FPinSetFunc(FIOPAD_N23, FPIN_FUNC3); /* scl */
  412. FPinSetFunc(FIOPAD_L25, FPIN_FUNC3); /* sda */
  413. }
  414. break;
  415. case MIO_INSTANCE_12:
  416. {
  417. FPinSetFunc(FIOPAD_E37, FPIN_FUNC3); /* scl */
  418. FPinSetFunc(FIOPAD_L41, FPIN_FUNC3); /* sda */
  419. }
  420. break;
  421. case MIO_INSTANCE_13:
  422. {
  423. FPinSetFunc(FIOPAD_J45, FPIN_FUNC6); /* scl */
  424. FPinSetFunc(FIOPAD_N45, FPIN_FUNC6); /* sda */
  425. }
  426. break;
  427. case MIO_INSTANCE_14:
  428. {
  429. FPinSetFunc(FIOPAD_L47, FPIN_FUNC6); /* scl */
  430. FPinSetFunc(FIOPAD_L45, FPIN_FUNC6); /* sda */
  431. }
  432. break;
  433. case MIO_INSTANCE_15:
  434. {
  435. FPinSetFunc(FIOPAD_N49, FPIN_FUNC6); /* scl */
  436. FPinSetFunc(FIOPAD_J49, FPIN_FUNC6); /* sda */
  437. }
  438. break;
  439. default:
  440. break;
  441. }
  442. }
  443. /**
  444. * @name: FIOPadSetTachoMux
  445. * @msg: set iopad mux for pwm_in
  446. * @return {*}
  447. * @param {u32} pwm_in_id, instance id of tacho
  448. */
  449. void FIOPadSetTachoMux(u32 pwm_in_id)
  450. {
  451. switch (pwm_in_id)
  452. {
  453. case TACHO_INSTANCE_0:
  454. FPinSetFunc(FIOPAD_AN53, FPIN_FUNC1);
  455. break;
  456. case TACHO_INSTANCE_1:
  457. FPinSetFunc(FIOPAD_AJ55, FPIN_FUNC1);
  458. break;
  459. case TACHO_INSTANCE_2:
  460. FPinSetFunc(FIOPAD_AG55, FPIN_FUNC1);
  461. break;
  462. case TACHO_INSTANCE_3:
  463. FPinSetFunc(FIOPAD_AE55, FPIN_FUNC1);
  464. break;
  465. case TACHO_INSTANCE_4:
  466. FPinSetFunc(FIOPAD_AC53, FPIN_FUNC1);
  467. break;
  468. case TACHO_INSTANCE_5:
  469. FPinSetFunc(FIOPAD_BA49, FPIN_FUNC1);
  470. break;
  471. case TACHO_INSTANCE_6:
  472. FPinSetFunc(FIOPAD_C33, FPIN_FUNC2);
  473. break;
  474. case TACHO_INSTANCE_7:
  475. FPinSetFunc(FIOPAD_A37, FPIN_FUNC2);
  476. break;
  477. case TACHO_INSTANCE_8:
  478. FPinSetFunc(FIOPAD_A41, FPIN_FUNC2);
  479. break;
  480. case TACHO_INSTANCE_9:
  481. FPinSetFunc(FIOPAD_A43, FPIN_FUNC2);
  482. break;
  483. case TACHO_INSTANCE_10:
  484. FPinSetFunc(FIOPAD_C45, FPIN_FUNC2);
  485. break;
  486. case TACHO_INSTANCE_11:
  487. FPinSetFunc(FIOPAD_A29, FPIN_FUNC2);
  488. break;
  489. case TACHO_INSTANCE_12:
  490. FPinSetFunc(FIOPAD_C27, FPIN_FUNC2);
  491. break;
  492. case TACHO_INSTANCE_13:
  493. FPinSetFunc(FIOPAD_AA45, FPIN_FUNC2);
  494. break;
  495. case TACHO_INSTANCE_14:
  496. FPinSetFunc(FIOPAD_AA47, FPIN_FUNC2);
  497. break;
  498. case TACHO_INSTANCE_15:
  499. FPinSetFunc(FIOPAD_G55, FPIN_FUNC2);
  500. break;
  501. default:
  502. break;
  503. }
  504. }
  505. /**
  506. * @name: FIOPadSetUartMux
  507. * @msg: set iopad mux for uart
  508. * @return {*}
  509. * @param {u32} uart_id, instance id of uart
  510. */
  511. void FIOPadSetUartMux(u32 uart_id)
  512. {
  513. switch (uart_id)
  514. {
  515. case FUART0_ID:
  516. FPinSetFunc(FIOPAD_J33, FPIN_FUNC4);
  517. FPinSetFunc(FIOPAD_J35, FPIN_FUNC4);
  518. break;
  519. case FUART1_ID:
  520. FPinSetFunc(FIOPAD_AW47, FPIN_FUNC0);
  521. FPinSetFunc(FIOPAD_AU47, FPIN_FUNC0);
  522. break;
  523. case FUART2_ID:
  524. FPinSetFunc(FIOPAD_A43, FPIN_FUNC0);
  525. FPinSetFunc(FIOPAD_A45, FPIN_FUNC0);
  526. break;
  527. case FUART3_ID:
  528. FPinSetFunc(FIOPAD_L33, FPIN_FUNC2);
  529. FPinSetFunc(FIOPAD_N31, FPIN_FUNC2);
  530. break;
  531. default:
  532. break;
  533. }
  534. }