LPC213x系列底层硬件驱动函数库.docx

上传人:b****4 文档编号:3591924 上传时间:2022-11-24 格式:DOCX 页数:103 大小:58.13KB
下载 相关 举报
LPC213x系列底层硬件驱动函数库.docx_第1页
第1页 / 共103页
LPC213x系列底层硬件驱动函数库.docx_第2页
第2页 / 共103页
LPC213x系列底层硬件驱动函数库.docx_第3页
第3页 / 共103页
LPC213x系列底层硬件驱动函数库.docx_第4页
第4页 / 共103页
LPC213x系列底层硬件驱动函数库.docx_第5页
第5页 / 共103页
点击查看更多>>
下载资源
资源描述

LPC213x系列底层硬件驱动函数库.docx

《LPC213x系列底层硬件驱动函数库.docx》由会员分享,可在线阅读,更多相关《LPC213x系列底层硬件驱动函数库.docx(103页珍藏版)》请在冰豆网上搜索。

LPC213x系列底层硬件驱动函数库.docx

LPC213x系列底层硬件驱动函数库

LPC213x系列底层硬件驱动函数库

1.1GPIO

1.1.1使用说明

1.P0口GPIO初始化

函数功能:

将P0口中,num为1的位初始化为GPIO,并设置方向。

表格1P0口GPIO初始化函数

函数原型

voidP0_GPIOInit(uint32num,uint8dir)

入口参数

num需要初始化的管脚

dir管脚的输入输出方向

1——输出

0——输入

出口参数

说明

num不是引脚号,引脚号对应的位为1

如果dir的值有误,则默认为输入模式

调用示例:

P0_GPIOInit((1<<4)|(1<<16),0);//将P0.4和P0.16初始化为GPIO

//并设置为输入模式

2.P1口GPIO初始化

函数功能:

将P1口中,num为1的位初始化为GPIO,并设置方向。

表格2P1口GPIO初始化函数

函数原型

voidP1_GPIOInit(uint32num,uint8dir)

入口参数

num需要初始化的管脚

dir管脚的输入输出方向

1——输出

0——输入

出口参数

说明

P1口中,只有P1.16~P1.25可以作为GPIO使用

如果dir的值有误,则默认为输入模式

调用示例:

P1_GPIOInit(1<<18,1);//将P1.18初始化为GPIO

//并设置为输出模式

3.P0口GPIO输入、输出方向设置

函数功能:

在P0口中,设置num中“1”所对应位的输入、输出方式。

表格3P0口GPIO输入、输出方向设置

函数原型

uint8P0_GPIODir(uint32num,uint8dir)

入口参数

num需要初始化的管脚

dir管脚的输入输出方向

1——输出

0——输入

出口参数

1操作成功

0操作失败

说明

num是按位操作的

P0.31仅为输出口

调用示例:

P0_GPIODir((1<<4)|(1<<16),1);//将P0.4和P0.16设置为输出模式

4.P1口GPIO输入、输出方向设置

函数功能:

在P1口中,设置num中“1”所对应位的输入、输出方式。

表格4P1口GPIO输入、输出方向设置

函数原型

uint8P1_GPIODir(uint32num,uint8dir)

入口参数

num需要初始化的管脚

dir管脚的输入输出方向

1——输出

0——输入

出口参数

1操作成功

0操作失败

说明

P1口中,只有P1.16~P1.25可以作为GPIO使用

调用示例:

P1_GPIODir(1<<18,1);//将P1.18设置为输出模式

5.P0口GPIO输出“1”

函数功能:

在P0口中,置位num为1的位所对应的管脚。

表格5P0口GPIO输出“1”

函数原型

P0_GPIOSet(num)

入口参数

num需要初始化的管脚

出口参数

说明

调用示例:

P0_GPIOSet((1<<4)|(1<<16));//使P0.4和P0.16输出“1”

6.P0口GPIO输出“0”

函数功能:

在P0口中,清零num为1的位所对应的管脚。

表格6P0口GPIO输出“0”

函数原型

P0_GPIOClr(num)

入口参数

num需要初始化的管脚

出口参数

说明

调用示例:

P0_GPIOClr((1<<4)|(1<<16));//使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)

入口参数

num需要初始化的管脚

出口参数

说明

P1口中,只有P1.16~P1.25可以作为GPIO使用

调用示例:

P1_GPIOSet(1<<18);//使P1.18输出“1”

9.P1口GPIO输出“0”

函数功能:

在P1口中,清零num为1的位所对应的管脚。

表格9P1口GPIO输出“0”

函数原型

P1_GPIOClr(num)

入口参数

num需要设置的管脚

出口参数

说明

P1口中,只有P1.16~P1.25可以作为GPIO使用

调用示例:

P1_GPIOClr(1<<18);//使P1.18输出“0”

10.P1口GPIO输出

函数功能:

将value所对应的值输出到P1口。

表格10P1口GPIO输出

函数原型

Write_P1(value)

入口参数

value需要输出的值

出口参数

说明

P1口中,只有P1.16~P1.25可以作为GPIO使用

调用示例:

Write_P1(0xaa<<18);//使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<<4)|(1<<16),0);//将P0.4和P0.16初始化为GPIO

**//且设置为输入模式

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

voidP0_GPIOInit(uint32num,uint8dir)

