?? uart0.c
字號(hào):
/****************************************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;
/*********************************************************************************************************
** 函數(shù)名稱: UART0Init
** 功能描述: 串口初始化
** 輸 入: bps 波特率
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊: 無
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void UART0Init(uint32 bps)
{
uint16 Fdiv;
PINSEL0 = (PINSEL0 & (~0x0000000f)) | 0x05; // 不影響其它管腳連接,設(shè)置I/O連接到I2C
U0LCR = 0x83; // 允許訪問分頻因子寄存器
Fdiv = (Fpclk / 16) / bps; // 設(shè)置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03; // 禁止訪問分頻因子寄存器// 且設(shè)置為8,1,n
U0IER = 0x09; //允許接收中斷和modem中斷
U0FCR = 0x07; // FIFO控制,無FIFO
Uart0Sem = OSSemCreate(0);
}
/*********************************************************************************************************
** 函數(shù)名稱: UartSendString
** 功能描述: 通過串口發(fā)送數(shù)據(jù)
** 輸 入: Data 待發(fā)送數(shù)據(jù)指針
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊: 無
**------------------------------------------------------------------------------------------------------
** 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++; // 發(fā)送數(shù)據(jù)
while( (U0LSR&0x20)==0 ); // 等待數(shù)據(jù)發(fā)送完畢
}
return(0);
}
/*********************************************************************************************************
** 函數(shù)名稱: UartSendChar
** 功能描述: 通過串口發(fā)送數(shù)據(jù)
** 輸 入: Data 待發(fā)送數(shù)據(jù)指針
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊: 無
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 UartSendChar(char Data)
{
U0THR = Data; // 發(fā)送數(shù)據(jù)
while( (U0LSR&0x20)==0 ); // 等待數(shù)據(jù)發(fā)送完畢
return(0);
}
/*********************************************************************************************************
** 函數(shù)名稱: UART0Getch
** 功能描述: 從UART0接受一個(gè)字節(jié)
** 輸 入: 無
** 輸 出: 接收到的數(shù)據(jù)
** 全局變量: 無
** 調(diào)用模塊: 無
**------------------------------------------------------------------------------------------------------
** 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)
{ /* 沒有收到數(shù)據(jù) */
U0IER = U0IER | 0x01; /* 允許接收中斷 */
OSSemPend(Uart0Sem, 0, &err); /* 等待接收數(shù)據(jù) */
}
err = U0RBR; /* 讀取收到的數(shù)據(jù) */
OS_EXIT_CRITICAL();
return err;
}
/*********************************************************************************************************
** 函數(shù)名稱: GetAllChar
** 功能描述: 從串口接受一幀數(shù)據(jù)
** 輸 入: 無
** 輸 出: 無
** 全局變量: Frame_Received index
** 調(diào)用模塊: UART0Getch()
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void GetAllChar()
{
}
/*********************************************************************************************************
** 函數(shù)名稱: UART0_Exception
** 功能描述: 串口中斷函數(shù)
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊: 無
**------------------------------------------------------------------------------------------------------
** 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: // 接收數(shù)據(jù)可用
OSSemPost(Uart0Sem); /* 通知接收任務(wù) */
U0IER &= (~0x01); // 禁止接收及字符超時(shí)中斷
break;
case 0x06: // 接收線狀態(tài)
temp = U0LSR;
break;
case 0x0c: // 字符超時(shí)指示
OSSemPost(Uart0Sem); /* 通知接收任務(wù) */
U0IER &= (~0x01); // 禁止接收及字符超時(shí)中斷
break;
default:
break;
}
}
VICVectAddr = 0; // 通知中斷控制器中斷結(jié)束
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -