⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart0.c

📁 一个在PROTEUS 中方真lpcarm的ucosii移植
💻 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 + -