先进行PORT端口的复用:
1.使能时钟
2.清中断
3.进行端口复用
void PORT_init(PTXn_e ptxn, uint32 cfg )
{
SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << PTX(ptxn)); //开启PORTx端口 1.使能PORT时钟
//系统时钟门控寄存器控制A,B,C,D,E的时钟源
PORT_ISFR_REG(PORTX_BASE(ptxn)) = (1<<PTn(ptxn)); // 清空标志位 2.清空中断标志位,写1清0,就是说需要该位置0时,写入1,写入0,没有任何反应,寄存器标志位都是写1清0的。
PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) = cfg; // 复用功能 实现中断触发方式,带无源滤波器,复用功能口,上拉或下拉电阻 3.配置port的各种属性
}
GPIO接口:
1.选定特定的端口
2.配置需要的特定功能
3.设置GPIO输出电压的高低
寄存器操作:
配置寄存器:选定GPIO的特定功能
数据寄存器:保存了GPIO的输入电平或将输入的电平
位控制寄存器:设置某引脚的数据为1或0
锁存寄存器:设定某锁定引脚后,就不能修改配置
void gpio_init (PTXn_e ptxn, GPIO_CFG cfg, uint8 data)
{
//端口方向控制输入还是输出
if( cfg == GPI )
{
//设置端口方向为输入
GPIO_PDDR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn)); // GPIO PDDR 管脚号 清0,即对应管脚配置为端口方向输入
}
else
{
//设置端口方向为输出
GPIO_PDDR_REG(GPIOX_BASE(ptxn)) |= (1 << PTn(ptxn)); // GPIO PDDR 管脚号 置1,即对应管脚配置为端口方向输出
//端口输出数据
if(data == 0)
{
GPIO_PDOR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn)); // GPIO PDOR 管脚号 清0,即对应管脚配置为端口输出低电平
}
else
{
GPIO_PDOR_REG(GPIOX_BASE(ptxn)) |= (1 << PTn(ptxn)); // GPIO PDOR 管脚号 置1,即对应管脚配置为端口输出高电平
}
}
//复用管脚为GPIO功能
port_init( ptxn, ALT1);
}
今天先学到这