NRF 52832 개발: GPIO 구동

NRF 52832 개발: GPIO 구동
본문 블 로그 링크:http://blog.csdn.net/jdh99, 저자: jdh, 전재 설명 하 세 요.
 
환경:
개발 환경: MDK 5.23
설명:
Nordic 사 경 을 참고 하여 칩 NRF 52832 의 개발 패 키 지 를 제공 하여 GPIO 구동 을 재 작성 하 였 습 니 다.
원본 코드:
drv_gpio.h
/**
* Copyright (c), 2015-2025
* @file drv_gpio.h
* @brief gpio      
* @author jdh
* @date 2017/6/27
*/

#ifndef _DRV_GPIO_H_
#define _DRV_GPIO_H_

/*********************************************************************
*							   
**********************************************************************/

#include 
#include 

/*********************************************************************
*							    
**********************************************************************/

/**
* @brief     
*/

typedef enum
{
	GPIO_NOPULL = 0,
	GPIO_PULLDOWN = 1,
	GPIO_PULLUP = 3
} GPIO_Pull_Mode;


/*********************************************************************
*							  
**********************************************************************/

/**
* @brief       
* @param pin:    	
*/

void drv_gpio_config_output(uint8_t pin);

/**
* @brief       
* @param pin:    	
* @param pull_mode:     
*/

void drv_gpio_config_input(uint8_t pin, GPIO_Pull_Mode pull_mode);

/**
* @brief      
* @param pin:    	
*/

void drv_gpio_set_high(uint8_t pin);

/**
* @brief      
* @param pin:    	
*/

void drv_gpio_set_low(uint8_t pin);

/**
* @brief GPIO    
* @param pin:    	
*/

void drv_gpio_toggle(uint8_t pin);

/**
* @brief       
* @param pin:    	
# @retval true:    .false:    
*/

bool drv_gpio_read(uint8_t pin);

#endif



drv_gpio.c
/**
* Copyright (c), 2015-2025
* @file drv_gpio.c
* @brief gpio      
* @author jdh
* @date 2017/6/27
* @update 2017/8/21
*/

/*********************************************************************
*							   
**********************************************************************/

#include "drv_gpio.h"
#include "nrf52.h"
#include "nrf52_bitfields.h"

/*********************************************************************
*							  
**********************************************************************/

/**
* @brief       
* @param pin:    	
*/

void drv_gpio_config_output(uint8_t pin)
{
	NRF_P0->PIN_CNF[pin] = (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos) | 
							 (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) | 
							 (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | 
							 (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) | 
							 (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos);
}

/**
* @brief       
* @param pin:    	
* @param pull_mode:     
*/

void drv_gpio_config_input(uint8_t pin, GPIO_Pull_Mode pull_mode)
{
	NRF_P0->PIN_CNF[pin] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos)
                           | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos)
                           | (pull_mode << GPIO_PIN_CNF_PULL_Pos)
                           | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)
                           | (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos);
}

/**
* @brief      
* @param pin:    	
*/

void drv_gpio_set_high(uint8_t pin)
{
	NRF_P0->OUTSET = 1 << pin;
}

/**
* @brief      
* @param pin:    	
*/

void drv_gpio_set_low(uint8_t pin)
{
	NRF_P0->OUTCLR = 1 << pin;
}

/**
* @brief GPIO    
* @param pin:    	
*/

void drv_gpio_toggle(uint8_t pin)
{
    uint32_t pins_state = NRF_P0->OUT;

    NRF_P0->OUTSET = (~pins_state & (1UL << pin));
    NRF_P0->OUTCLR = (pins_state & (1UL << pin));
}

/**
* @brief       
* @param pin:    	
# @retval true:    .false:    
*/

bool drv_gpio_read(uint8_t pin)
{
	return ((NRF_P0->IN >> pin) & 0x1);
}

좋은 웹페이지 즐겨찾기