Notes: Development of Hetai MCU BH66F2652 (2) GPIO

Notes: (2) GPIO pin driver

Author: Family has a fairy wife Xie shopkeeper
Date: 2021/2/26

The main registers that control the GPIO pins are shown in the following figure:
Insert picture description here
Hetai's BH66F2652 microcontroller has two packages, and the number of corresponding GPIO pins is also not used. Here, the package function code is written with the maximum number of pins.
Insert picture description here
The package pins do not have PORTC and PB7 pins.
Insert picture description here
The package pins include PORTC and PB7 pins.

1. Pin input and output selection bit

Insert picture description here

 /*******************************************************************************
 * fuction	gpioInput	
 * brief	设置引脚输入
 * param	gpioPin
 * return	无
 *******************************************************************************/  
 void gpioInput(char gpioPin)
 {
    
    
 	switch(gpioPin)
 	{
    
    
 		//POARTA
 		case  0: _pac0 = 1;    break;
 		case  1: _pac1 = 1;    break;
 		case  2: _pac2 = 1;    break;
 		case  3: _pac3 = 1;    break;
 		case  4: _pac4 = 1;    break;
 		case  5: _pac5 = 1;    break;
 		case  6: _pac6 = 1;    break;
 		case  7: _pac7 = 1;    break;
 		//POARTB
 		case  8: _pbc0 = 1;    break;
 		case  9: _pbc1 = 1;    break;
 		case 10: _pbc2 = 1;    break;
 		case 11: _pbc3 = 1;    break;
 		case 12: _pbc4 = 1;    break;
 		case 13: _pbc5 = 1;    break;
 		case 14: _pbc6 = 1;    break;
 		case 15: _pbc7 = 1;    break;
 		//POARTC
 		case 16: _pcc0 = 1;    break;
 	}
 }
 /*******************************************************************************
 * fuction	gpioOutput	
 * brief	设置引脚输出
 * param	gpioPin
 * return	无
 *******************************************************************************/  
 void gpioOutput(char gpioPin)
 {
    
    
 	switch(gpioPin)
 	{
    
    
 		//POARTA
 		case  0: _pac0 = 0;    break;
 		case  1: _pac1 = 0;    break;
 		case  2: _pac2 = 0;    break;
 		case  3: _pac3 = 0;    break;
 		case  4: _pac4 = 0;    break;
 		case  5: _pac5 = 0;    break;
 		case  6: _pac6 = 0;    break;
 		case  7: _pac7 = 0;    break;
 		//POARTB
 		case  8: _pbc0 = 0;    break;
 		case  9: _pbc1 = 0;    break;
 		case 10: _pbc2 = 0;    break;
 		case 11: _pbc3 = 0;    break;
 		case 12: _pbc4 = 0;    break;
 		case 13: _pbc5 = 0;    break;
 		case 14: _pbc6 = 0;    break;
 		case 15: _pbc7 = 0;    break;
 		//POARTC
 		case 16: _pcc0 = 0;    break;
 	}
 }

2. Pin pull-up enable disable selection bit

Insert picture description here

 /*******************************************************************************
 * fuction	gpioPullUpEnable	
 * brief	设置引脚上拉使能
 * param	gpioPin
 * return	无
 *******************************************************************************/  
 void gpioPullUpEnable(char gpioPin)
 {
    
    
 	switch(gpioPin)
 	{
    
    
 		//POARTA
 		case  0: _papu0 = 1;    break;
 		case  1: _papu1 = 1;    break;
 		case  2: _papu2 = 1;    break;
 		case  3: _papu3 = 1;    break;
 		case  4: _papu4 = 1;    break;
 		case  5: _papu5 = 1;    break;
 		case  6: _papu6 = 1;    break;
 		case  7: _papu7 = 1;    break;
 		//POARTB
 		case  8: _pbpu0 = 1;    break;
 		case  9: _pbpu1 = 1;    break;
 		case 10: _pbpu2 = 1;    break;
 		case 11: _pbpu3 = 1;    break;
 		case 12: _pbpu4 = 1;    break;
 		case 13: _pbpu5 = 1;    break;
 		case 14: _pbpu6 = 1;    break;
 		case 15: _pbpu7 = 1;    break;
 		//POARTC
 		case 16: _pcpu0 = 1;    break;
 	}
 }
 /*******************************************************************************
 * fuction	gpioPullUpDisable	
 * brief	设置引脚上拉失能
 * param	gpioPin
 * return	无
 *******************************************************************************/  
 void gpioPullUpDisable(char gpioPin)
 {
    
    
 	switch(gpioPin)
 	{
    
    
 		//POARTA
 		case  0: _papu0 = 0;    break;
 		case  1: _papu1 = 0;    break;
 		case  2: _papu2 = 0;    break;
 		case  3: _papu3 = 0;    break;
 		case  4: _papu4 = 0;    break;
 		case  5: _papu5 = 0;    break;
 		case  6: _papu6 = 0;    break;
 		case  7: _papu7 = 0;    break;
 		//POARTB
 		case  8: _pbpu0 = 0;    break;
 		case  9: _pbpu1 = 0;    break;
 		case 10: _pbpu2 = 0;    break;
 		case 11: _pbpu3 = 0;    break;
 		case 12: _pbpu4 = 0;    break;
 		case 13: _pbpu5 = 0;    break;
 		case 14: _pbpu6 = 0;    break;
 		case 15: _pbpu7 = 0;    break;
 		//POARTC
 		case 16: _pcpu0 = 0;    break;
 	}
 }

