1 FlexIO 是什麼?
Flex IO 是可以自行規劃如何動作的 IO,是以 Timer 和 Trigger 的結合,透過不同的組合,來做出想要的波形。MCX-N236 的 FlexIO 配置「如圖 1.1 ( 註1 ) 」

圖 1.1
2 FlexIO 方塊圖

3 如何新增 FlexIO UART
先做一個簡易的 UART Tx 的話,需要如何規劃呢 ? 只有一個 Tx pin ,就只需要使用一個 FlexIO ,以 Timer 來配合,來做出 Start ,Tx Data and Stop 波形,就可以完成 UART Tx 的模擬了。
需要設定通常是這4個 reigtser
FlexIO SHIFTCFGn register 的配置「如圖 3.1~3.2 ( 註1 ) 」
FlexIO TIMCFGn register 的配置「如圖 3.3~3.4 ( 註1 ) 」
FlexIO TIMCTLn register 的配置「如圖 3.5~3.7 ( 註1 ) 」
FlexIO TIMCMPn register 的配置「如圖 3.8 ( 註1 ) 」
首先 UART 需要設定 Baud rate,以 9600 為例 ,1bit 的時間為 1/9600 = 104.167us
若是 115200 ,1bit 的時間為 1/115200 = 8.68us
,若 Clock Source 是使用 FRO_HF (96Mhz)
9600_TimeDIV = 96000000/9600 = 10000
115200_TimeDIV = 96000000 / 115200 = 833.33
UART Start Bit 為0 , 且 Stop Bit 為1 =>SHIFTCFGn 要設成0x0000 0032
UART TX is output ,and Transmit mode => SHIFTCTLn = 0x0003 0002 (若使用 D0 ,配置請參考「如圖 1.1 ( 註1 ) 」)
若是TX使用 D8 ,PinSel (Bit8~12) 要設成8 ,則 SHIFTCTLn要設成 0x0003 0802
UART start bit, stop bit, enable on trigger and disable on compare.
=>TIMCFGn = 0x0000 2222
UART is dual (TX/RX) 8-bit data using the shifter 0 status flag as an inverted internal trigger source( Data low trigger ),no Timer/Clock pin
=> TIMCTLn = 0x01C0 0001 (若使用 D0)
若是TX使用 D8 ,PinSel (Bit8~12) 要設成8 ,則 TIMCTLn要設成 0x01C0 0801
9600_TIMCMP[15:8] = (number bit *2) – 1 = 8*2 -1 =15
9600_TIMCMP[7:0] = (9600_TimeDIV /2) – 1 = 4/2 -1 =1
115200_TIMCMP[15:8] = (number bit *2) – 1 = 8*2 -1 =15
115200_TIMCMP[7:0] = (115200_TimeDIV /2) – 1 = 4/2 -1 =1



圖 3.3

圖 3.4

圖 3.5
圖 3.6

圖 3.7

註1 : 作者: NXP原廠;出處 : https://www.nxp.com/webapp/Download?colCode=MCXN23xRM
評論