📄 pinset.c
字号:
#include "config.h"
/********************************************************************************************************
*
* 函数名称:PinFuncSelct()
*
* 功能描述:引脚功能选择
*
* 入口参数:PinNo--引脚号,以0起始;Function--欲选择的功能
* 出口参数:无
*
********************************************************************************************************/
void PinFuncSelct(unit8 PinNo, unit32 Function)
{
unit32 Mask;
if(PinNo < 16)
/*
决定功能的寄存器有两个,PINSEL0和PINSEL1,各决定前16个引脚和后16个引脚,是32位的寄存器,每两位对应一个具体的引脚,在设置一个引脚对应的功能时,肯定是先将
对应的功能位(有两位)清零,&(~Mask)就起这个作用,再与要设置的值相或,|Function就是这个作用,所以Mask在对应的两个位上必须全是1,其他位上必须全是0
*/
{
Mask = 0x00000003 << (PinNo*2); //Mask在要设置的两个对应位上置1
Function <<= (PinNo*2); //假设引脚号是2,则它在PINSEL0的对应位就是2*2,2*2+1,即4,5位,把要设置的值搬移到这个位上来
PINSEL0 = (PINSEL0&(~Mask))|Function;//在要设置的位上先清零(与就是起清零的作用),再或,完成设置
}
else
{
Mask = 0x00000003 << ((PinNo-16)*2);
Function <<= ((PinNo-16)*2);
PINSEL1 = (PINSEL1&(~Mask))|Function;
}
}
/********************************************************************************************************
*
* 函数名称:GPIODirSet()
*
* 功能描述:引脚GPIO功能输入输出方向选择
*
* 入口参数:PinNo--引脚号,以0起始;bDirIn--欲选择方向,TRUE为输出,FALSE输入
* 出口参数:无
*
********************************************************************************************************/
void GPIODirSet(unit8 PinNo, unit8 bDirOut)
{
unit32 IO_Dir;
unit32 Mask = (0x00000001 << PinNo);
if(bDirOut == TRUE)
IO_Dir = (0X00000001 << PinNo);
else
IO_Dir = 0X00000000;
IODIR = (IODIR&(~Mask))|IO_Dir;//IODIR&(~Mask)这句话的作用是在不改变其他引脚的状态下(Mask的取反已经使其他位都为1),然后使要改变的位先清零,然后或的作用就是决定要改改变的位的状态
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -