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

📄 uart.c.bak

📁 UcosiiForLPC21xx 在ads1.2 建立的工程
💻 BAK
字号:
#include "config.h"
#include "uart.h"
#include "COMMRTOS.h"

typedef  unsigned char  uchar;
typedef  unsigned int   uint; 

void  CommISR(int CommNum);
void __irq Comm1ISR(void)
{
  CommISR(COMM1);	
  VICVectAddr =0;
}

void __irq Comm2ISR(void)
{
  CommISR(COMM2);
  VICVectAddr = 0;		
}

void  CommInit(int CommNum,int Baudrate)
{   
    volatile uchar *BaseAddr;
    
    if(CommNum==COMM1)
     {
       BaseAddr=UART0_BASE;    
     } 
    else if(CommNum==COMM2)
     {
       BaseAddr=UART1_BASE;      
     }  
    else
        return;   
      	
    CommInit(CommNum);
  	    	       
    *(BaseAddr+LCR)   = 0x83;		        
    *(BaseAddr+DLL)   = Fpclk/16/Baudrate%256;
    *(BaseAddr+DLM)   = Fpclk/16/Baudrate/256;

    *(BaseAddr+LCR)   = StopBitNum1|DataBitNum8;
    *(BaseAddr+FCR)   = RxTriLevel08;
    *(BaseAddr+IER)   = RxIntEn | TxIntEn;  
    
    if(CommNum==COMM1)
     {
       IRQOpen(IRQ_UART0,IRQ_UART0,(int)Comm1ISR);
     } 
    else 
     {    
       IRQOpen(IRQ_UART1,IRQ_UART1,(int)Comm2ISR);	 
     }   

}
//----------------------------------------------------------
void  CommISR(int CommNum)
{
	int   i;
	uchar c;
	uchar err;
	uchar *BaseAddr;
		 
    if(CommNum==COMM1)
       BaseAddr=UART0_BASE;
    else if(CommNum==COMM2)
       BaseAddr=UART1_BASE;      
    else
        return;  
         
    while(1)				        //接收中断和发送中断可能同时发生
	  {
		switch( *(BaseAddr+IIR) & 0x07 )
 		{
              case  0x01:				    //没有中断返回
		            return;

    		  case  0x04: 			        //接收中断
		            for(i=0;i<16;i++)
		            {
			           if( (*(BaseAddr+LSR) & 0x01)==0 )//FIFO中的数据读完
			                break;
			           CommPutRxChar(CommNum,*(BaseAddr+RBR));   			                                    			
			        }					 
            	    break;

    		  case  0x02: 			        //发送中断
		            for(i=0;i<16;i++)
		            {
			           c=CommGetTxChar(CommNum,&err)
    		           if(err==COMM_NO_ERR)
    		           {
    		           	*(BaseAddr+THR ) = c;
    		           }
    		           else
    		           {
    		             break;
    		           }	
			        }					     		            		            		        
            	    break;
		}
	}
}

void  CommSendData(int CommNum,uchar *TxBuff,int Len)
{	  
   uchar sbuf;
   volatile uchar *BaseAddr;
    
   if(CommNum==COMM1)
       BaseAddr=UART0_BASE;
   else if(CommNum==COMM2)
       BaseAddr=UART1_BASE;      
   else
        return;  
          
   while(Len--)
     CommPutChar(CommNum,*TxBuff++,0);
}

void StartSent(uchar ch,uchar c)
{
   uchar oserr;
   volatile uchar *BaseAddr;
    
   if(CommNum==COMM1)
       BaseAddr=UART0_BASE;
   else if(CommNum==COMM2)
       BaseAddr=UART1_BASE;      
   else
        return;  
   CommGetTxChar(ch,&oserr);
   
   *(BaseAddr+THR ) = c;       	
}

⌨️ 快捷键说明

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