研究GD32 GPIO外设库是怎么写的

[复制链接]
1912|22
 楼主| gaoke231 发表于 2021-1-7 21:32 | 显示全部楼层
输出的速度是如何配置的?
库根据不同输出速度定义了不同的宏,使用和mode混合的方式将速度同时配置到GPIO_CTL寄存器中,完成不同的输出速度的配置。
  1. #define GPIO_OSPEED_10MHZ                ((uint8_t)0x01U)         
  2. #define GPIO_OSPEED_2MHZ                 ((uint8_t)0x02U)         
  3. #define GPIO_OSPEED_50MHZ                ((uint8_t)0x03U)
  4. if(((uint32_t)0x00U) != ((uint32_t)mode & ((uint32_t)0x10U)))
  5. {
  6.         /* output mode max speed:10MHz,2MHz,50MHz */
  7.         temp_mode |= (uint32_t)speed;
  8. }


 楼主| gaoke231 发表于 2021-1-7 21:33 | 显示全部楼层
gpio_bit_set gpio_bit_reset如何实现?
到这里,我们已经分许过GPIO模式的具体配置流程,相信大家已经对GPIO_CTL寄存器有了深入的了解,下面我们再看gpio_bit_set和gpio_bit_reset这两个函数库是如何实现的?
其实很简单只是使用GPIO_BC和GPIO_BOP宏即可操作端口位操作寄存器 GPIOx_BOP和位清除寄存器 GPIOx_BC,库的实现方法如下:
  1. #define GPIO_BOP(gpiox)            REG32((gpiox) + 0x10U)   
  2. #define GPIO_BC(gpiox)             REG32((gpiox) + 0x14U)   
  3. void gpio_bit_set(uint32_t gpio_periph,uint32_t pin)
  4. {
  5.     GPIO_BOP(gpio_periph) = (uint32_t)pin;
  6. }
  7. void gpio_bit_reset(uint32_t gpio_periph,uint32_t pin)
  8. {
  9.     GPIO_BC(gpio_periph) = (uint32_t)pin;
  10. }


 楼主| gaoke231 发表于 2021-1-7 21:34 | 显示全部楼层
其它的函数依次分析,结合参考手册和外设库,我相信大家都可以看得明白,这篇**就写到这里吧!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部