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

📄 uart0.c

📁 LPC2132的串口中断程序设计
💻 C
字号:
#include "..\src\config.h"

/****************************************************************************
* 名称:uart0_pin_set()
* 功能:串口0 引脚配置
* 返回值:无
****************************************************************************/
void uart0_pin_set()
{
    PINSEL0 &= 0xfffffff5;                       // PINSEL0[3:0] = 0b0101
    PINSEL0 |= 0x00000005;

	PINSEL0 &= 0xfffff3ff;						 // UART0CNTL485

	IO0DIR |= UART0CNTL485;

	IO0CLR = UART0CNTL485;
}

/****************************************************************************
* 名称:uart0_baudrate_set()
* 功能:串口0 波特率设置
* 入口参数:
*     BaudRate: 波特率 300,600,1200,2400,4800,9600,
*                      19200,38400,43000,56000,57600,115200
* 返回值:无
****************************************************************************/
void uart0_baudrate_set(uint32 BaudRate)
{
    switch(BaudRate)
    {
        case 300 :
        case 600 :
        case 1200 :
        case 2400 :
        case 4800 :
        case 9600 :
        case 19200 :
        case 38400 :
        case 43000 :
        case 56000 :
        case 57600 :
        case 115200 : 
          	U0LCR |= 0x80;                       // DLAB = 1
            BaudRate = (Fpclk >> 4) / BaudRate;
            U0DLM = BaudRate >> 8;
            U0DLL = BaudRate & 0xff;
            U0LCR &= 0x7f;                       // DLAB = 0 
            break;      
    } 
}

/****************************************************************************
* 名称:uart0_bytelen_set()
* 功能:串口0 字符长度设置
* 入口参数:
*     ByteLen:  字符长度  5,6,7,8
* 返回值:无
****************************************************************************/
void uart0_bytelen_set(uint8 ByteLen)
{
    switch(ByteLen)
    {
        case 5 : 
            U0LCR &= 0xfc;                       // U0LCR[1:0] = 0b00       
            break;
        
        case 6 :
            U0LCR &= 0xfd;                       // U0LCR[1:0] = 0b01
            U0LCR |= 0x01;               
            break;
        
        case 7 :
            U0LCR &= 0xfe;                       // U0LCR[1:0] = 0b10
            U0LCR |= 0x02;               
            break;
        
        case 8 : 
            U0LCR |= 0x03;                       // U0LCR[1:0] = 0b11         
            break;
    }
}

/****************************************************************************
* 名称:uart0_stoplen_set()
* 功能:串口0 停止位设置
* 入口参数:
*     StopLen:  停止位个数  1,2
* 返回值:无
****************************************************************************/
void uart0_stoplen_set(uint8 StopLen)
{
    switch(StopLen)
    {
        case 1 : 
            U0LCR &= 0xfb;                       // U0LCR[2] = 0b0       
            break;
            
        case 2 :
            U0LCR |= 0x04;                       // U0LCR[2] = 0b1
            break;   
    }
}

/****************************************************************************
* 名称:uart0_parity_set()
* 功能:串口0 奇偶位设置
* 入口参数:
*     Parity :  奇偶位选择  0-奇校验,1-偶校验,2-强制为1,3-强制为0,4-无校验
* 返回值:无
****************************************************************************/
void uart0_parity_set(uint8 Parity)
{
   switch(Parity)
   {
        case ODD : 
            U0LCR &= 0xcf;                       // U0LCR[5:3] = 0b001
            U0LCR |= 0x08;       
            break;
        
        case EVEN : 
            U0LCR &= 0xdf;                       // U0LCR[5:3] = 0b011
            U0LCR |= 0x18;       
            break;
        
        case ALWAYS1 :
            U0LCR &= 0xef;                       // U0LCR[5:3] = 0b101
            U0LCR |= 0x28;         
            break;
        
        case ALWAYS0 :
            U0LCR |= 0x38;                       // U0LCR[5:3] = 0b111
            break;
        
        case NOCHECK :
            U0LCR &= 0xf7;                       // U0LCR[5:3] = 0bxx0
            break;
    }
}

/****************************************************************************
* 名称:uart0_space_enable()
* 功能:串口0 间隔帧使能
* 入口参数:无
* 返回值:无
****************************************************************************/
void uart0_space_enable()
{
    U0LCR |= 0x40;                               // U0LCR[6] = 0b1
}

/****************************************************************************
* 名称:uart0_space_disable()
* 功能:串口0 间隔帧禁止
* 入口参数:无
* 返回值:无
****************************************************************************/
void uart0_space_disable()
{
    U0LCR &= 0xbf;                               // U0LCR[6] = 0b0
}