{

uint8i;

if((num&0xffff)!

=0)//初始化引脚P0.0~P0.15,需要设置PINSEL0

for(i=0;i<16;i++)

if((num&(1<

=0)

PINSEL0=PINSEL0&(~(0x03<<(2*i)));

if(num>0xffff)//初始化引脚P0.16~P0.31,需要设置PINSEL1

for(i=16;i<32;i++)

if((num&(1<

=0)

PINSEL1=PINSEL1&(~(0x03<<(2*(i-16))));

if(dir==1)IO0DIR=(IO0DIR&(~num))|num;

elseIO0DIR=(IO0DIR&(~num));

}

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

**函数名称:

voidP1_GPIOInit(uint32num,uint8dir)

**功能描述:

将P1口中,num为1的位初始化为GPIO。

**输 入:

num需要初始化的管脚

**dir管脚的输入输出方向

**1——输出

**0——输入

**输 出:

**说明:

如果dir错误,则默认为输入方向。

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

voidP1_GPIOInit(uint32num,uint8dir)

{

if((num&(0x3ff<<16))!

=0)//P1.16~P1.25,由PINSEL2.3位控制

PINSEL2=PINSEL2&(~(1<<3));

if(num>(0x3ff<<16))//P1.26~P1.31,由PINSEL2.2位控制

PINSEL2=PINSEL2&(~(1<<2));

if(dir==1)IO1DIR=(IO1DIR&(~num))|num;

elseIO1DIR=(IO1DIR&(~num));

}

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

**函数名称:

uint8P0_GPIODir(uint32num,uint8dir)

**功能描述:

在P0口中,设置num为1的位输入,输出方式。

**输 入:

num需要初始化的管脚

**dir管脚的输入输出方向

**1——输出

**0——输入

**输 出:

1操作成功

**0操作失败

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

uint8P0_GPIODir(uint32num,uint8dir)

{

if((dir!

=0)&&(dir!

=1))return(0);

if(dir==1)IO0DIR=(IO0DIR&(~num))|num;//1表示该位为输出模式

elseIO0DIR=(IO0DIR&(~num));//0表示该位为输入模式

return

(1);

}

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

**函数名称:

uint8P1_GPIODir(uint32num,uint8dir)

**功能描述:

在P1口中,设置num为1的位输入,输出方式。

**输 入:

num需要初始化的管脚

**dir管脚的输入输出方向

**1——输出

**0——输入

**输 出:

1操作成功

**0操作失败

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

uint8P1_GPIODir(uint32num,uint8dir)

{

if((dir!

=0)&&(dir!

=1))return(0);

if(dir==1)IO1DIR=(IO1DIR&(~num))|num;//1表示该位为输出模式

elseIO1DIR=(IO1DIR&(~num));//0表示该位为输入模式

return

(1);

}

程序清单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个字节

出口参数

0初始化失败

1初始化成功

调用示例:

Set_FIFO(0,8);//UART0FIFO初始化,8字节触发

3.发送1字节数据

函数功能:

从UART发送一字节数据。

表格13UART发送1字节数据

函数原型

voidUARTn_SendByte(uint8n,uint8data)

入口参数

n0——UART01——UART1

data发送的数据

出口参数

说明

程序采用查询方式,并且没有使用FIFO

调用示例:

UARTn_SendByte(1,0x55);//从UART1发送数据55H

4.发送多字节数据

函数功能:

从UART发送多字节数据。

表格14UART发送多字节数据

函数原型

voidUARTn_SendData(uint8n,uint8*data_buf,

uint8count)

入口参数

n0——UART01——UART1

data_buf发送数据缓冲区首地址

count发送字节数

出口参数

说明

程序采用查询方式

调用示例:

UARTn_SendData(0,*data_buf,8);//将data_buf缓冲区中的8个字节数据

//从UART0发送出去

5.接收数据

函数功能:

从UART接收数据。

表格15UART接收数据

函数原型

voidUARTn_RcvData(uint8n,uint8*data_buf,

uint8count)

入口参数

n0——UART01——UART1

data_buf接收数据缓冲区首地址

count接收字节数

出口参数

说明

程序采用查询方式,存在死等待

调用示例:

UARTn_RcvData(0,*data_buf,8);//从UART0接收8字节数据

//并保存到data_buf缓冲区中

1.2.2源码分析

程序清单0.3UART.c源代码

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

**文件名称:

UART.c

**文件描述:

LPC213xUARTn接口操作软件包。

**文件说明:

程序中全部采用查询方式对UART进行操作。

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

#include"config.h"

#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数据位个数,有效值为:

5,6,7,8

**stopb停止位个数,有效值为:

1,2

**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

*(volatileuint8*)((&U0DLM)+n*0x4000)=((Fpclk/16)/baud)/256;

*(volatileuint8*)((&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;//设置奇偶校验位

*(volatileuint8*)((&U0LCR)+n*0x4000)=bak;

*(volatileuint8*)((&U0IER)+n*0x4000)=INT_En&0x07;//设置中断使能寄存器

return

(1);

}

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

**函数名称:

voidSet_FIFO(uint8n,uint8data)

**功能描述:

设置FIFO

**输 入:

n0——UART01——UART1

**dataFIFO触发字节设定,只能为1,2,8、14个字节

**输 出:

0初始化失败

**1初始化成功

******

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1