static __INLINE void *GPIO_MODREG(unsigned gpio) { return (void*)(gpio_get_regbase(gpio) + GPIO_SWPORTA_DDR); } static __INLINE void *GPIO_WDATAREG(unsigned gpio) { return (void*)(gpio_get_regbase(gpio) + GPIO_SWPORTA_DR); } static __INLINE void *GPIO_RDATAREG(unsigned gpio) { return (void*)(gpio_get_regbase(gpio) + GPIO_SWPORTA_EXT_PORTA); } static __INLINE void *GPIO_INTENREG(unsigned gpio) { return (void*)(gpio_get_regbase(gpio) + GPIO_SWPORTA_INTEN); } static __INLINE void *GPIO_INTMASKREG(unsigned gpio) { return (void*)(gpio_get_regbase(gpio) + GPIO_SWPORTA_INTMASK); } static __INLINE void *GPIO_INTLVLREG(unsigned gpio) { return (void*)(gpio_get_regbase(gpio) + GPIO_SWPORTA_INTTYPE_LEVEL); } static __INLINE void *GPIO_INTPOLREG(unsigned gpio) { return (void*)(gpio_get_regbase(gpio) + GPIO_SWPORTA_INT_POLARITY); }
时间: 2024-04-18 08:31:56 浏览: 12
这段代码定义了一系列的内联函数,用于获取GPIO引脚相关寄存器的地址。让我们逐个解释这些函数的作用:
1. `GPIO_MODREG(unsigned gpio)`:返回指定GPIO引脚的模式寄存器(MODREG)的地址。通过调用`gpio_get_regbase(gpio)`获取GPIO组的寄存器基地址,然后加上偏移量`GPIO_SWPORTA_DDR`得到模式寄存器的地址。
2. `GPIO_WDATAREG(unsigned gpio)`:返回指定GPIO引脚的输出数据寄存器(WDATAREG)的地址。同样地,通过调用`gpio_get_regbase(gpio)`获取GPIO组的寄存器基地址,然后加上偏移量`GPIO_SWPORTA_DR`得到输出数据寄存器的地址。
3. `GPIO_RDATAREG(unsigned gpio)`:返回指定GPIO引脚的输入数据寄存器(RDATAREG)的地址。通过调用`gpio_get_regbase(gpio)`获取GPIO组的寄存器基地址,然后加上偏移量`GPIO_SWPORTA_EXT_PORTA`得到输入数据寄存器的地址。
4. `GPIO_INTENREG(unsigned gpio)`:返回指定GPIO引脚的中断使能寄存器(INTENREG)的地址。通过调用`gpio_get_regbase(gpio)`获取GPIO组的寄存器基地址,然后加上偏移量`GPIO_SWPORTA_INTEN`得到中断使能寄存器的地址。
5. `GPIO_INTMASKREG(unsigned gpio)`:返回指定GPIO引脚的中断屏蔽寄存器(INTMASKREG)的地址。通过调用`gpio_get_regbase(gpio)`获取GPIO组的寄存器基地址,然后加上偏移量`GPIO_SWPORTA_INTMASK`得到中断屏蔽寄存器的地址。
6. `GPIO_INTLVLREG(unsigned gpio)`:返回指定GPIO引脚的中断触发电平寄存器(INTLVLREG)的地址。通过调用`gpio_get_regbase(gpio)`获取GPIO组的寄存器基地址,然后加上偏移量`GPIO_SWPORTA_INTTYPE_LEVEL`得到中断触发电平寄存器的地址。
7. `GPIO_INTPOLREG(unsigned gpio)`:返回指定GPIO引脚的中断触发极性寄存器(INTPOLREG)的地址。通过调用`gpio_get_regbase(gpio)`获取GPIO组的寄存器基地址,然后加上偏移量`GPIO_SWPORTA_INT_POLARITY`得到中断触发极性寄存器的地址。
这些内联函数提供了一种方便的方式来获取GPIO引脚相关寄存器的地址,以便进行相应的配置和操作。