数码相框项目模块【二】 UART
来源:互联网 发布:周杰伦和吴宗宪 知乎 编辑:程序博客网 时间:2024/06/02 17:19
如果要想在串口工具DWN上显示打印信息,使用C语言的标准库是没有效果的,必须利用开发板上的串口,经过CPU来进行输出打印信息,UART模块可以实现输入和输出的功能
(一)配置I /0 寄存器
要在原理图上找到串口,这里我们使用串口0 ( U12 ),需要在原理图上找到接收数据信号 XRXD0 和 传送数据信号 XTXD0 两条信号线,然后在核心板上找到对应的输入输出端口GPH2和GPH3,由此,找到相应的控制寄存器GPHCON,设置为特定功能 RXD[0] 和 TXD[0]
(二)配置特殊寄存器
由规格书可知我们需要配置的特殊寄存器有 ULCON、UCON、UFCON 和 UBRDIV
ULCON0寄存器:8-bit data,no parity,one stop bit
UCON0寄存器: PCLK,polling mode
UFCON0寄存器:Non-FIFO mode
UMCON0寄存器:disable the MODEM mode
UBRDIV寄存器的设置:按照波特率为115200,PCLK=50MHz,根据规格书上的公式计算可得数值为 27 -1
(三)输入输出原理,如下图:
接收字符:当从键盘接受一个字符时,通过URXH0寄存器进行返回,若缓冲区没有字符,则需要一直进行等待
传送字符:直到缓冲区为空时,才进行传送字符,否则就一直进行等待
UART0.C 代码如下
- #include "2440addr.h"
- #include "uart.h"
- #include "string.h"
- #include <stdarg.h>
- #include "stdio.h"
- /*
- Function name : uart0_init
- Description : Uart 0 init
- Input parameter : none
- Return : none
- Others : Disable FIFO function
- */
- void uart0_init(void)
- {
- volatile unsigned int val;
- val = rGPHCON;
- val &= ~((3<<6)|(3<<4));
- val |= (2<<6)|(2<<4);
- rGPHCON = val;
- rULCON0 = 0x03; /*8-bit data , no parity , one stop bit */
- rUCON0 = 0x05; /*PCLK, polling mode*/
- rUFCON0 = 0x00; /*Non-FIFO mode*/
- rUMCON0 = 0x00; /* disable the MODEM mode */
- rUBRDIV0 = UART_BRD; /* baud-rate 115200 */
- }
- /*
- Function name : uart0_putchar
- Description : Output a char from Uart 0 port
- Input parameter : the char value
- Return : none
- Others : Disable FIFO function
- */
- void uart0_putchar(unsigned char c) /*transmit a char value*/
- {
- while (!(rUTRSTAT0 & 2)) ; /* wait until the whole data has been transmited */
- /* write the data to the UTXH0 register , and UART will auto transmit it */
- rUTXH0 = c;
- }
- /*
- Function name : uart0_getchar
- Description : get a char from Uart 0 port
- Input parameter : none
- Return : the char
- Others : Disable FIFO function
- */
- unsigned char uart0_getchar(void) /*receive a char value*/
- {
- /* wait until the whole data has been received */
- while (!(rUTRSTAT0 & 1)) ;
- /* read from URXH0 register directly , and receive the data */
- return rURXH0;
- }
- /*
- Function name : uart0_puts
- Description : Output a char string from Uart 0 port
- Input parameter : the char string
- Return : none
- Others : Disable FIFO function
- */
- void uart0_puts(char *p) //输出一串字符
- {
- while(*p)
- {
- uart0_putchar(*p);
- p++;
- }
- }
- void Uart_Printf(char *fmt,...)
- {
- va_list ap; /* point to the address of parameter-list */
- char string[256];
- va_start(ap,fmt); /*ap point to the address of parameter-list*/
- vsprintf(string,fmt,ap);/*将参数fmt、ap指向的可变参数一起转换成格式*/
- uart0_puts(string); /*把格式化字符串从开发板串口送出去*/
- va_end(ap); /*ap=0 */
- }
UART0.H 代码
- #ifndef _UART_H
- #define _UART_H
- #define PCLK 50000000 // init.c中的clock_init函数设置PCLK为50MHz
- #define UART_CLK PCLK // UART0的时钟源设为PCLK
- #define UART_BAUD_RATE 115200 // 波特率
- #define UART_BRD ((UART_CLK / (UART_BAUD_RATE * 16)) - 1)
- extern void uart0_init(void);
- extern void uart0_putchar(unsigned char c);
- extern unsigned char uart0_getchar(void);
- void uart0_puts(char s[]);
- void Uart_Printf(char *fmt,...) ;
- #endif
- 数码相框项目模块【二】 UART
- 数码相框项目模块【三】 KEY
- 数码相框项目模块【四】 TIMER
- 数码相框项目之LCD模块
- 数码相框项目之触摸屏模块
- 数码相框项目模块【一】 跑马灯
- 数码相框项目
- linux应用项目(一)数码相框(1)数码相框之系统框架
- linux应用项目(一)数码相框(3)数码相框之电子书
- 文件浏览器_数码相框项目总结 (上)
- arm电子相册项目——串口模块篇uart.c
- 数码相框
- 数码相框笔记
- linux应用项目(一)数码相框(2)数码相框之freetype实现矢量字体的显示
- MSP430--UART模块
- UART串口模块
- UART(串口发送模块)
- 韦东山第三期视频数码相框中的电子书项目的ShowOnePage函数解析
- 第一次
- 简单14招助你玩转QQ空间
- 一天
- SQL 表名 与关键字冲突
- 基于ASP与jQuery的注册登录的系统如何构建?
- 数码相框项目模块【二】 UART
- VC小知识
- 行输入输出
- 好野
- 好久没上了
- 这些天
- 我的第一篇日志
- JAVA自学之路
- 【转】见与不见————仓央嘉措