/****************************************************************************
* 名称:uart0_fifodepth_set()
* 功能:串口0 FIFO 深度设置
* 入口参数:
*     FifoDepth:  1个字符,4个字符,8个字符,14个字符
* 返回值:无
****************************************************************************/
void uart0_fifodepth_set(uint8 FifoDepth)
{
    switch(FifoDepth)
    {
        case 1 :
            U0FCR = 0x01;                        // U0FCR[7:6] = 0b00,U0FCR[0] = 0b1 
            break;
        
        case 4 :
            U0FCR = 0x41;                        // U0FCR[7:6] = 0b01,U0FCR[0] = 0b1
            break;
            
        case 8 :
            U0FCR = 0x81;                        // U0FCR[7:6] = 0b10,U0FCR[0] = 0b1
            break;
            
        case 14 :
            U0FCR = 0xc1;                        // U0FCR[7:6] = 0b11,U0FCR[0] = 0b1
            break;
    }
}

/****************************************************************************
* 名称:uart0_rxfifo_reset()
* 功能:串口0 接收 FIFO 复位
* 入口参数:无
* 返回值:无
****************************************************************************/
void uart0_rxfifo_reset()
{
    U0FCR |= 0x02;                               // U0FCR[1] = 0b1 
}

/****************************************************************************
* 名称:uart0_txfifo_reset()
* 功能:串口0 发送 FIFO 复位
* 入口参数:无
* 返回值:无
****************************************************************************/
void uart0_txfifo_reset()
{
    U0FCR |= 0x04;                               // U0FCR[2] = 0b1 
}
   
/****************************************************************************
* 名称:uart0_sendbyte_software()
* 功能:串口0 软件查询方式发送一个字节
* 入口参数:
*     SendByte: 待发送字节
* 返回值:无
****************************************************************************/
void uart0_sendbyte_software(uint8 SendByte)
{
    U0THR = SendByte;
    while( (U0LSR & 0x20) == 0 );         	     // 等待数据发送                             
}

/****************************************************************************
* 名称:uart0_sendqueue_software()
* 功能:串口0 软件查询方式发送一个队列
*       16字节收发FIFO
* 入口参数:
*     QueueP:    队列指针
*     QueueLen:  队列长度
* 返回值:无
****************************************************************************/

/****************************************************************************
*while( (U0LSR & 0x20) == 0 ); -- U0THR(发送保持器)空
*while( (U0LSR&0x40)==0 );     -- U0THR(发送保持器)空 并且 U0TSR(发送寄存器)空
****************************************************************************/
void uart0_sendqueue_software(uint8 *QueueP, uint8 QueueLen)
{
    uint8 dcnt;
	
	while(QueueLen>15)
    {
        for(dcnt = 0; dcnt < 16; dcnt++, QueueLen--)
        {
            U0THR = *QueueP++;
        }
    
        while( (U0LSR & 0x20) == 0 );            // 等待数据发送
    }
        
    while(QueueLen--)
    {
        U0THR = *QueueP++;    
    }                      
        
    while( (U0LSR & 0x20) == 0 );                // 等待数据发送   
}
    
/****************************************************************************
* 名称:uart0_receivebyte_software()
* 功能:串口0 软件查询方式接收一个字节
* 入口参数:无
* 返回值:
*     RcvByte:  接收字节
****************************************************************************/
uint8 uart0_receivebyte_software()
{
    while( (U0LSR & 0x01) == 0 );         	     // 等待接收数据
    
    return U0RBR;
}

/****************************************************************************
* 名称:uart0_rbrint_enable()
* 功能:串口0 接收中断允许
* 入口参数:无
* 返回值:无
****************************************************************************/
void uart0_rbrint_enable()
{
    U0IER |= 0x01;                              
}

/****************************************************************************
* 名称:uart0_rbrint_disable()
* 功能:串口0 接收中断禁止
* 入口参数:无
* 返回值:无
****************************************************************************/
void uart0_rbrint_disable()
{
    U0IER &= 0xfe;                              
}

/****************************************************************************
* 名称:uart0_threint_enable()
* 功能:串口0 发送中断允许
* 入口参数:无
* 返回值:无
* 可查询寄存器: U0LSR[5]
****************************************************************************/
void uart0_threint_enable()
{
    U0IER |= 0x02;                              
}

/****************************************************************************
* 名称:uart0_threint_disable()
* 功能:串口0 发送中断禁止
* 入口参数:无
* 返回值:无
* 可查询寄存器: U0LSR[5]
****************************************************************************/
void uart0_threint_disable()
{
    U0IER &= 0xfd;                              
}

/****************************************************************************
* 名称:uart0_rxint_enable()
* 功能:串口0 线状态中断允许
* 入口参数:无
* 返回值:无
* 可查询寄存器: U0LSR[4:1]
****************************************************************************/
void uart0_rxint_enable()
{
    U0IER |= 0x04;                              
}

/****************************************************************************
* 名称:uart0_rxint_disable()
* 功能:串口0 线状态中断禁止
* 入口参数:无
* 返回值:无
* 可查询寄存器: U0LSR[4:1]
****************************************************************************/
void uart0_rxint_disable()
{
    U0IER &= 0xfb;                              
}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -