LPC213x系列底层硬件驱动函数库.docx
- 文档编号:24051045
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:123
- 大小:56.24KB
LPC213x系列底层硬件驱动函数库.docx
《LPC213x系列底层硬件驱动函数库.docx》由会员分享,可在线阅读,更多相关《LPC213x系列底层硬件驱动函数库.docx(123页珍藏版)》请在冰豆网上搜索。
LPC213x系列底层硬件驱动函数库
LPC213x系列底层硬件驱动函数库1
.1GPIO1
.1.1使用说明1
.1.2源码分析4
.2UART7
.2.1使用说明7
.2.2源码分析9
.3I2C13
.3.1使用说明13
.3.2源码分析15
.4SPI26
.4.1使用说明26
.4.2源码分析27
.5SSP29
.5.1使用说明29
.5.2源码分析30
.6定时/计数器32
.6.1使用说明32
.6.2源码分析36
.7PWM41
.7.1使用说明41
.7.2源码分析43
.8ADC46
.8.1使用说明46
.8.2源码分析47
.9DA49
.9.1使用说明49
.10实时时钟50
.10.1使用说明50
.10.2源码分析51
.11看门狗53
.11.1使用说明53
.12中断控制器54
.12.1使用说明54
.12.2源码分析55
.13锁相环PLL58
.13.1使用说明58
.13.2源码分析59
.14IAP61
.14.1使用说明61
.14.2源码分析64
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(stop
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LPC213x 系列 底层 硬件 驱动 函数库