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

📄 uart0.c

📁 ucos2.83在LPC2148上的例子
💻 C
字号:
/****************************************************************************

****************************************************************************/

#define UART0_GLOBALS

#include <includes.h>


#define  UART_BPS	9600			/* 定义通讯波特率 */



#define  APP_TASK_UART0_PRIO            9
#define  APP_TASK_UART0_STK_SIZE      500

OS_STK   AppTaskUart0Stk[APP_TASK_UART0_STK_SIZE];

/*
*********************************************************************************************************
*                                                VARIABLES
*********************************************************************************************************
*/

static void Uart0Task (void *p_arg);

/****************************************************************************

****************************************************************************/
void DelayNS(unsigned int dly)
{  
    INT32U  i;

   for(; dly>0; dly--)
      for(i=0; i<50000; i++);
}

/****************************************************************************

****************************************************************************/
void  UART0_Ini(void)
{  
   INT16U Fdiv;
   PINSEL0 = 0x00000005;
   
   U0LCR = 0x83;		            // DLAB = 1,可设置波特率
   Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
   U0DLM = Fdiv / 256;
   U0DLL = Fdiv % 256;
   U0LCR = 0x03;
   
   U0IER = 0X01;
   
   	VICIntSelect       &= ~(1 << VIC_UART0);                   /* Enable interrupts                                        */
    VICVectAddr4        = (CPU_INT32U)Uart0_ISR_Handler;      /* Set the vector address                                   */
    VICVectCntl4        = 0x20 | VIC_UART0;                    /* Enable vectored interrupts                               */
    VICIntEnable        = (1 << VIC_UART0);                    /* Enable Interrupts                                        */

}

/************************************************************************
*Author:
*Name:        Uart0_ISR_Handler
*Description:  
*Parameter:
*Return:      
*Note:         
*************************************************************************/

void  Uart0_ISR_Handler (void)
{
	INT8U dat;
	
	U0IER = 0;
	dat = U0RBR;
	switch(ComState)
	{
		case Header:
			if( dat == Tager )
			{
				rcv_data[ComState] = dat;
				ComCount = 0;
				ComState++;
			}
															break;
		case Longth:
			if( dat <= MaxQueBufSize)
            {
            	rcv_data[ComState] = dat;
            	ComState++;
            }
            else
            {
				ComState = Header;
			}
															break;
		default:
			if( ComState < rcv_data[Longth] )
            {
             	rcv_data[ComState] = dat;
            	ComState++;
            }
            else if( ComState == rcv_data[Longth] )
            {
            	rcv_data[ComState] = dat;
             	ComState = Header;
             	
				PushQue(&ShellQue, rcv_data, MaxQueBufSize);
            }
            else
            	ComState = Header;
															break;
	}

	U0IER = 1;
    VICVectAddr = 0;
}

/****************************************************************************

****************************************************************************/
void UART0_SendByte(unsigned int data)
{  
    U0THR = data;				   

   while( (U0LSR&0x40)==0 );   
}

/****************************************************************************

****************************************************************************/
void  UART0_SendStr(char *str)
{  
    while(1)
   {  if( *str == '\0' ) break;
      UART0_SendByte(*str++);	    
   }
}

/************************************************************************
*Author:
*Name:        CMDInit
*Description:  
*Parameter:
*Return:      
*Note:         
*************************************************************************/
INT8U CMDInit(CMD *cmd_cb)
{
	INT8U      err;
	OSTaskCreateExt(Uart0Task,
                    (void *)cmd_cb,
                    (OS_STK *)&AppTaskUart0Stk[APP_TASK_UART0_STK_SIZE - 1],
                    APP_TASK_UART0_PRIO,
                    APP_TASK_UART0_PRIO,
                    (OS_STK *)&AppTaskUart0Stk[0],
                    APP_TASK_UART0_STK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

#if OS_TASK_NAME_SIZE > 13

    OSTaskNameSet(APP_TASK_UART0_PRIO, (INT8U*)"UART0", &err);  
    
#endif

	StartQue(&ShellQue);

	
	return 0;
}

/************************************************************************
*Author:
*Name:        CMDTask
*Description:  
*Parameter:
*Return:      
*Note:         
*************************************************************************/

static INT8U CmdTemp[MaxQueBufSize+1];



static void Uart0Task (void *p_arg)
{
	CMD* cmd_cb = (CMD *)p_arg;
	(void)p_arg;
     
    while (1)
    {
    	if(GetQue(&ShellQue, CmdTemp, MaxQueBufSize) == 1)
    	{
    		//DelayNS(50);
    		if(CmdTemp[2] == 1)
    		{
    			cmd_cb->request = CMD_GET_TIME;
    		}
    		else if(CmdTemp[2] == 2)
    		{
    			cmd_cb->request = CMD_SET_TIME;
    		}
    		else if(CmdTemp[2] == 3)
    		{
    			cmd_cb->request = CMD_LED_ON;
    		}
    		else if(CmdTemp[2] == 4)
    		{
    			cmd_cb->request = CMD_LED_OFF;
    		}
    			
    		OSSemPost( event_cmd);//有命令
    	}
    	else
    	{
    		//printf("work ok!");
    		OSTimeDlyHMSM(0, 0, 1, 0);//无命令
    		
    	}
    }
}




⌨️ 快捷键说明

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