KL26---GPIO 复用

先进行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);
}

今天先学到这

你可能感兴趣的:(KL26---GPIO 复用)