📄 uart.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: UART.c
** Last modified Date: 2006-8-10
** Last Version: v1.0
** Description: PXA27x的BT串口软件包 (查询控制方式)
**
**------------------------------------------------------------------------------------------------------
** Created By: 黄绍斌
** Created date: 2006-8-10
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#define IN_UART
#include "config.h"
// UART时钟频率
#define UART_CLK 14785600
/*********************************************************************************************************
** Function name: UART_Init
** Descriptions: 初始化串口。设置为8位数据位,1位停止位,无奇偶校验
** Input: bps 波特率,最大为115200
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-8-10
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void UART_Init(uint32 bps)
{
uint16 Fdiv;
int i;
// 参数过滤
if(bps>115200) bps = 115200;
// GPIO初始化
GPDR1 = GPDR1 | (1 << (43-32)); // GP43(BTTXD)为输出功能
GPDR1 = GPDR1 & ( ~(1 << (42-32)) ); // GP42(BTRXD)为输入功能
GAFR1_L =GAFR1_L & ( ~(0x0F << ((42-32) *2)) );
GAFR1_L = GAFR1_L |
(01 << ((42-32) *2)) | // 设置引脚连接,BTRXD、BTTXD
(02 << ((43-32) *2)) ;
// 设置UART工作模式
BTIER = 0x40; // 使能UART
for(i=0; i<2000; i++);
BTLCR = 0x83; // 设置UART工作模式,8位数据位,1位停止位,无奇偶校验。DLAB=1,可设置波特率
Fdiv = (UART_CLK / 16) / bps;
BTDLL = Fdiv & 0xFF;// 设置波特率
BTDLH = Fdiv >> 8;
BTFCR = 0xC1; // 接收触发点为32字节,使能FIFO
BTLCR = 0x03; // DLAB=0,可发送/接收数据
for(i=0;i<100;i++);
}
/*********************************************************************************************************
** Function name: UART_SendByte
** Descriptions: 向串口发送字节数据,并等待发送完毕。
** Input: data 要发送的数据
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-8-10
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void UART_SendByte(uint8 data)
{
int i;
while((BTLSR&0x40) == 0); // 等待发送器为空
for(i=0; i<100; i++);
BTTHR = data; // 发送数据
}
/*********************************************************************************************************
** Function name: UART_SendStr
** Descriptions: 向串口发送一字符串。
** 对于'\n'字符,发送时会加入'\r'字符。
** Input: str 要发送的字符串的指针
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-8-10
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void UART_SendStr(char const *str)
{
while(*str != '\0')
{
if(*str == '\n') UART_SendByte('\r');
UART_SendByte(*str++); // 发送数据
}
}
/*********************************************************************************************************
** Function name: UART_GetKey
** Descriptions: 从UART口读取一字节按键数据。
** 会一直等待,直到接收到1字节数据。
** Input: 无
** Output: 返回值即是读出值
** Created by: 黄绍斌
** Created Date: 2006-8-10
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int UART_GetKey(void)
{
int i;
while(!(BTLSR & 0x01));
for(i=0; i<10; i++);
return(BTRBR);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -