• 硬件——nrf51822第三篇,按键控制小灯


     

    现象是按键按下,小灯亮,按键抬起,小灯灭。

    从这一节我们细致剖析gpio口的设置:

    nrf51822片上一共有32个数字引脚,分为4个port,如下:

    port 0    pin 0-7

    port 1    pin 8-15

    port 2    pin 16-23

    port 3    pin 24-31

    每个gpio都有8个寄存器对其参数进行配置,这些寄存器均为32位,每个位对应每个gpio。

    三个设置引脚输入输出寄存器:DIR   DIRSET    DIRCLR

    三个设置引脚高低电平寄存器:OUT   OUTSET   OUTCLR 

    一个读引脚电平寄存器:IN

    一个引脚配置寄存器:PIN_CNF[n]

    接下来重点介绍PIN_CNF[n],在gpio的配置中,用的比较多,该寄存器有32个,分别对应32个gpio。

    第0位:设置gpio接口方向

    第1位:设置input buffer 是否启用 ,作用为再输入禁用时可以节省电流降低功耗,这对于某些对功耗要求较高的场合尤为试用。

                当有输入时或者读取gpio电平时都要使能input buffer,输出时为了节省电流也要关闭该模块。

    第2-3位:设置上、下拉电阻的使能

    第8-10位:设置gpio的驱动能力

    第16-17位:设置监测电平的极性  对外部电平的检测(sense功能),通俗来说可以理解为外部中断,其原理为gpio检测到高,低电平时会产生PORT event,

                                                         进而唤醒CPU或者响应相应的中断机制。

    这里应该插入一张图片:

    下面我们重新来看nrf_gpio.h文件下的函数:

    nrf_gpio_range_cfg_output(uint32_t pin_range_start, uint32_t pin_range_end)  可以设置好几个引脚

    :没有电平检测;驱动能力是最低等级;没有上下拉;没有启动input buffer;输出;

     nrf_gpio_range_cfg_input(uint32_t pin_range_start, uint32_t pin_range_end, nrf_gpio_pin_pull_t pull_config)  可以设置好几个引脚

    :没有电平检测;驱动能力是最低等级;上下拉是根据传入的参数设定的;启动input buffer;输入;

    nrf_gpio_cfg_output(uint32_t pin_number)  设置一个引脚

    :没有电平检测;驱动能力是最低等级;没有上下拉;没有启动input buffer;输出;

    nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config)  设置一个引脚

    :没有电平检测;驱动能力是最低等级;上下拉根据传入参数而定;启动input buffer;输入;

    nrf_gpio_cfg_sense_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config, nrf_gpio_pin_sense_t sense_config)

    :电平检测高或低由传入参数而定;驱动能力是最低等级;上下拉根据传入参数而定;启动input buffer;输入;

    nrf_gpio_pin_dir_set(uint32_t pin_number, nrf_gpio_pin_dir_t direction)

    :没有电平检测;驱动能力是最低等级;没有上下拉;启动input buffer;输入输出由传入参数决定;

    nrf_gpio_pin_set(uint32_t pin_number)  //设置某个引脚为高电平

    nrf_gpio_pin_clear(uint32_t pin_number)//设置某个引脚为低电平

    nrf_gpio_pin_toggle(uint32_t pin_number)//翻转某个引脚的电平

    nrf_gpio_pin_write(uint32_t pin_number, uint32_t value) //写某个引脚的电平,可以写高,也可以写低

    nrf_gpio_pin_read(uint32_t pin_number) //读取某个引脚的电平

    nrf_gpio_word_byte_write(volatile uint32_t * word_address, uint8_t byte_no, uint8_t value) //写多个port的值

    nrf_gpio_word_byte_read(const volatile uint32_t* word_address, uint8_t byte_no) //读多个port的值

    nrf_gpio_port_dir_set(nrf_gpio_port_select_t port, nrf_gpio_port_dir_t dir) //Function for setting the direction of a port.

    nrf_gpio_port_read(nrf_gpio_port_select_t port) //Function for reading a GPIO port.

    nrf_gpio_port_write(nrf_gpio_port_select_t port, uint8_t value) //Function for writing to a GPIO port.

    nrf_gpio_port_set(nrf_gpio_port_select_t port, uint8_t set_mask) //Function for setting individual pins on GPIO port.

    nrf_gpio_port_clear(nrf_gpio_port_select_t port, uint8_t clr_mask) //Function for clearing individual pins on GPIO port.

  • 相关阅读:
    xshell评估期已过怎么办
    git之本地仓库关联远程仓库
    Seam 无缝集成 JSF,第 2 部分: 借助 Seam 进行对话
    Adhoc
    Seam 无缝集成 JSF,第 3 部分: 用于 JSF 的 Ajax
    Adhoc
    Seam 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序框架
    Seam 无缝集成 JSF,第 3 部分: 用于 JSF 的 Ajax
    JavaFX技术预览
    Seam 无缝集成 JSF,第 2 部分: 借助 Seam 进行对话
  • 原文地址:https://www.cnblogs.com/chulin/p/7118468.html
Copyright © 2020-2023  润新知