zoukankan      html  css  js  c++  java
  • [国嵌攻略][056][串口驱动程序设计]

    初始化串口

    1.配置引脚功能

    在原理图上找到串口引脚,配置成RXD和TXD功能

    2.设置数据格式

    ULCON(0x50000000)用来设置数据格式

    3.设置工作模式

    在操作系统中,串口一般工作在中断模式或DMA模式,但是在引导中串口一般工作在轮询模式,UCON(0x50000004)用来设置工作模式

    4.设置波特率

    UBRDIV(0x50000028)用来设置波特率,串口使用的时钟是PCLK。

    UBRDIV = (int)(PCLK/BAUD*16)-1

    发送数据

    1.判断发送缓冲是否为空

    UTRSTAT(0x50000010)的第2位用来判断发送FIFO是否为空

    2.发送数据

    UTXH(0x50000020)用来发送数据

    接收数据

    1.判断接收缓冲是否不为空

    UTRSTAT(0x50000010)的第1位用来判断接收FIFO是否不为空

    2.接收数据

    URXH(0x50000024)用来接收数据

    /********************************************************************
    *名称:uart
    *作者:D
    *时间:2015.11.08
    *功能:串口驱动
    ********************************************************************/
    
    /********************************************************************
    *							 宏定义
    ********************************************************************/
    #define GPHCON   ( (*(volatile unsigned long *)0x56000070) )   //GPH组控制寄存器
    #define ULCON0   ( (*(volatile unsigned long *)0x50000000) )   //UART0线控制寄存器
    #define UCON0    ( (*(volatile unsigned long *)0x50000004) )   //UART0控制寄存器
    #define UBRDIV0  ( (*(volatile unsigned long *)0x50000028) )   //UART0波特率分频寄存器
    #define UTRSTAT0 ( (*(volatile unsigned long *)0x50000010) )   //UART0发送接收状态寄存器
    #define UTXH0    ( (*(volatile unsigned long *)0x50000020) )   //UART0发送接缓冲寄存器
    #define URXH0    ( (*(volatile unsigned long *)0x50000024) )   //UART0接收接缓冲寄存器
    
    #define PCLK 50000000   //PCLK=1/8*FCLK=50MHz
    #define BUAD 115200     //波特率
    
    /********************************************************************
    *						  函数原型声明
    ********************************************************************/
    
    /********************************************************************
    *名称:init_uart
    *功能:初始化串口
    *********************************************************************/
    void init_uart(){
    	//配置串口引脚
    	GPHCON &= ~(0xF<<4);   //清零GPH[3-2]:0000
    	GPHCON |= 0xA<<4;      //设置GPH2:10 TXD[0],GPH3:10 RXD[0]
    	
    	//设置数据格式
    	ULCON0 = 0x00000003;   //设置word length[1-0]:11 8bit, number of stop bit:0 0bit, parity mode:000 no
    	
    	//设置工作模式
    	UCON0 = 0x00000005;   //设置recevi mode:01, transmit mode:01 polling mode, clock selection:00 PCLK
    	
    	//设置波特率
    	UBRDIV0 = (int)(PCLK/(BUAD*16))-1;
    }
    
    /********************************************************************
    *名称:putc_uart
    *参数:
    	ch   发送字符
    *返回:
    	none
    *功能:发送数据
    *********************************************************************/
    void putc_uart(unsigned char ch){
    	//等待发送缓冲为空
    	while( !(UTRSTAT0&(1<<2)) );   //等待发送缓冲和移位寄存器都为空
    	
    	//发送数据
    	UTXH0 = ch;
    }
    
    /********************************************************************
    *名称:getc_uart
    *参数:
    	none
    *返回:
    	ch   接收字符
    *功能:接收数据
    *********************************************************************/
    unsigned char getc_uart(){
    	unsigned char ch;
    	
    	//等待接收缓冲不为空
    	while( !(UTRSTAT0&(1<<0)) );
    	
    	//接收数据
    	ch = URXH0;
    	
    	return ch;
    }
    
    while(1){
    		ch = getc_uart();
    	
    		if(ch == 0x0D || ch == 0x0A){   //如果输入的是回车或换货,那么输出回车和换行
    			putc_uart(0x0D);
    			putc_uart(0x0A);
    		}else{
    			putc_uart(ch);
    		}
    		
    	}
    
  • 相关阅读:
    Notepad++快捷键
    NAT123内网映射端口
    Maven 导出依赖Jar,生成source.jar,javadoc.jar
    自定义javascript log方法
    AmazeUI定制
    模板框架
    jquery checkbox全选 获取值
    首页导航点击A连接跳转并添加上背景色,
    Controller中的方法利用ip跨域访问
    Datatable转成List
  • 原文地址:https://www.cnblogs.com/d442130165/p/4962247.html
Copyright © 2011-2022 走看看