zoukankan      html  css  js  c++  java
  • TQ2440之串口

     宏定义:

     #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020) = ch //串口发送缓冲寄存器
     #define RdURXH0()   (*(volatile unsigned char *)0x50000024)      //串口接受缓冲寄存器 
     #define WrUTXH1(ch) (*(volatile unsigned char *)0x50004020) = ch
     #define RdURXH1()   (*(volatile unsigned char *)0x50004024)
     #define WrUTXH2(ch) (*(volatile unsigned char *)0x50008020) = ch
     #define RdURXH2()   (*(volatile unsigned char *)0x50008024)

     串口初始化:

     void Uart_Init(int pclk,int baud)
     {    
       int i;   
        CLKCON |= (1<<10); //开启串口0时钟 
        GPHCON = 0x0000a0;//设置UART0、UART1、UART2端口 
        GPHUP = 0x7fff;//上拉失能 
       UFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable    
        UMCON0 = 0x0;   //UART chaneel 0 MODEM control register, AFC disable    
    //UART0    
        ULCON0 = 0x3;  //正常模式、一位停止位、无校验位、正常模式     
        UCON0  = 0x245;   //(接收和发送)中断请求或查询模式、产生接收错误状态中断,禁止接收超时中断、中断模式:接收-边沿;发送-电平;时钟PCLK        
       UBRDIV0 = (int)(PCLK/(16*baud))-1;   //Baud rate divisior register 0    
       for(i=0;i<100;i++);
    }

     串口选择:

    1 void Uart_Select(int ch)//串口选择
    2 {    
    3   whichUart = ch;
    4 }

     串口发送一个字节:

     1 void Uart_SendByte(unsigned char data)//发送一个字节
     2 { 
     3   if(whichUart==0) 
     4   { 
     5     if(data=='\n') 
     6     {   
     7       while(!(UTRSTAT0 & 0x2));   
     8       WrUTXH0('\r');  
     9     } 
    10     while(!(UTRSTAT0 & 0x2));   //等待发送缓冲区为空 
    11     WrUTXH0(data);
    12   } 
    13   else if(whichUart==1) 
    14   { 
    15     if(data=='\n') 
    16     {  
    17       while(!(UTRSTAT1 & 0x2));   
    18       rUTXH1 = '\r';  
    19     }  
    20     while(!(UTRSTAT1 & 0x2));   //Wait until THR is empty.  
    21     rUTXH1 = data;
    22   }    
    23   else if(whichUart==2) 
    24   { 
    25     if(data=='\n') 
    26     {   
    27       while(!(UTRSTAT2 & 0x2));    
    28       rUTXH2 = '\r';  
    29     }  
    30     while(!(UTRSTAT2 & 0x2));   //Wait until THR is empty.   
    31     rUTXH2 = data; 
    32   }      
    33} 

    串口发送字符串:

    void Uart_SendString(char *pt)
    {
        while(*pt)
            Uart_SendByte(*pt++);
    }
    
    void uart_send_byte(char data)
    {
        while (!(UTRSTAT0 & TXD0READY));
            UTXH0 = data;
    }
    void uart_send_string(char *string)
    {
        while(*string)
        {
            uart_send_byte(*string++);
        }
    }
    
    #include <stdarg.h> 
    #include <stdio.h> 
    void Uart_Printf(char *fmt,...)
    {
        va_list ap;
        char string[256];
        
        va_start(ap,fmt);
        vsprintf(string,fmt,ap);
        uart_send_string(string);
        va_end(ap);
    }
    在操作系统任务中使用此函数输出浮点数时会输出0.0000,是因为任务堆栈对齐问题,堆栈定义时进行对齐处理即可。如下所示:
    __align(8) OS_STK Task2Stk [Task2StkLengh];

     主程序:

    int main()
    {
        SystemClockInit();
        Uart_Init(115200);
        Uart_Select(0);
        Uart_SendString("pppppppppppzzzzzzzzzzzzzzzz\r\n");    
        while(1);
    }
  • 相关阅读:
    后台java,前台extjs文件下载
    gridPanel可拖拽排序
    Extjs 获取输入框焦点,并选中值
    java poi对Excel文件加密
    java poi 读取有密码加密的Excel文件
    SSL 与 数字证书 的基本概念和工作原理
    splay树
    树剖版lca
    树链剖分
    kruskal重构树
  • 原文地址:https://www.cnblogs.com/zpehome/p/2823447.html
Copyright © 2011-2022 走看看