传送control嵌入式学习笔记之UART通信协议
2013-05-27 19:32
369 查看
废话就不多说了,开始。。。
UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:
将由计算机外部传送过去的并行数据转换为输出的串行数据流;
将计算机外部来的串行数据转换为字节,供计算机外部使用并行数据的器件使用;
在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流停止奇偶校验;
在输出数据流中加入启停标记,并从接收数据流中删除启停标记;
处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备);
可以处理计算机与外部串行设备的同步管理问题;
异步串口通信协议,任务原理是将传输数据的每个字符以串行方法一名接一名的传输。如下图:
[align=left] [/align]
其中每一名(bit)的意思如下:
起始位:先发出一个逻辑“0”的信号,表示传输字符的开始。
数据位:紧跟起始位以后。数据位的个数可所以4、5、6、7、8等,形成一个字符。平日采取ASCII码。从最低位开始传送,靠时钟来定位。
奇偶校验位:数据位加上这一名后(跟在数据位尾部),使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。
停止位:它是一个字符数据的结束标记。可所以1位、1.5位、2位的高电平(逻辑“1”)。
空闲位:处于逻辑“1”状态,表示当前线路上没有数据的传送。
波特率:是权衡数据传输速率的指针。表示为每秒钟传送的二进制位数(bit数)。例如资料传送速率为120字符/秒,而每个字符为10位,则其传送的波特率为:
10×120 = 1200字符/秒=1200波特。
以上的数据位、奇偶校验位、波特率等均可以在COM接口中设置。也可以在代码中对UART寄存器的各位停止设置,UART寄存器的各位所代表的含义如下:
[align=left] [/align]
下面通过几个小程序,懂得UART通信协议停止数据传输的过程:
每日一道理
只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。
在这里我们使用 uart_init 函数便完成了UART各个位的设置,现在来看看uart_init在系统中是如何定义的:
UART0 --- UART2 就是开发板为我们提供的三个寄存器,通过rUFCON、rUMCON、rULCON、rUCON、rUBRDIV 等引脚的赋值完成UART寄存器的设置。
关于更多ARM开发板的源码,由于CSDN资源分享的页面出现异常无法上传分享,如有需要、给我留言,我发给大家。
“常常都是事情转变人,人却转变不了事情。”既是如此,为何不先转变自己呢?
来日、学习继续!
文章结束给大家分享下程序员的一些笑话语录:
一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”
---------------------------------
原创文章 By
传送和control
---------------------------------
UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:
将由计算机外部传送过去的并行数据转换为输出的串行数据流;
将计算机外部来的串行数据转换为字节,供计算机外部使用并行数据的器件使用;
在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流停止奇偶校验;
在输出数据流中加入启停标记,并从接收数据流中删除启停标记;
处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备);
可以处理计算机与外部串行设备的同步管理问题;
异步串口通信协议,任务原理是将传输数据的每个字符以串行方法一名接一名的传输。如下图:
[align=left] [/align]
其中每一名(bit)的意思如下:
起始位:先发出一个逻辑“0”的信号,表示传输字符的开始。
数据位:紧跟起始位以后。数据位的个数可所以4、5、6、7、8等,形成一个字符。平日采取ASCII码。从最低位开始传送,靠时钟来定位。
奇偶校验位:数据位加上这一名后(跟在数据位尾部),使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。
停止位:它是一个字符数据的结束标记。可所以1位、1.5位、2位的高电平(逻辑“1”)。
空闲位:处于逻辑“1”状态,表示当前线路上没有数据的传送。
波特率:是权衡数据传输速率的指针。表示为每秒钟传送的二进制位数(bit数)。例如资料传送速率为120字符/秒,而每个字符为10位,则其传送的波特率为:
10×120 = 1200字符/秒=1200波特。
以上的数据位、奇偶校验位、波特率等均可以在COM接口中设置。也可以在代码中对UART寄存器的各位停止设置,UART寄存器的各位所代表的含义如下:
[align=left] [/align]
下面通过几个小程序,懂得UART通信协议停止数据传输的过程:
#include "2410lib.h" /********************************************************************************************* * name: uart0_test * func: uart test function * para: none * ret: none * modify: * comment: *********************************************************************************************/ void uart0_test() { char cInput[256]; UINT8T ucInNo=0; char c; uart_init(0,115200,0); //define the baud rate uart_printf("\n UART0 Communication Test Example\n"); uart_printf(" Please input words, then press Enter:\n"); #ifdef BOARDTEST sprintf(&cInput, "Type via UART0 to test."); print_lcd(195,170,0x1c,&cInput); #endif uart_printf(" "); g_nKeyPress = 1; while(g_nKeyPress==1) // only for board test to exit { c=uart_getch(); //uart_sendbyte(c); uart_printf("%c",c); if(c!='\r') cInput[ucInNo++]=c; else { cInput[ucInNo]='\0'; break; } } delay(1000); uart_printf(" \nThe words that you input are: %s\n",cInput); uart_printf(" end.\n"); } void Main(int argc,char **argv) { sys_init(); // Initial s3c2410's Clock, MMU, Interrupt,Port and UART while(1) { uart0_test(); } for(;;); }
每日一道理
只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。
在这里我们使用 uart_init 函数便完成了UART各个位的设置,现在来看看uart_init在系统中是如何定义的:
void uart_init(int nMainClk, int nBaud, int nChannel) { int i; if(nMainClk == 0) nMainClk = PCLK; switch (nChannel) { case UART0: rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits // [10] [9] [8] [7] [6] [5] [4] [3:2] [1:0] // Clock Sel, Tx Int, Rx Int, Rx Time Out, Rx err, Loop-back, Send break, Transmit Mode, Receive Mode // 0 1 0, 0 1 0 0, 01 01 // PCLK Level Pulse Disable Generate Normal Normal Interrupt or Polling rUCON0 = 0x245; // Control register //rUBRDIV0=( (int)(nMainClk/16./nBaud) -1 ); // Baud rate divisior register 0 rUBRDIV0=( (int)(nMainClk/16./nBaud+0.5) -1 ); // Baud rate divisior register 0 break; case UART1: rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable rUMCON1 = 0x0; //UART chaneel 1 MODEM control register, AFC disable rULCON1 = 0x3; rUCON1 = 0x245; rUBRDIV1=( (int)(nMainClk/16./nBaud) -1 ); break; case UART2: rULCON2 = 0x3; rUCON2 = 0x245; rUBRDIV2=( (int)(nMainClk/16./nBaud) -1 ); rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable break; default: break; } for(i=0;i<100;i++); delay(0); }
UART0 --- UART2 就是开发板为我们提供的三个寄存器,通过rUFCON、rUMCON、rULCON、rUCON、rUBRDIV 等引脚的赋值完成UART寄存器的设置。
关于更多ARM开发板的源码,由于CSDN资源分享的页面出现异常无法上传分享,如有需要、给我留言,我发给大家。
“常常都是事情转变人,人却转变不了事情。”既是如此,为何不先转变自己呢?
来日、学习继续!
文章结束给大家分享下程序员的一些笑话语录:
一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”
---------------------------------
原创文章 By
传送和control
---------------------------------
相关文章推荐
- 嵌入式学习笔记之UART通信协议
- 嵌入式学习笔记之UART通信协议
- Hadoop 学习笔记五 ---Hadoop系统通信协议介绍
- 嵌入式系统学习——STM32之串口通信UART
- cortex_m3_stm32嵌入式学习笔记(二十一):SPI实验(通信总线)
- 嵌入式学习笔记_Linux(四)——Linux进程通信
- 嵌入式开发之uart---rs232 和rs485 通用自定义通信协议
- swoole学习笔记(五)网络通信协议设计 -- EOF结束符协议和固定包头+包体协议
- 嵌入式学习笔记之UART编程练习
- 黑马程序员---OC学习笔记之利用协议实现代理模式
- Rime协议学习笔记:(一)Rime协议概述
- zstack学习笔记3--点对点通信2
- 嵌入式学习笔记006-裸奔篇之中断
- QNX实时操作系统学习笔记之嵌入式系统(二)
- 嵌入式开发之C基础学习笔记03--基本数据类型,操作符,修饰符等基本概念
- LINUX C系统编程学习笔记-----------进程通信(三)
- 【黑马程序员-学习笔记】OC-协议与分类
- 分布式服务框架学习笔记2 常用的分布式服务框架 与 通信框架选择
- AMQP 协议学习笔记之二(编程实战)
- 树莓派学习笔记——UART使用