做外貿(mào)網(wǎng)站效果站長(zhǎng)是什么級(jí)別
RX系列單片機(jī)的GPIO初始化
- 與IO口相關(guān)的寄存器
- 端口(PORT)寄存器
- 端口功能控制(MPC)寄存器
- MPC.PmnFPS的設(shè)置過(guò)程
- MPC寄存器設(shè)置注意事項(xiàng)
- 端口Pmn的初始化
- 不同端口模式下,PORT、MCP寄存器的配置順序
- 感想:與STM32 GPIO配置的對(duì)比
以RX66T單片機(jī)和RX130單片機(jī)為例。
與IO口相關(guān)的寄存器
端口的配置,就是寫(xiě)入端口配置相關(guān)寄存器的過(guò)程。
就瑞薩RX系列單片機(jī)而言,包括PORT寄存器和MPC寄存器。
端口(PORT)寄存器
- PDR:GPIO方向寄存器,讀/寫(xiě)型
1:輸出
0:輸入(默認(rèn)值)
PORTm.PDR.BITn對(duì)應(yīng)Pmn。
有些端口只內(nèi)建了輸入邏輯門(mén)電路,即便將其PDR位設(shè)置為1,也是無(wú)效的。
不存在的端口只可配置PDR(目的:省電),至于①哪些端口不存在、②PDR該配置成0還是1,就要參考目標(biāo)單片機(jī)的數(shù)據(jù)手冊(cè)“Initialization of the Port Direction Register (PDR)”章節(jié)。
-
PODR:GPIO輸出電平寄存器,讀/寫(xiě)型
1:輸出H
0:輸出L(默認(rèn)值)
PORTm.PODR.BITn對(duì)應(yīng)Pmn。
有些端口只內(nèi)建了輸入邏輯門(mén)電路,即便將其PODR位設(shè)置為1,也不能輸出。 -
PIDR:端口輸入電平寄存器,只讀型
1:輸入了H
0:輸入了L
PORTm.PIDR.BITn對(duì)應(yīng)Pmn。
不論P(yáng)mn的PDR位和PMR位如何設(shè)置,只要其MPC寄存器沒(méi)有被配置為模擬模式(0x80),Pmn的瞬時(shí)輸入電平就總能通過(guò)PIDR讀出。 -
PMR:端口模式寄存器,讀/寫(xiě)型
1:外設(shè)模式
0:GPIO模式(默認(rèn)值)
PORTm.PMR.BITn對(duì)應(yīng)Pmn。 -
ODRy(y = 0, 1):端口開(kāi)漏寄存器,讀/寫(xiě)型
1:CMOS輸出
0:NMOS開(kāi)漏輸出(默認(rèn)值)
PORTm.ODR0/1.BITx與Pmn的對(duì)應(yīng)關(guān)系是
PORTm.ODR0 | BIT6 | BIT4 | BIT2 | BIT0 |
---|---|---|---|---|
Pmn | Pm3 | Pm2 | Pm1 | Pm0 |
PORTm.ODR1 | BIT6 | BIT4 | BIT2 | BIT0 |
Pmn | Pm7 | Pm6 | Pm5 | Pm4 |
-
PCR:端口輸入上拉寄存器,讀/寫(xiě)型
1:有內(nèi)部上拉
0:無(wú)內(nèi)部上拉(默認(rèn)值)
PORTm.PCR.BITn對(duì)應(yīng)Pmn。
如果端口設(shè)置為外部總線端口(WAIT端口除外)、通用輸出口,外設(shè)輸出口,那么PCR的設(shè)置是無(wú)效的。
不存在端口不可配置PCR位,必須保留默認(rèn)值0。 -
暫時(shí)不表:DSCR,DSCR2:端口驅(qū)動(dòng)能力寄存器
端口功能控制(MPC)寄存器
-
PWPR:MPC寫(xiě)保護(hù)寄存器,讀/寫(xiě)型
BIT7:PFSWE寫(xiě)保護(hù)位 0:可寫(xiě)入 1:不可寫(xiě)入
BIT6:FPS寫(xiě)保護(hù)位 0:可寫(xiě)入 1:不可寫(xiě)入
其它:保留位,必須保留默認(rèn)值0。 -
FPS:端口功能寄存器,讀/寫(xiě)型
BIT7:ASEL,模擬功能選擇位
BIT6:ISEL,EXTI功能選擇位
BIT5~0:PSEL,外設(shè)功能選擇位
MPC.PmnFPS對(duì)應(yīng)Pmn。
不同Pmn的上述BIT支持情況不同,應(yīng)參考目標(biāo)單片機(jī)的數(shù)據(jù)手冊(cè)“Multi-Function Pin Controller (MPC)–Register Descriptions”章節(jié)。不支持的BIT位不可設(shè)定,必須保留默認(rèn)值0。 -
暫時(shí)不表:PFCSE
-
暫時(shí)不表:PFCSS0
-
暫時(shí)不表:PFAOE0、PFAOE1
-
暫時(shí)不表:PFBCR0、PFBCR1、PFBCR2、PFBCR4
MPC.PmnFPS的設(shè)置過(guò)程
- 復(fù)位PMR位
- 設(shè)定外設(shè)端口的輸入/輸出方向
- 關(guān)閉FPS寫(xiě)保護(hù)
- 整體寫(xiě)入PmnFPS
- 打開(kāi)FPS寫(xiě)保護(hù)
- 根據(jù)需要,置位PMR位
MPC寄存器設(shè)置注意事項(xiàng)
- 設(shè)置PmnFPS前,必須確保Pmn的PMR為0;否則,會(huì)有不可預(yù)料的信號(hào)在Pmn輸入或輸出。
- PmnFPS的設(shè)定值必須參照芯片手冊(cè)。如果寫(xiě)入值超出手冊(cè)的范圍,則不能保證寫(xiě)入操作的正確性。
- 不能把同一個(gè)外設(shè)功能分配給多個(gè)引腳。比如一個(gè)UART只能有1個(gè)TX通道,不能有多個(gè)TX通道。
- 凡是模擬模式端口,要先設(shè)置為普通輸入(先令PORTm.PMR.BITn=0,后令PORTm.PDR.BITn=0),再令PmnFPS的ASEL位為1(MPC.PmnFPS=0x80),以避免精度下降。
- PMR、PDR、PmnFPS的組合是有限的,如下:
狀態(tài) | PMR | PDR | FPS.ASEL | FPS.ISEL | FPS.PSEL | 注意 |
---|---|---|---|---|---|---|
復(fù)位后 | 0 | 0 | 0 | 0 | 000000b | 復(fù)位后端口是普通輸入口 |
普通輸入 | 0 | 0 | 0 | 0/1 | x | |
普通輸出 | 0 | 1 | 0 | 0 | x | |
外設(shè)功能 | 1 | x | 0 | 0/1 | 外設(shè)功能 | |
中斷輸入 | 1 | 0 | 0 | 1 | x | |
不可屏蔽中斷 | x | x | x | x | x | |
模擬模式 | 0 | 0 | 1 | x | x | |
觸摸 | 1 | 0 | 0 | 0 | 11001b | 可當(dāng)作一種外設(shè)功能 |
EXTAL/XTAL | 0 | 0 | x | x | x |
注:x表示不需要設(shè)定,推薦保留0。
端口Pmn的初始化
參考意法半導(dǎo)體STM8S單片機(jī)的標(biāo)準(zhǔn)庫(kù)函數(shù)來(lái)設(shè)計(jì),端口初始化函數(shù)提供3個(gè)參數(shù)
分別是目標(biāo)端口編號(hào),端口模式,端口MPC設(shè)置
void GPIO_Init(gpio_pin_t pin, gpio_mode_t mode, uint8_t mpc_config);
//pin: 想要設(shè)定的端口序號(hào)Pmn
//mode: 要設(shè)定的端口模式
//mpc_config:要設(shè)定的PmnFPS
注意:PmnFPS需要在MPC解鎖時(shí)才可寫(xiě)入
不同端口模式下,PORT、MCP寄存器的配置順序
- 設(shè)置為復(fù)位后的狀態(tài)
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
設(shè)定值 | 0 | 0 | 0 | 0 | 0x00 | - |
- 設(shè)置為浮空輸入&無(wú)中斷
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
設(shè)定值 | 0 | 0 | 0 | 0 | 0x00 | - |
- 設(shè)置為上拉輸入&無(wú)中斷
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
設(shè)定值 | 0 | 0 | 0 | 1 | 0x00 | - |
- 設(shè)置為普通輸出H
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
設(shè)定值 | 0 | 1 | 1 | 0 | 0x00 | - |
- 設(shè)置為普通輸出L
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
設(shè)定值 | 0 | 0 | 1 | 0 | 0x00 | - |
- 設(shè)置為外設(shè)功能
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
設(shè)定值 | 0 | 0 | 0 | 0 | 查表 | 1 |
- 設(shè)置為模擬模式
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
設(shè)定值 | 0 | 0 | 0 | 0 | 0x80 | - |
※1:"-"表示跳過(guò)
※2:應(yīng)按照表格中從左到右的順序設(shè)置寄存器
感想:與STM32 GPIO配置的對(duì)比
- 比照STM32,RX的PMR設(shè)置,相當(dāng)于32上設(shè)置AFIO。
- RX比STM32的端口設(shè)置多了MPC,即“IO掛靠在哪個(gè)外設(shè)上”的設(shè)置。
- 在RX上,當(dāng)某端口作為UART-TX功能時(shí),在發(fā)送空閑時(shí),似乎要設(shè)置它為普通輸出H,才能保證空閑時(shí)TX線路維持高電平(很離譜?)