Three, the pin pulls high and pulls the low level selection bit

 /*******************************************************************************
 * fuction	gpioHigh	
 * brief	设置引脚高电平
 * param	gpioPin
 * return	无
 *******************************************************************************/  
 void gpioHigh(char gpioPin)
 {
    
    
 	switch(gpioPin)
 	{
    
    
 		//POARTA
 		case  0: _pa0 = 1;    break;
 		case  1: _pa1 = 1;    break;
 		case  2: _pa2 = 1;    break;
 		case  3: _pa3 = 1;    break;
 		case  4: _pa4 = 1;    break;
 		case  5: _pa5 = 1;    break;
 		case  6: _pa6 = 1;    break;
 		case  7: _pa7 = 1;    break;
 		//POARTB
 		case  8: _pb0 = 1;    break;
 		case  9: _pb1 = 1;    break;
 		case 10: _pb2 = 1;    break;
 		case 11: _pb3 = 1;    break;
 		case 12: _pb4 = 1;    break;
 		case 13: _pb5 = 1;    break;
 		case 14: _pb6 = 1;    break;
 		case 15: _pb7 = 1;    break;
 		//POARTC
 		case 16: _pc0 = 1;    break;
 	}
 }
 /*******************************************************************************
 * fuction	gpioLow	
 * brief	设置引脚低电平
 * param	gpioPin
 * return	无
 *******************************************************************************/  
 void gpioLow(char gpioPin)
 {
    
    
 	switch(gpioPin)
 	{
    
    
 		//POARTA
 		case  0: _pa0 = 0;    break;
 		case  1: _pa1 = 0;    break;
 		case  2: _pa2 = 0;    break;
 		case  3: _pa3 = 0;    break;
 		case  4: _pa4 = 0;    break;
 		case  5: _pa5 = 0;    break;
 		case  6: _pa6 = 0;    break;
 		case  7: _pa7 = 0;    break;
 		//POARTB
 		case  8: _pb0 = 0;    break;
 		case  9: _pb1 = 0;    break;
 		case 10: _pb2 = 0;    break;
 		case 11: _pb3 = 0;    break;
 		case 12: _pb4 = 0;    break;
 		case 13: _pb5 = 0;    break;
 		case 14: _pb6 = 0;    break;
 		case 15: _pb7 = 0;    break;
 		//POARTC
 		case 16: _pc0 = 0;    break;
 	}
 }

Four, pin wakeup selection bitInsert picture description here

 /*******************************************************************************
 * fuction	gpioWakeup	
 * brief	设置引脚唤醒
 * param	gpioPin:引脚号   enORdis:使能/除能
 * return	无
 *******************************************************************************/  
 void gpioWakeup(char gpioPin,char enORdis)
 {
    
    
 	switch(gpioPin)
 	{
    
    
 		//POARTA
 		case  0: if(!enORdis) _pawu0 = 0; else _pawu0 = 1; break;
 		case  1: if(!enORdis) _pawu1 = 0; else _pawu1 = 1; break;
 		case  2: if(!enORdis) _pawu2 = 0; else _pawu2 = 1; break;
 		case  3: if(!enORdis) _pawu3 = 0; else _pawu3 = 1; break;
 		case  4: if(!enORdis) _pawu4 = 0; else _pawu4 = 1; break;
 		case  5: if(!enORdis) _pawu5 = 0; else _pawu5 = 1; break;
 		case  6: if(!enORdis) _pawu6 = 0; else _pawu6 = 1; break;
 		case  7: if(!enORdis) _pawu7 = 0; else _pawu7 = 1; break;
 	}
 }
#ifndef _GPIO_H
#define _GPIO_H

#include "BH66F2652.h"

//POARTA
#define PA0  0
#define PA1  1
#define PA2  2
#define PA3  3
#define PA4  4
#define PA5  5
#define PA6  6
#define PA7  7
//POARTB
#define PB0  8
#define PB1  9
#define PB2 10
#define PB3 11
#define PB4 12
#define PB5 13
#define PB6 14
#define PB7 15
//POARTC
#define PC0 16

extern void gpioInput(char gpioPin);
extern void gpioOutput(char gpioPin); 
extern void gpioPullUpEnable(char gpioPin); 
extern void gpioPullUpDisable(char gpioPin); 
extern void gpioHigh(char gpioPin);
extern void gpioLow(char gpioPin);
extern void gpioWakeup(char gpioPin,char enORdis);

#endif
/*--------------------------------END THE FILE-----------------------------------*/

Guess you like

Origin blog.csdn.net/FutureStudio1994/article/details/114127864