PAC_GPIO

项目用用到qorvo的单片机PAC5523,该单片机和ST/GD不一样,基本使用寄存器配置。


GPIOx端口包含8个通用输入输出(GPIO)引脚,即GPIOE0到GPIOE7。

  • 3.3伏输出,耐受3.3伏输入
  • 高阻抗数字输入
  • 推挽式数字输出
  • 开漏式数字输出
  • 可配置的驱动强度最高达25毫安
  • 可配置的输入施密特触发器
  • 可配置的弱上拉或下拉
  • 边沿或电平敏感型中断
  • 上升沿、下降沿或双边沿
  • 时钟同步

寄存器 地址 描述 访问权限 复位值
GPIOEMODE 400D 2400h GPIO引脚模式选择 RW(读写) 0000 FFFFH
GPIOEOUTMASK 400D 2404h GPIO数据输出写掩码 RW(读写) 0000 0000h
GPIOEOUT 400D 2408h GPIO数据输出值 RW(读写) 0000 00FFh
GPIOEIN 400D 240Ch GPIO数据输入值 RO(只读) --
GPIOEINTEN 400D 2410h GPIO中断使能 RW(读写) 0000 0000h
GPIOEINTFLAG 400D 2414h GPIO中断标志 RO(只读) 0000 0000h
GPIOEINTCLEAR 400D 241Ch GPIO中断清除 WO(只写) 0000 0000h
GPIOEINTTYPE 400D 2420h GPIO中断类型 RW(读写) 0000 0000h
GPIOEINTCFG 400D 2424h GPIO中断配置 RW(读写) 0000 0000h
GPIOEINTEDGEBOTH 400D 2428h GPIO中断双边沿 RW(读写) 0000 0000h
GPIOECLKSYNC 400D 242Ch GPIO时钟同步 RW(读写) --
GPIOEDOSET 400D 2430h GPIO数据输出置位 WO(只写) --
GPIOEDOCLEAR 400D 2434h GPIO数据输出清除 WO(只写) 0000 FFFFH

例1:引脚配置输出

void gpio_output_init(void)
{
    PAC55XX_GPIOE->MODE.P0 =     IO_PUSH_PULL_OUTPUT; //输出模式
    PAC55XX_GPIOE->OUTMASK.P0 = 0;//GPIO 引脚的状态将由 GPIOEOUT.Px 来设置(0b:逻辑低电平,1b:逻辑高电平)。如果 GPIOEOUTMASK.Px 设置为 1b,那么对 GPIOEOUT.Px 所做的任何更改都将不起作用。
    PAC55XX_GPIOE->DOCLEAR.P0 = 1; //清除输出
    PAC55XX_SCC->PCPUEN.P0=  1; //弱上拉
    PAC55XX_SCC->PEDS.P0DS = IODS_DS_14MA; //驱动强度设置
    PAC55XX_GPIOE->OUT.P0 = 1;//0-输出低电平,1-输出高电平
}

例2:引脚中断

void gpio_input_init(void)
{
    // input
    PAC55XX_GPIOC->MODE.P7 = IO_HIGH_IMPEDENCE_INPUT; //输入模式
    PAC55XX_GPIOC->OUTMASK.P7 = 1; //输入模式,配置为1
    PAC55XX_SCC->PCMUXSEL.P7=  0; /* 引脚复用:000b: GPIOC7 [default],001b: TBPWM7,010b: TCPWM7,011b: Reserved,100b: USBSS,101b: USCMISO,110b: FRCLK,111b:EMUXC*/
    PAC55XX_SCC->PCPUEN.P7=  1;/*弱上拉 :0b: disabled,1b: enabled*/
}
void gpio_interrupt_init(void)
{
    gpio_input_init();
    // interrupt
    PAC55XX_GPIOC->INTTYPE.P7 = 0; //0-边沿触发,1-电平触发
    PAC55XX_GPIOC->INTCFG.P7 = 0; //INTTYPE=0:0-下降沿触发,1-上升沿触发;INTTYPE=1:0-低电平,1-高电平触发
    PAC55XX_GPIOC->INTEDGEBOTH.P7 = 1;//0-听从INTCFG设置,1-覆盖INTCFG,双边沿触发
    PAC55XX_GPIOC->CLKSYNC.P7 = 1; //时钟同步使能:0-禁用 1-使能(在接收中断使能时设置)
    PAC55XX_GPIOC->INTEN.P7 = 1; //使能中断
    PAC55XX_GPIOC->INTCLEAR.P7 = 1; //中断标志位清除
    NVIC_EnableIRQ(GpioC_IRQn); //NVIC使能
    NVIC_SetPriority(GpioC_IRQn,1); //中断优先级设置
}
PAC5XXX_RAMFUNC void GpioC_IRQHandler(void)
{
    if(PAC55XX_GPIOC->INTFLAG.P7)
    {
        PAC55XX_GPIOE->OUT.P0 ^= 1; //电平翻转

        PAC55XX_GPIOC->INTCLEAR.P7 = 1;
    }
}
U8 gpio_read_pin()
{
    retrun PAC55XX_GPIOE->IN.P7; //0-低电平,1-高电平
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容