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

📄 serial.c

📁 一个小型的嵌入式操作系统内核,可用于多种硬件平台
💻 C
字号:
/**************************************************************************************************
                                      EDL RTOS Kernel
                              (c) Copyright 2005, Wu Jun
                                    All Rights Reserved    
                For further information, please visit http://www.enjoydigitallife.com

* Description:      None
* History:          
    Date                         Remarks
    2005-01-06                   Created initial version
    2005-12-12                   Finished the version 2.01
**************************************************************************************************/


#include "LPC2294.h"
#include "datatype.h"
#include "board.h"
#include "led.h"
#include "serial.h"



/**************************************************************************************************
* description: set baud rate, 1 stop bit, no check
**************************************************************************************************/

void  uart0_init(U32 baudRate)
{  
   U32 Fdiv;
   PINSEL0 = 0x00000005;
   U0LCR = 0x83;		            // DLAB = 1,enable baud rate setting
   Fdiv = (Fpclk / 16) / baudRate;  // set baud rate
   U0DLM = Fdiv / 256;							
   U0DLL = Fdiv % 256;						
   U0LCR = 0x03;
}
				
void  uart0_sendByte(U8 data)
{  
   U0THR = data;				    
   while( (U0LSR & 0x40) == 0 );	    

}

void  uart0_sendWord(U32 data)
{  
   U8 i;
   U32 buf = data;
   for( i = 0; i < 4; i++ )
   {
        uart0_sendByte((U8)(( buf & 0xff000000 ) >> 24 ));
        buf <<= 8;
   }

}


void  uart0_sendASCIIByte(U8 data)
{  
    U8 i,j,temp;
    temp = data;
    for( j = 0; j < 2; j++ )
    {
        i = ( U8 )( ( temp & 0xf0 ) >> 4);
        if( i <= 9 )
        {
            U0THR = i + '0';
        }
        else
        {
            U0THR = i + 'A' - 10;        
        }
        temp <<= 4;
        while( (U0LSR & 0x40) == 0 );	          
    }

}

void  uart0_sendASCIIWord(U32 data)
{  
    U8 i;
    U32 buf = data;

    
    for( i = 0; i < 4; i++ )
    {
        uart0_sendASCIIByte((U8)(( buf & 0xff000000 ) >> 24 ));
        buf <<= 8;
    }
    uart0_sendByte( 0x0d );
    
    
}








/*
#define     UART0_REV_BUFFER_LENGTH     64
#define     UART0_FIFO_LENGTH           16



U8 revBuffer[UART0_REV_BUFFER_LENGTH];
U8 startIndex = 0;
U8 endIndex = 0;




void __irq uart0_irq(void)
{  
    U8 revStatus;
    U32 i;

    while( !(U0IIR & 0x01) )
    {               
        
        
        led_dispChar(U0IIR);                         //debug
        for( i = 0; i < 1000; i++);
        led_dispChar(0x00);
        for( i = 0; i < 1000; i++);
        
                                           
        switch (U0IIR & 0x0e)
        {
            case 0x02:                                
                
                //led_dispChar(0xf0);         //debug
                
                
                for (i = 0; i < UART0_FIFO_LENGTH; i++) 
                {
                    if ( endIndex != startIndex )
                    {
                        U0THR = revBuffer[endIndex];
                        endIndex++;
                        endIndex %= UART0_REV_BUFFER_LENGTH;
                    }
                    else
                    {
                        U0IER &= (~0x02);               
                    }
                }
                break;
                
            case 0x04:                                  
            case 0x0c:                                 
             
                
                while( U0LSR & 0x01 )
                {
                    revBuffer[startIndex] = U0RBR;
                    startIndex++;
                    startIndex %= UART0_REV_BUFFER_LENGTH;
                }
                
                for (i = 0; i < UART0_FIFO_LENGTH; i++) 
                {
                    if ( endIndex != startIndex )
                    {
                        U0THR = revBuffer[endIndex];
                        endIndex++;
                        endIndex %= UART0_REV_BUFFER_LENGTH;
                    }
                    else
                    {
                        break;
                    }
                }
                
                
                //while (!(U0LSR & 0x20));

                //U0IER = 0x07;
                break;
                
            case 0x06:                                  
                revStatus = U0LSR;
                break;

            default :
                break;
        }
    } 
    
    VICVectAddr = 0x00;
}



        
void uart0_init(U32 baudRate)
{
    U16 Fdiv;
    
    PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05;   

    U0LCR = 0x80;                               
    Fdiv = (Fpclk / 16) / baudRate;                 
    U0DLM = Fdiv / 256;							
	U0DLL = Fdiv % 256;						
    U0LCR = 0x03;                               

	U0IER = 0x05;                              
    U0FCR = 0x87;                             

	VICVectCntl1 = ( 0x20 | 6 );
	VICVectAddr1 = (U32)uart0_irq; 
	VICIntEnable = (U32)( 1 << 6 );

} 



*/











⌨️ 快捷键说明

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