📄 uart0.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 + -