5、nRF52xx蓝牙学习(nrf_gpiote.c库函数学习)-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

5、nRF52xx蓝牙学习(nrf_gpiote.c库函数学习)

 

1、nrfx_err_t nrfx_gpiote_init

函数代码如下 :

nrfx_err_t nrfx_gpiote_init(void) {     nrfx_err_t err_code;      if (m_cb.state != NRFX_DRV_STATE_UNINITIALIZED)     {         err_code = NRFX_ERROR_INVALID_STATE;         NRFX_LOG_WARNING("Function: %s, error code: %s.",                          __func__,                          NRFX_LOG_ERROR_STRING_GET(err_code));         return err_code;     }      uint8_t i;      for (i = 0; i < MAX_PIN_NUMBER; i++)     {         if (nrf_gpio_pin_present_check(i))         {             pin_in_use_clear(i);         }     }      for (i = 0; i < (GPIOTE_CH_NUM + NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS); i++)     {         channel_free(i);     }      memset(m_cb.configured_pins, 0, sizeof(m_cb.configured_pins));      NRFX_IRQ_PRIORITY_SET(nrfx_get_irq_number(NRF_GPIOTE), NRFX_GPIOTE_CONFIG_IRQ_PRIORITY);     NRFX_IRQ_ENABLE(nrfx_get_irq_number(NRF_GPIOTE));     nrf_gpiote_event_clear(NRF_GPIOTE_EVENTS_PORT);     nrf_gpiote_int_enable(GPIOTE_INTENSET_PORT_Msk);     m_cb.state = NRFX_DRV_STATE_INITIALIZED;      err_code = NRFX_SUCCESS;     NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code));     return err_code; }

图片[1]-5、nRF52xx蓝牙学习(nrf_gpiote.c库函数学习)-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

(1)nrfx_gpiote_init 

函数不接收参数,返回值类型为 nrfx_err_t,这是一个用于表示错误码的类型。

(2)nrfx_err_t   err_code;

定义一个nrfx_err_t类型的变量err_code.

nrfx_err_t是一个枚举类型,在nrfx_errors.h中其定义如下:

typedef enum {     NRFX_SUCCESS                    = (NRFX_ERROR_BASE_NUM + 0),  ///< Operation performed successfully.     NRFX_ERROR_INTERNAL             = (NRFX_ERROR_BASE_NUM + 1),  ///< Internal error.     NRFX_ERROR_NO_MEM               = (NRFX_ERROR_BASE_NUM + 2),  ///< No memory for operation.     NRFX_ERROR_NOT_SUPPORTED        = (NRFX_ERROR_BASE_NUM + 3),  ///< Not supported.     NRFX_ERROR_INVALID_PARAM        = (NRFX_ERROR_BASE_NUM + 4),  ///< Invalid parameter.     NRFX_ERROR_INVALID_STATE        = (NRFX_ERROR_BASE_NUM + 5),  ///< Invalid state, operation disallowed in this state.     NRFX_ERROR_INVALID_LENGTH       = (NRFX_ERROR_BASE_NUM + 6),  ///< Invalid length.     NRFX_ERROR_TIMEOUT              = (NRFX_ERROR_BASE_NUM + 7),  ///< Operation timed out.     NRFX_ERROR_FORBIDDEN            = (NRFX_ERROR_BASE_NUM + 8),  ///< Operation is forbidden.     NRFX_ERROR_NULL                 = (NRFX_ERROR_BASE_NUM + 9),  ///< Null pointer.     NRFX_ERROR_INVALID_ADDR         = (NRFX_ERROR_BASE_NUM + 10), ///< Bad memory address.     NRFX_ERROR_BUSY                 = (NRFX_ERROR_BASE_NUM + 11), ///< Busy.     NRFX_ERROR_ALREADY_INITIALIZED  = (NRFX_ERROR_BASE_NUM + 12), ///< Module already initialized.      NRFX_ERROR_DRV_TWI_ERR_OVERRUN  = (NRFX_ERROR_DRIVERS_BASE_NUM + 0), ///< TWI error: Overrun.     NRFX_ERROR_DRV_TWI_ERR_ANACK    = (NRFX_ERROR_DRIVERS_BASE_NUM + 1), ///< TWI error: Address not acknowledged.     NRFX_ERROR_DRV_TWI_ERR_DNACK    = (NRFX_ERROR_DRIVERS_BASE_NUM + 2)  ///< TWI error: Data not acknowledged. } nrfx_err_t; 

(3)m_cb

m_cb是一个静态变量,定义如下 :

static gpiote_control_block_t m_cb;

其类型为结构体变量gpiote_control_block_t,该类型是在nrfx_gpiote.c中定义的:

typedef struct {     nrfx_gpiote_evt_handler_t handlers[GPIOTE_CH_NUM + NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS];     int8_t                    pin_assignments[MAX_PIN_NUMBER];     int8_t                    port_handlers_pins[NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS];     uint8_t                   configured_pins[((MAX_PIN_NUMBER)+7) / 8];     nrfx_drv_state_t          state; } gpiote_control_block_t;

这段代码使用 typedef 关键字定义了一个名为 gpiote_control_block_t 的结构体类型。这个结构体主要用于存储和管理 Nordic Semiconductor 的 GPIO(通用输入输出)任务和事件(GPIOTE)驱动的相关配置信息和状态。

结构体成员详细解释

nrfx_gpiote_evt_handler_t handlers[GPIOTE_CH_NUM + NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS]; 
  • 成员类型nrfx_gpiote_evt_handler_t 类型的数组。nrfx_gpiote_evt_handler_t 应该是一个函数指针类型,用于指向处理 GPIOTE 事件的回调函数。
  • 数组大小:数组的大小为 GPIOTE_CH_NUM + NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTSGPIOTE_CH_NUM 可能表示 GPIOTE 模块的通道数量,NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 可能表示低功耗事件的数量。
  • 作用:该数组用于存储每个通道和低功耗事件对应的事件处理函数指针,以便在相应的事件发生时调用。
int8_t                    pin_assignments[MAX_PIN_NUMBER]; 
  • 成员类型int8_t 类型的数组。int8_t 是一个有符号的 8 位整数类型。
  • 数组大小:数组的大小为 MAX_PIN_NUMBER,表示系统中可用的最大引脚数量。
  • 作用:该数组用于记录每个引脚的分配情况。数组的每个元素对应一个引脚,元素的值可以表示该引脚的使用状态或分配给哪个通道等信息。
int8_t                    port_handlers_pins[NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS]; 
  • 成员类型int8_t 类型的数组。
  • 数组大小:数组的大小为&n
请登录后发表评论

    没有回复内容