飞思卡尔MC9S12G系列芯片之【GPIO】模块总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LED = ~data; } }
小注:
// 定义无限循环,等价于 while(1)
/*左移一位,注意此处的左移是指 PORTA 寄存器的位进行左移*/
1)注意 PORTA 寄存器各位于 LED 灯的对应关系,如下所示:
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
WOMN 寄存器为 PORTS 和 PORTM 特有的寄存器,不常用。
位数 8
8
端口名称
寄存器种类 数据寄存器(PTT)
PORTT (PT)
#define LED PORTA #define LED_dir DDRA unsigned char data =0x80;
// 宏定义,即用符号变量 LED 代替 PORTA // 定义全局变量,二进制为 1000 0000
void dely () {
unsigned int i, j; for (i=0; i<10; i++) {
2、分类
1)S12G128 共有 100 个 I/O 口,其中通用 I/O 口 84 个,各端口所含寄存器如下 图所示:
小注: 每个端口大部分为复用端口,通过配置相关寄存器可实现 I/O 口与不同模块或 外设之间的数据通信。 2)各端口寄存器名称、位数(含有几个通道口)及常见功能说明如下表所示: 由表 1)可以看出: PORTA~PORTE 端口所含寄存器种类相同; PORTP、PORTJ、PORTAD 三者相同; PORTS、PORTM 两者相同; PORTT 单独为一种类型 按类型进行总结如下:
二、端口详解 1、引脚图
小注:
1)除 BKGD 外,其余引脚都可用作通用的输入输出口。 2)EXTAL(PE0、12 脚):外部晶振(时钟)输入引脚。
3)XTAL(PE1、14 脚):内部晶体驱动输出引脚 4)IRQ(PB4、47 脚):可屏蔽中断(即可由用户控制),芯片接收外部事件中断 的主要手段,低电平或下降沿时产生中断请求。
数据方向寄存器(DDRP) 上拉使能寄存器(PERP) 极性选择寄存器(PPSP)
中断使能寄存器(PIEP)
中断标志寄存器(PIFP)
数据寄存器(PTJ)
输入寄存器(PTIJ)
PORTJ (PJ)
数据方向寄存器(DDRJ) 上拉使能寄存器(PERJ) 极性选择寄存器(PPSJ)
中断使能寄存器(PIEJ)
数据方向寄存器(DDRD) 上拉电阻控制寄存器(PUCR) 数据寄存器(PE)
数据方向寄存器(DDRE) 上拉电阻控制寄存器(PUCR)
寄存器功能
置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 0 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 1 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 2 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 3 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 4 位确定
for(j=0; j<60000; j++);
}
}
// 定义延时函数
// 定义循环变量 // 进行循环嵌套,增加循环次数
/*此处是指 60000 个机器周期,机器周期 =12 时钟周期=12/晶振频率*/
void main ( ) {
DisableInterrupt; LED_dir = 0xff; LED = ~data;
两者的对应关系)。
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8
即寄存器的位与 LED 的排列顺序是相反的,给寄存器赋值时应注意。
端口 名称
寄存器种类 数据寄存器(PTP)
输入寄存器(PTIP)
PORTP (PP)
中断标志寄存器(PIFJ)
小注:
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出引 脚短路条件
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生 置 0:低电平 置 1:高电平 用于检测过载或输出引 脚短路条件
极性选择寄存器 0(PPS0AD)
极性选择寄存器 1(PPS1AD)
中断使能寄存器 0(PIE0AD)
中断使能寄存器 1(PIE1AD)
中断标志寄存器 0(PIF0AD)
中断标志寄存器 1(PIF1AD)
小注:
寄存器功能
置 0:低电平 置 1:高电平 置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件
极性选择寄存器(PPSS) 有线或模式寄存器(WOMM) 数据寄存器(PTM)
输入寄存器(PTIM)
PORTM 数据方向寄存器(DDRM) (PM) 上拉使能寄存器(PERM)
小注:
极性选择寄存器(PPSM) 有线或模式寄存器(WOMM)
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生
位数 8
8
端口 P 和 J 都含有 7 个寄存器,其中与中断有关的寄存器有两个:
中断使能寄存器 PIEx 及中断标志寄存器 PIFx。
输入寄存器(PTIT) 数据方向寄存器(DDRT) 上拉使能寄存器(PERT)
极性选择寄存器(PPST)
3)端口通用功能说明
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
GPIO 模块总结(以 MC9S12G128 为例)
一、常见功能
功能 设置输入/输出端口 设定 I/O 口的高低电平 选择内置上拉/下拉电阻 中断输入方式的选择 驱动能力的设置
需配置寄存器 DDRx(置 0 为输入,置 1 时为输出) PORTx(置 0 低电平、置 1 高电平) PERx PIEX XS128 芯片具有
用于检测过载或输出 引脚短路条件
置 0:输入 置 1:输出 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生 置 0:无极性沿发生 置 1:有极性沿发生
Biblioteka Baidu
位数 8
小注:
端口的使用按照功能优先级进行。
小注:
a:端口的使用按照功能优先级进行; b:PP 端口作为 PWM 模块端口; c:PT 端口作为 TIM 模块端口;
三、代码实例
----以通过 PORTA 端口控制 LED 灯为例 实现功能:让 LED 灯从左往右依次闪烁并循环 #include <hidef.h> #include “derivative.h”
位数 12
a. 由上表可知,G128 可作为中断口的只有 PP、PJ 和 PAD 三个端口;
b. PAD 端口寄存器都为两个原因:
PAD 端口分别为 AD 模块及 KWAD 模块的复用端口
端口 名称
寄存器种类 数据寄存器(PTS)
输入寄存器(PTIS)
PORTS (PS)
数据方向寄存器(DDRS) 上拉使能寄存器(PERS)
位数 8 8 8 8 2
小注: a. 由上表可知,这五个寄存器通过同一个电阻控制寄存器 PUCR 的 0~4 位分别
对应控制端口 A~D;
b. 在学习板中(这是前提,以下模块与寄存器的连接仅限此开发板):
LED 灯是通过 PORTA 寄存器控制,LED1~LED8 分别对应 PORTA 的 P0~P7 位(注意
端口 名称
寄存器种类 数据寄存器 0(PT0AD)
数据寄存器 1(PT1AD)
输入寄存器 0(PTI0AD)
输入寄存器 1(PTI1AD)
数据方向寄存器 0(DDR0AD)
数据方向寄存器 1(DDR1AD)
PORTAD 上拉使能寄存器 0(PER0AD) (PAD) 上拉使能寄存器 1(PER1AD)
端口 名称
PORTA (PA)
PORTB (PB)
PORTC (PC)
PORTD (PD)
PORTE (PE)
寄存器种类
数据寄存器(PA)
数据方向寄存器(DDRA) 上拉电阻控制寄存器(PUCR) 数据寄存器(PB)
数据方向寄存器(DDRB) 上拉电阻控制寄存器(PUCR) 数据寄存器(PC)
数据方向寄存器(DDRC) 上拉电阻控制寄存器(PUCR) 数据寄存器(PD)
EnableInterrupt;
// 定义主函数
// 禁止中断 // 设置 I/O 方向为输出 / *对 data 取反后为 0111 1111,因 LED 在低
电平时发光,故可点亮 LED1*/ // 使能中断
for (; ;) {
delay ( ); data = data <<1;
if ( data == 0 ) data = 0x80;
因此在最初点亮 LED1 后,要想让 LED 从左往右依次闪烁,应配置寄存器从 0 位
往 7 位依次变化,即进行左移操作。
小注:
// 定义无限循环,等价于 while(1)
/*左移一位,注意此处的左移是指 PORTA 寄存器的位进行左移*/
1)注意 PORTA 寄存器各位于 LED 灯的对应关系,如下所示:
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
WOMN 寄存器为 PORTS 和 PORTM 特有的寄存器,不常用。
位数 8
8
端口名称
寄存器种类 数据寄存器(PTT)
PORTT (PT)
#define LED PORTA #define LED_dir DDRA unsigned char data =0x80;
// 宏定义,即用符号变量 LED 代替 PORTA // 定义全局变量,二进制为 1000 0000
void dely () {
unsigned int i, j; for (i=0; i<10; i++) {
2、分类
1)S12G128 共有 100 个 I/O 口,其中通用 I/O 口 84 个,各端口所含寄存器如下 图所示:
小注: 每个端口大部分为复用端口,通过配置相关寄存器可实现 I/O 口与不同模块或 外设之间的数据通信。 2)各端口寄存器名称、位数(含有几个通道口)及常见功能说明如下表所示: 由表 1)可以看出: PORTA~PORTE 端口所含寄存器种类相同; PORTP、PORTJ、PORTAD 三者相同; PORTS、PORTM 两者相同; PORTT 单独为一种类型 按类型进行总结如下:
二、端口详解 1、引脚图
小注:
1)除 BKGD 外,其余引脚都可用作通用的输入输出口。 2)EXTAL(PE0、12 脚):外部晶振(时钟)输入引脚。
3)XTAL(PE1、14 脚):内部晶体驱动输出引脚 4)IRQ(PB4、47 脚):可屏蔽中断(即可由用户控制),芯片接收外部事件中断 的主要手段,低电平或下降沿时产生中断请求。
数据方向寄存器(DDRP) 上拉使能寄存器(PERP) 极性选择寄存器(PPSP)
中断使能寄存器(PIEP)
中断标志寄存器(PIFP)
数据寄存器(PTJ)
输入寄存器(PTIJ)
PORTJ (PJ)
数据方向寄存器(DDRJ) 上拉使能寄存器(PERJ) 极性选择寄存器(PPSJ)
中断使能寄存器(PIEJ)
数据方向寄存器(DDRD) 上拉电阻控制寄存器(PUCR) 数据寄存器(PE)
数据方向寄存器(DDRE) 上拉电阻控制寄存器(PUCR)
寄存器功能
置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 0 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 1 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 2 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 3 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 4 位确定
for(j=0; j<60000; j++);
}
}
// 定义延时函数
// 定义循环变量 // 进行循环嵌套,增加循环次数
/*此处是指 60000 个机器周期,机器周期 =12 时钟周期=12/晶振频率*/
void main ( ) {
DisableInterrupt; LED_dir = 0xff; LED = ~data;
两者的对应关系)。
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8
即寄存器的位与 LED 的排列顺序是相反的,给寄存器赋值时应注意。
端口 名称
寄存器种类 数据寄存器(PTP)
输入寄存器(PTIP)
PORTP (PP)
中断标志寄存器(PIFJ)
小注:
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出引 脚短路条件
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生 置 0:低电平 置 1:高电平 用于检测过载或输出引 脚短路条件
极性选择寄存器 0(PPS0AD)
极性选择寄存器 1(PPS1AD)
中断使能寄存器 0(PIE0AD)
中断使能寄存器 1(PIE1AD)
中断标志寄存器 0(PIF0AD)
中断标志寄存器 1(PIF1AD)
小注:
寄存器功能
置 0:低电平 置 1:高电平 置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件
极性选择寄存器(PPSS) 有线或模式寄存器(WOMM) 数据寄存器(PTM)
输入寄存器(PTIM)
PORTM 数据方向寄存器(DDRM) (PM) 上拉使能寄存器(PERM)
小注:
极性选择寄存器(PPSM) 有线或模式寄存器(WOMM)
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生
位数 8
8
端口 P 和 J 都含有 7 个寄存器,其中与中断有关的寄存器有两个:
中断使能寄存器 PIEx 及中断标志寄存器 PIFx。
输入寄存器(PTIT) 数据方向寄存器(DDRT) 上拉使能寄存器(PERT)
极性选择寄存器(PPST)
3)端口通用功能说明
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
GPIO 模块总结(以 MC9S12G128 为例)
一、常见功能
功能 设置输入/输出端口 设定 I/O 口的高低电平 选择内置上拉/下拉电阻 中断输入方式的选择 驱动能力的设置
需配置寄存器 DDRx(置 0 为输入,置 1 时为输出) PORTx(置 0 低电平、置 1 高电平) PERx PIEX XS128 芯片具有
用于检测过载或输出 引脚短路条件
置 0:输入 置 1:输出 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生 置 0:无极性沿发生 置 1:有极性沿发生
Biblioteka Baidu
位数 8
小注:
端口的使用按照功能优先级进行。
小注:
a:端口的使用按照功能优先级进行; b:PP 端口作为 PWM 模块端口; c:PT 端口作为 TIM 模块端口;
三、代码实例
----以通过 PORTA 端口控制 LED 灯为例 实现功能:让 LED 灯从左往右依次闪烁并循环 #include <hidef.h> #include “derivative.h”
位数 12
a. 由上表可知,G128 可作为中断口的只有 PP、PJ 和 PAD 三个端口;
b. PAD 端口寄存器都为两个原因:
PAD 端口分别为 AD 模块及 KWAD 模块的复用端口
端口 名称
寄存器种类 数据寄存器(PTS)
输入寄存器(PTIS)
PORTS (PS)
数据方向寄存器(DDRS) 上拉使能寄存器(PERS)
位数 8 8 8 8 2
小注: a. 由上表可知,这五个寄存器通过同一个电阻控制寄存器 PUCR 的 0~4 位分别
对应控制端口 A~D;
b. 在学习板中(这是前提,以下模块与寄存器的连接仅限此开发板):
LED 灯是通过 PORTA 寄存器控制,LED1~LED8 分别对应 PORTA 的 P0~P7 位(注意
端口 名称
寄存器种类 数据寄存器 0(PT0AD)
数据寄存器 1(PT1AD)
输入寄存器 0(PTI0AD)
输入寄存器 1(PTI1AD)
数据方向寄存器 0(DDR0AD)
数据方向寄存器 1(DDR1AD)
PORTAD 上拉使能寄存器 0(PER0AD) (PAD) 上拉使能寄存器 1(PER1AD)
端口 名称
PORTA (PA)
PORTB (PB)
PORTC (PC)
PORTD (PD)
PORTE (PE)
寄存器种类
数据寄存器(PA)
数据方向寄存器(DDRA) 上拉电阻控制寄存器(PUCR) 数据寄存器(PB)
数据方向寄存器(DDRB) 上拉电阻控制寄存器(PUCR) 数据寄存器(PC)
数据方向寄存器(DDRC) 上拉电阻控制寄存器(PUCR) 数据寄存器(PD)
EnableInterrupt;
// 定义主函数
// 禁止中断 // 设置 I/O 方向为输出 / *对 data 取反后为 0111 1111,因 LED 在低
电平时发光,故可点亮 LED1*/ // 使能中断
for (; ;) {
delay ( ); data = data <<1;
if ( data == 0 ) data = 0x80;
因此在最初点亮 LED1 后,要想让 LED 从左往右依次闪烁,应配置寄存器从 0 位
往 7 位依次变化,即进行左移操作。