📄 uart0.c
字号:
/****************************************Copyright (c)**************************************************
**--------------File Info-------------------------------------------------------------------------------
** File name: uart0.C
** Last modified Date:2007-12-20
** Last Version: 1.0
** Descriptions: 基于LPC2100、LPC2200系列ARM7微控制器的UART0
**------------------------------------------------------------------------------------------------------
** Created by: Rein Lee
** Created date: 2007-12-20
** Version: 1.0
** Descriptions: The original version
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
********************************************************************************************************/
#include "config.h"
static OS_EVENT *Uart0Sem;
/*********************************************************************************************************
** 函数名称: UART0Init
** 功能描述: 串口初始化
** 输 入: bps 波特率
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void UART0Init(uint32 bps)
{
uint16 Fdiv;
PINSEL0 = (PINSEL0 & (~0x0000000f)) | 0x05; // 不影响其它管脚连接,设置I/O连接到I2C
U0LCR = 0x83; // 允许访问分频因子寄存器
Fdiv = (Fpclk / 16) / bps; // 设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03; // 禁止访问分频因子寄存器// 且设置为8,1,n
U0IER = 0x09; //允许接收中断和modem中断
U0FCR = 0x07; // FIFO控制,无FIFO
Uart0Sem = OSSemCreate(0);
}
/*********************************************************************************************************
** 函数名称: UartSendString
** 功能描述: 通过串口发送数据
** 输 入: Data 待发送数据指针
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 UartSendString(char *Data)
{
while(1)
{
if( *Data == '\0' ) break;
U0THR = *Data++; // 发送数据
while( (U0LSR&0x20)==0 ); // 等待数据发送完毕
}
return(0);
}
/*********************************************************************************************************
** 函数名称: UartSendChar
** 功能描述: 通过串口发送数据
** 输 入: Data 待发送数据指针
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 UartSendChar(char Data)
{
U0THR = Data; // 发送数据
while( (U0LSR&0x20)==0 ); // 等待数据发送完毕
return(0);
}
/*********************************************************************************************************
** 函数名称: UART0Getch
** 功能描述: 从UART0接受一个字节
** 输 入: 无
** 输 出: 接收到的数据
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 UART0Getch(void)
{
uint8 err;
OS_ENTER_CRITICAL();
while ((U0LSR & 0x00000001) == 0)
{ /* 没有收到数据 */
U0IER = U0IER | 0x01; /* 允许接收中断 */
OSSemPend(Uart0Sem, 0, &err); /* 等待接收数据 */
}
err = U0RBR; /* 读取收到的数据 */
OS_EXIT_CRITICAL();
return err;
}
/*********************************************************************************************************
** 函数名称: GetAllChar
** 功能描述: 从串口接受一帧数据
** 输 入: 无
** 输 出: 无
** 全局变量: Frame_Received index
** 调用模块: UART0Getch()
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void GetAllChar()
{
}
/*********************************************************************************************************
** 函数名称: UART0_Exception
** 功能描述: 串口中断函数
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void UART0_Exception(void)
{
uint8 IIR, temp;
OS_ENTER_CRITICAL();
while(((IIR=U0IIR) & 0x01) == 0)
{ // 有中断未处理完
switch (IIR & 0x0f)
{
case 0x04: // 接收数据可用
OSSemPost(Uart0Sem); /* 通知接收任务 */
U0IER &= (~0x01); // 禁止接收及字符超时中断
break;
case 0x06: // 接收线状态
temp = U0LSR;
break;
case 0x0c: // 字符超时指示
OSSemPost(Uart0Sem); /* 通知接收任务 */
U0IER &= (~0x01); // 禁止接收及字符超时中断
break;
default:
break;
}
}
VICVectAddr = 0; // 通知中断控制器中断结束
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -