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

📄 uart0.c

📁 这是基于arm的嵌入式操作系统基础性实验ADC实验
💻 C
字号:
#define IN_UART0
#include   "config.h"
#define	UCOS_UART0	0	
#define	UART_BPS	9600				// 串口通讯波特率
static OS_EVENT *Uart0Sem;

/*******************************************************************************
*名称: UART0_Init()
*功能: 初始化串口0.设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
*******************************************************************************/



#if UCOS_UART0
uint8 UART0_Init (void)
{
	uint16 Fdiv;
	
	PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05;	// 设置I/O连接到UART0
	
	U0LCR = 0x83;							// DLAB=1,允许设置波特率
	Fdiv  = (Fpclk / 16) / UART_BPS;		// 设置波特率
	U0DLM = Fdiv / 256;
	U0DLL = Fdiv % 256;
	U0LCR = 0x03;
}
#else



uint8 UART0_Init (void)
{
    uint16 Fdiv;
    
    PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05;
    U0LCR = 0x83;
    Fdiv = (Fpclk / 16) / UART_BPS;
    U0DLM = Fdiv / 256;
    U0DLL = Fdiv % 256;
    U0LCR = 0x03;
    
    Uart0Sem = OSSemCreate(0);
    if (Uart0Sem !=NULL)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}
#endif
/*******************************************************************************
*名称: UART0_SendByte()
*功能: 向串口发送字节数据,并等待发送完毕
*******************************************************************************/

#if UCOS_UART0
void UART0_SendByte(uint8 data)
{   U0THR=data;                     //发送数据
    while((U0LSR&0x40)==0);         //等待数据发送完毕
    {
   	  uint32 i;
      for(i=0; i<50; i++);
   }
}
#else



void UART0_SendByte(uint8 data)
{
    OS_ENTER_CRITICAL();
    U0THR = data;
    while ((U0LSR & 0x40)==0);
    {
        uint32 i;
        for(i=0; i<50; i++);
    }    
    OS_EXIT_CRITICAL();
}
#endif
/*******************************************************************************
*名称:UART0_SendStr()
*功能:向串口发送一字符串
*******************************************************************************/

#if UCOS_UART0
void UART0_SendStr(uint8 *str)
{  while(1)
  { if(*str=='\0') 
    {UART0_SendByte('\r');
     UART0_SendByte('\n');
         break;
      } 
  UART0_SendByte(*str++);           //发送数据
  }
}

char UART0_RecvByte(void)
{  while(!(U0LSR&0x01));
   return U0RBR;
}
#else




void  UART0SendStr(char *str)
{  
    OS_ENTER_CRITICAL();
    while(1)
    {  
        if( *str == '\0' ) break;
        UART0_SendByte(*str++);				// 发送数据
    }
    OS_EXIT_CRITICAL();
}

void UART0_SendStr(uint8 *str)
{
    OS_ENTER_CRITICAL();
    while(1)
    {
        if(*str=='\0')
        {
            UART0_SendByte('\r');
            UART0_SendByte('\n');  
            break;
        }
    UART0_SendByte(*str++);
    }
    OS_EXIT_CRITICAL();
}

char UART0_RecvByte(void)
{
    uint8 err;
    OS_ENTER_CRITICAL();
    while((U0LSR & 0x00000001) == 0 )    
    {
        OSSemPend(Uart0Sem, 0, &err);
    }
    OS_EXIT_CRITICAL();
    return U0RBR;
}
#endif


⌨️ 快捷键说明

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