LPC213x系列底层硬件驱动函数库Word下载.docx
《LPC213x系列底层硬件驱动函数库Word下载.docx》由会员分享,可在线阅读,更多相关《LPC213x系列底层硬件驱动函数库Word下载.docx(103页珍藏版)》请在冰豆网上搜索。
//并设置为输出模式
3.P0口GPIO输入、输出方向设置
在P0口中,设置num中“1”所对应位的输入、输出方式。
表格3P0口GPIO输入、输出方向设置
uint8P0_GPIODir(uint32num,uint8dir)
num需要初始化的管脚
dir管脚的输入输出方向
1——输出
0——输入
1操作成功
0操作失败
num是按位操作的
P0.31仅为输出口
P0_GPIODir((1<
16),1);
//将P0.4和P0.16设置为输出模式
4.P1口GPIO输入、输出方向设置
在P1口中,设置num中“1”所对应位的输入、输出方式。
表格4P1口GPIO输入、输出方向设置
uint8P1_GPIODir(uint32num,uint8dir)
0——输入
1操作成功
0操作失败
P1_GPIODir(1<
//将P1.18设置为输出模式
5.P0口GPIO输出“1”
在P0口中,置位num为1的位所对应的管脚。
表格5P0口GPIO输出“1”
P0_GPIOSet(num)
P0_GPIOSet((1<
16));
//使P0.4和P0.16输出“1”
6.P0口GPIO输出“0”
在P0口中,清零num为1的位所对应的管脚。
表格6P0口GPIO输出“0”
P0_GPIOClr(num)
P0_GPIOClr((1<
//使P0.4和P0.16输出“0”
7.P0口GPIO输出
将value所对应的值输出到P0口。
表格7P0口GPIO输出
Write_P0(value)
value需要输出的值
Write_P0(0xaa);
//使P0.0~P0.7输出“0xaa”
8.P1口GPIO输出“1”
在P1口中,置位num为1的位所对应的管脚。
表格8P1口GPIO输出“1”
P1_GPIOSet(num)
P1_GPIOSet(1<
18);
//使P1.18输出“1”
9.P1口GPIO输出“0”
在P1口中,清零num为1的位所对应的管脚。
表格9P1口GPIO输出“0”
P1_GPIOClr(num)
num需要设置的管脚
P1_GPIOClr(1<
//使P1.18输出“0”
10.P1口GPIO输出
将value所对应的值输出到P1口。
表格10P1口GPIO输出
Write_P1(value)
value需要输出的值
Write_P1(0xaa<
//使P1.18~P1.25输出“0xaa”
1.1.2源码分析
程序清单0.1GPIO.c源代码
/******************************************************************************************
**文件名称:
GPIO.c
**文件描述:
LPC213x系列GPIO操作软件包。
**文件说明:
对于引脚的操作使用位操作方式。
******************************************************************************************/
#include"
config.h"
**函数名称:
voidP0_GPIOInit(uint32num,uint8dir)
**功能描述:
将P0口中,num为1的位初始化为GPIO。
**输 入:
num需要初始化的管脚
**dir管脚的输入输出方向
**1——输出
**0——输入
**输 出:
无
**说明:
如果dir错误,则默认为输入方向。
**调用模块:
P0_GPIOInit((1<
**//且设置为输入模式
voidP0_GPIOInit(uint32num,uint8dir)
{
uint8i;
if((num&
0xffff)!
=0)//初始化引脚P0.0~P0.15,需要设置PINSEL0
for(i=0;
i<
16;
i++)
if((num&
(1<
i))!
=0)
PINSEL0=PINSEL0&
(~(0x03<
(2*i)));
if(num>
0xffff)//初始化引脚P0.16~P0.31,需要设置PINSEL1
for(i=16;
32;
i++)
PINSEL1=PINSEL1&
(2*(i-16))));
if(dir==1)IO0DIR=(IO0DIR&
(~num))|num;
elseIO0DIR=(IO0DIR&
(~num));
}
将P1口中,num为1的位初始化为GPIO。
{
(0x3ff<
16))!
=0)//P1.16~P1.25,由PINSEL2.3位控制
PINSEL2=PINSEL2&
(~(1<
3));
16))//P1.26~P1.31,由PINSEL2.2位控制
2));
if(dir==1)IO1DIR=(IO1DIR&
elseIO1DIR=(IO1DIR&
在P0口中,设置num为1的位输入,输出方式。
num需要初始化的管脚
**0——输入
1操作成功
**0操作失败
if((dir!
=0)&
&
(dir!
=1))return(0);
//1表示该位为输出模式
elseIO0DIR=(IO0DIR&
//0表示该位为输入模式
return
(1);
在P1口中,设置num为1的位输入,输出方式。
elseIO1DIR=(IO1DIR&
//0表示该位为输入模式
程序清单0.2GPIO软件包中定义的宏定义
#defineRead_P0()IO0PIN//将P0口的值读出
#defineRead_P1()IO1PIN//将P1口的值读出
#defineWrite_P0(value)IO0PIN=value//将value的值写入到P0口中
#defineWrite_P1(value)IO1PIN=value//将value的值写入到P1口中
#defineP0_GPIOSet(num)IO0SET=num//在P0口中,置位num为1的位所对应的管脚
#defineP0_GPIOClr(num)IO0CLR=num//在P0口中,清零num为1的位所对应的管脚
#defineP1_GPIOSet(num)IO1SET=num//在P1口中,置位num为1的位所对应的管脚
#defineP1_GPIOClr(num)IO1CLR=num//在P1口中,清零num为1的位所对应的管脚
1.2UART
1.2.1使用说明
1.初始化
对UARTn进行初始化。
表格11UART初始化
uint8UARTn_Ini(uint8n,uint32baud,uint8datab,
uint8stopb,uint8parity,uint8INT_En)
n0——UART01——UART1
baud串口通信波特率
datab数据位个数,有效值为:
5,6,7,8
stopb停止位个数,有效值为:
1,2
parity奇偶校验位
0——无校验
1——奇校验
2——偶校验
INT_En中断控制字节,按位操作
bit0RBR中断位,1——使能,0——禁止
bit1THRE中断位,1——使能,0——禁止
bit3RX线状态中断位,1——使能,0——禁止
0初始化失败
1初始化成功
最大通信速率为115200
UARTn_Ini(0,9600,8,1,0);
//UART0初始化,波特率9600,8位数据位
//1位停止位,无奇偶校验位
2.设置FIFO
对UARTn进行FIFO初始化。
表格12UARTFIFO初始化
voidSet_FIFO(uint8n,uint8data)
n0——UART01——UART1
dataFIFO触发字节设定,只能为1,2,8、14个字节
Set_FIFO(0,8);
//UART0FIFO初始化,8字节触发
3.发送1字节数据
从UART发送一字节数据。
表格13UART发送1字节数据
voidUARTn_SendByte(uint8n,uint8data)
data发送的数据
程序采用查询方式,并且没有使用FIFO
UARTn_SendByte(1,0x55);
//从UART1发送数据55H
4.发送多字节数据
从UART发送多字节数据。
表格14UART发送多字节数据
voidUARTn_SendData(uint8n,uint8*data_buf,
uint8count)
data_buf发送数据缓冲区首地址
count发送字节数
程序采用查询方式
UARTn_SendData(0,*data_buf,8);
//将data_buf缓冲区中的8个字节数据
//从UART0发送出去
5.接收数据
从UART接收数据。
表格15UART接收数据
voidUARTn_RcvData(uint8n,uint8*data_buf,
data_buf接收数据缓冲区首地址
count接收字节数
程序采用查询方式,存在死等待
UARTn_RcvData(0,*data_buf,8);
//从UART0接收8字节数据
//并保存到data_buf缓冲区中
1.2.2源码分析
程序清单0.3UART.c源代码
UART.c
LPC213xUARTn接口操作软件包。
程序中全部采用查询方式对UART进行操作。
#defineTXD01//TXD0是引脚P0.0的第2功能
#defineRXD0(1<
2)//RXD0是引脚P0.1的第2功能
#defineTXD1(1<
16)//TXD1是引脚P0.8的第2功能
#defineRXD1(1<
18)//RXD1是引脚P0.9的第2功能
uint8UARTn_Ini(uint8n,uint32baud,uint8datab,uint8stopb,
**uint8parity,uint8INT_En)
对UARTn进行初始化。
n0——UART01——UART1
**baud串口通信波特率
**datab数据位个数,有效值为:
**stopb停止位个数,有效值为:
**parity奇偶校验位,0-无校验
**1——奇校验
**2——偶校验
**3——强制为1
**4——强制为0
**INT_En中断控制字节,按位操作
**bit01——RBR中断使能,0——RBR中断禁止
**bit11——THRE中断使能,0——THRE中断禁止
**bit31——RX线状态中断使能,0——RX线状态中断禁止
0初始化失败
**1初始化成功
uint8UARTn_Ini(uint8n,uint32baud,uint8datab,uint8stopb,uint8parity,uint8INT_En)
uint32bak;
/*检查参数的合理性*/
if((n!
=0)&
(n!
=1))return(0);
//只有两个串口
if((baud==0)||(baud>
115200))return(0);
//波特率:
1~115200,否则出错
if((datab<
5)||(datab>
8))return(0);
//数据位数:
1~8,否则出错
if((stopb==0)||(stopb>
2))return(0);
//停止位:
1、2,否则出错
if(parity>
4)return(0);
//奇偶校验位有错
//设置UART引脚,且不影响其它引脚
if(n==0)PINSEL0=(PINSEL0&
(~0x0f))|TXD0|RXD0;
//设置UART0
elsePINSEL0=(PINSEL0&
(~(0x0f<
16)))|TXD1|RXD1;
//设置UART1
/*设置串口波特率*/
*(volatileuint8*)((&
U0LCR)+n*0x4000)=0x80;
//DLAB=1
U0DLM)+n*0x4000)=((Fpclk/16)/baud)/256;
U0DLL)+n*0x4000)=((Fpclk/16)/baud)%256;
/*设置串口模式*/
bak=datab-5;
//设置字长
if(stopb==2)
bak|=0x04;
//判断是否为2位停止位
if(parity!
=0)
{
parity-=1;
bak|=0x08;
}
bak|=parity<
4;
//设置奇偶校验位
U0LCR)+n*0x4000)=bak;
U0IER)+n*0x4000)=INT_En&
0x07;
//设置中断使能寄存器
voidSet_FIFO(uint8n,uint8data)
设置FIFO
**输 入:
**dataFIFO触发字节设定,只能为1,2,8、14个字节
**输 出:
0初始化失败
**1初始化成功
******