Nodic_52832的 GPIOTE PPI GAP GATT 介绍

关键字:GPIOTE     PPI    GAP  GATT

  nRF52832的寄存器和一般的单片机有所差别,nRF52832的寄存器分为下面的三种类型。

  • Task :任务寄存器,可以由程序或事件触发。
  • Event:事件寄存器,事件可以产生中断或触发任务。
  • Register:普通寄存器,和一般单片机的寄存器一样。

Task和Event更多的是用来和PPI(可编程外设互连)配合使用,通过PPI 将某个Event和Task连接起来,连接后,该Event即可触发对应的Task执行相应的功能。

GPIOTE PPI(可编程外设互连)是nodic特有的模块。

GPIOTE:

Nordic GPIO中断是通过 GPIOTE这个外设模块来实现的。GPIOTE 使用task 和event的方式来控制GPIO,,GPIO做为输出可以通过 GPIOTE task 来控制IO输出高电平、低电平、或者翻转电平,GPIO做为输入在IO发生变化(Rising edge、 Falling edge、Any change)产生GPIOTE event事件,可以触发GPIOTE中断,或着将event连接到PPI上触发task。

nRF52832 GPIOTE 有8 个通道,最多可以配置8个GPIO(Pin events and tasks)

如果需要使用的通道数超过8个,则可以使用Port event ,Port event是所有GPIO DETECT信号的组合事件,每个GPIO都可以触发GPIOTE Port event。

GPIO pin event 和port event 的选择:

nrf_drv_gpiote_in_init 初始化函数中参数p_config->hi_accuracy = true 为 pin event,否则为port event。

problem:使用GPIOTE功能时,功耗较大,不适合用在low current application,需要用到16Mhz的频率,电流在1mA左右。

针对GPIOTE中 Pin event 和Port Event的使用选择 的解决方法

.1 如果不在乎功耗,那么很简单,配置p_config->hi_accuracy = true使用pin event

2 如果功耗非常重要,并且没有多个GPIO同时中断的场景,那么配置p_config->hi_accuracy = false使用port event

.3 如果功耗非常重要 , 并且需要多个GPIO同时中断,那么配置p_config->hi_accuracy = false使用port event,并且p_config->sense配置为NRF_GPIOTE_POLARITY_TOGGLE, 这样配置如果按键按下触发port event 中断后改变按键GPIO sense设置就不会持续触发DETECT信号,这时有其他GPIO中断就可以触发Port Event中断

GAP的四种广播:

通用广播:通用广播是用途最广的广播方式。进行通用广播的设备能够被扫描设备扫描到,或者在接收到连接请求时作为从设备进入一个连接。通用广播可以在没有连接的情况下发出,换句话说,没有主从设备之分。

定向广播:为了尽可能快的建立连接。这种报文包含两个地址:广播者的地址和发起者的地址。发起设备收到发绐自己的定向广播报文后,可以立即发送连接请求作为回应。

不可连接广播:只广播数据,不能被扫描或者连接。只能根据主机的要求在广播态和就绪态之间切换。

可发现广播:不能用于发起连接,但允许其他设备扫描该广播设备。设备可以被发现,既可以广播数据,又可以响应扫描,但不能建立连接。这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据之中,而静态数据可以包含于扫描响应数据之中。可发现广播不会进入连接态,而只能在停止后回到就绪态。

GATT:

GATT才是真正BLE的部分了

 

 

 

 

 

 

 

你可能感兴趣的:(Bluetooth)