Nordic-GPIO配置:初始化以及中断配置

来源:互联网 发布:股票历史交易数据 编辑:程序博客网 时间:2024/05/16 10:32

一、前言

继续分析Nordic GPIO部分的配置,作为芯片最基础的内容,剖析一下Nordic是如何处理GPIO配置的。

二、GPIO结构


如上图:
ANAIN/ANAEN : 模拟信号输入输出
DIR_OVERRIDE:方向过载??
IN_OVERRIDE/OUT_OVERRIDE:输入/输出过载,应该是提高驱动能力的作用
OUT就是信号输出端
DETECT:应该是用来做输入捕捉的
IN就是信号输入端

三、GPIO配置说明

1.  初始化所有IO口
    for(pinLoop = 0; pinLoop< 32 ; ++pinLoop )     {        NRF_GPIO->PIN_CNF[pinLoop] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)                               | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)                               | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos)                               | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos)                               | (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos);    }


(1)关闭Sense捕捉

(2)驱动能力设置为标准模式
(3)无上拉下拉
(4)IO口设置为输入,且输入口不连接
所有IO口的配置均按照初始化的配置方式,分别配置为输入输出
输入配置:
 for (; pin_range_start <= pin_range_end; pin_range_start++)    {        NRF_GPIO->PIN_CNF[pin_range_start] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)                                        | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)                                        | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos)                                        | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos)                                        | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos);    }

输出配置:
 for (; pin_range_start <= pin_range_end; pin_range_start++)    {        NRF_GPIO->PIN_CNF[pin_range_start] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)                                        | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)                                        | (pull_config << GPIO_PIN_CNF_PULL_Pos)                                        | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos)                                        | (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos);    }
2. 输出口电平控制(拉高、拉低)
NRF_GPIO->OUTSET = (1UL << GPIO_LED_STATE_PIN_NUMBERNRF_GPIO->OUTCLR = (1UL << GPIO_LED_STATE_PIN_NUMBER

3. 中断配置
中断初始化步骤:(1)首先将中断入口配置为输入口(2)配置中断Line,Nordic共有4个中断Line可供使用,这里选择Line号为2,后面的配置分别设置为下降沿(High to Low)选择中断触发的IO口号,以及触发的类型EVENT就是中断(3)使能总中断和GPIOTE的2号线中断中断处理接口:中判断一下中断标志,然后清标志即可。
void EXTI_Init(uint8_t PinNum,uint8_t EXTI_Line)  {         nrf_gpio_cfg_input(PinNum,GPIO_PIN_CNF_PULL_Pullup);      NRF_GPIOTE->CONFIG[EXTI_Line] = (GPIOTE_CONFIG_POLARITY_HiToLo<<GPIOTE_CONFIG_POLARITY_Pos)                              |(PinNum<<GPIOTE_CONFIG_PSEL_Pos)                              |(GPIOTE_CONFIG_MODE_Event<<GPIOTE_CONFIG_MODE_Pos);        nrf_drv_common_irq_enable(GPIOTE_IRQn, GPIOTE_CONFIG_IRQ_PRIORITY);      NRF_GPIOTE->INTENSET = GPIOTE_INTENSET_IN2_Set<<GPIOTE_INTENSET_IN2_Pos;  }  void GPIOTE_IRQHandler(void)  {      if(NRF_GPIOTE->EVENTS_IN[2]==1&&(NRF_GPIOTE->INTENSET&GPIOTE_INTENSET_IN2_Msk))      {          NRF_GPIOTE->EVENTS_IN[2]=0;          send_command1_falg =true;      }  }


0 0
原创粉丝点击