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

一、前言

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

二、GPIO结构

Nordic-GPIO配置:初始化以及中断配置_第1张图片
如上图:
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_NUMBER
NRF_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<INTENSET = GPIOTE_INTENSET_IN2_Set<EVENTS_IN[2]==1&&(NRF_GPIOTE->INTENSET&GPIOTE_INTENSET_IN2_Msk))  
    {  
        NRF_GPIOTE->EVENTS_IN[2]=0;  
        send_command1_falg =true;  
    }  
}


 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
   

你可能感兴趣的:(Nordic-GPIO配置:初始化以及中断配置)