項(xiàng)目用用到qorvo的單片機(jī)PAC5523葡兑,該單片機(jī)和ST/GD不一樣,基本使用寄存器配置舞骆。
GPIOx端口包含8個(gè)通用輸入輸出(GPIO)引腳曹步,即GPIOE0到GPIOE7。
- 3.3伏輸出魔市,耐受3.3伏輸入
- 高阻抗數(shù)字輸入
- 推挽式數(shù)字輸出
- 開漏式數(shù)字輸出
- 可配置的驅(qū)動(dòng)強(qiáng)度最高達(dá)25毫安
- 可配置的輸入施密特觸發(fā)器
- 可配置的弱上拉或下拉
- 邊沿或電平敏感型中斷
- 上升沿主届、下降沿或雙邊沿
- 時(shí)鐘同步
寄存器 | 地址 | 描述 | 訪問權(quán)限 | 復(fù)位值 |
---|---|---|---|---|
GPIOEMODE | 400D 2400h | GPIO引腳模式選擇 | RW(讀寫) | 0000 FFFFH |
GPIOEOUTMASK | 400D 2404h | GPIO數(shù)據(jù)輸出寫掩碼 | RW(讀寫) | 0000 0000h |
GPIOEOUT | 400D 2408h | GPIO數(shù)據(jù)輸出值 | RW(讀寫) | 0000 00FFh |
GPIOEIN | 400D 240Ch | GPIO數(shù)據(jù)輸入值 | RO(只讀) | -- |
GPIOEINTEN | 400D 2410h | GPIO中斷使能 | RW(讀寫) | 0000 0000h |
GPIOEINTFLAG | 400D 2414h | GPIO中斷標(biāo)志 | 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時(shí)鐘同步 | RW(讀寫) | -- |
GPIOEDOSET | 400D 2430h | GPIO數(shù)據(jù)輸出置位 | WO(只寫) | -- |
GPIOEDOCLEAR | 400D 2434h | GPIO數(shù)據(jù)輸出清除 | WO(只寫) | 0000 FFFFH |
例1:引腳配置輸出
void gpio_output_init(void)
{
PAC55XX_GPIOE->MODE.P0 = IO_PUSH_PULL_OUTPUT; //輸出模式
PAC55XX_GPIOE->OUTMASK.P0 = 0;//GPIO 引腳的狀態(tài)將由 GPIOEOUT.Px 來設(shè)置(0b:邏輯低電平,1b:邏輯高電平)待德。如果 GPIOEOUTMASK.Px 設(shè)置為 1b君丁,那么對(duì) GPIOEOUT.Px 所做的任何更改都將不起作用。
PAC55XX_GPIOE->DOCLEAR.P0 = 1; //清除輸出
PAC55XX_SCC->PCPUEN.P0= 1; //弱上拉
PAC55XX_SCC->PEDS.P0DS = IODS_DS_14MA; //驅(qū)動(dòng)強(qiáng)度設(shè)置
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; /* 引腳復(fù)用: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-邊沿觸發(fā)耙厚,1-電平觸發(fā)
PAC55XX_GPIOC->INTCFG.P7 = 0; //INTTYPE=0:0-下降沿觸發(fā)强挫,1-上升沿觸發(fā);INTTYPE=1:0-低電平薛躬,1-高電平觸發(fā)
PAC55XX_GPIOC->INTEDGEBOTH.P7 = 1;//0-聽從INTCFG設(shè)置纠拔,1-覆蓋INTCFG,雙邊沿觸發(fā)
PAC55XX_GPIOC->CLKSYNC.P7 = 1; //時(shí)鐘同步使能:0-禁用 1-使能(在接收中斷使能時(shí)設(shè)置)
PAC55XX_GPIOC->INTEN.P7 = 1; //使能中斷
PAC55XX_GPIOC->INTCLEAR.P7 = 1; //中斷標(biāo)志位清除
NVIC_EnableIRQ(GpioC_IRQn); //NVIC使能
NVIC_SetPriority(GpioC_IRQn,1); //中斷優(yōu)先級(jí)設(shè)置
}
PAC5XXX_RAMFUNC void GpioC_IRQHandler(void)
{
if(PAC55XX_GPIOC->INTFLAG.P7)
{
PAC55XX_GPIOE->OUT.P0 ^= 1; //電平翻轉(zhuǎn)
PAC55XX_GPIOC->INTCLEAR.P7 = 1;
}
}
U8 gpio_read_pin()
{
retrun PAC55XX_GPIOE->IN.P7; //0-低電平泛豪,1-高電平
}