学习uboot前奏之hardware-uart[s3c2440]
来源:互联网 发布:2016免费洗车软件 编辑:程序博客网 时间:2024/06/14 22:01
学习uboot的前奏篇终于要完结了,在这篇UART后,我们将正式开始Uboot的学习,那么现在开始今天的话题。
UART称为通用异步收发器,即Universal Asynchronous Receiver Transmitter。发送数据的时候,CPU将数据输入UART,UART按照一定的格式在一根电线上串行发出,接收数据时,UART检查另一根电线上的信号,将串行收集放在缓冲区中,CPU可读取UART的数据。UART之间以全双工方式传输数据。
从上图可以看出UART最简单的连线,只需要三根TxD,RxD,Gnd用于给双方提供参考电平。
TxD、RxD数据线以“位”为最小的传输单位。帧有具有完整意义的,不可分割的若干位组成,包含开始位、数据位、校验位和停止位。发送数据之前,UART双方需要约定数据的传输速率、数据的传输格式。
下面说数据传输的流程。
- 平时数据线处于“空闲”状态(1状态)
- 当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持一位的时间 ,这样接收方检测到开始位后,再等待1.5位的时间就开始一位一位地检测数据线的状态得到传输的数据。
- UART一帧中可以有5、6、7、8位的数据,发送方一位改变数据线的状态,将他们发送出去,首先发送的是最低位。
- 如果使用校验功能,UART在发送完数据位后,还要发送一个校验位。校验有奇偶之分—数据线连同校验位中的1数据等于奇数或者偶数。
- 最后,发送停止位,数据线恢复到“空闭”状态。停止位有三种:1位,1.5位,2位。
对于S3C2440来说,有三个独立的通道,每个通道可以工作在中断或者DMA模式。S3C2440 UART收发都最大有64字节的FIFO,发送数据时,CPU先将数据写入到FIFO到,然后UART自动将FIFO中的数据复制到“发送移位器”中,发送移位器将数据一位一位地发送到Tx数据线上,接收数据时,“接收移位器”将Rx数据线上的数据一位一位接收进来然后复制到接收FIFO中,CPU即可从中读取数据。
下面将结合前面说到中断和本章的UART
第一步初始化串口
void uart0_init(void){ GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0 GPHUP = 0x0c; // GPH2,GPH3内部上拉 ULCON0 |= 0x03; // 8N1(8个数据位,无较验,1个停止位) UCON0 = 0x05; // 中断或者查询方式,UART时钟源为PCLK UMCON0 = 0x00; // 不使用流控 UBRDIV0 = UART_BRD; // 波特率为115200 URXH0 =0;}
第二步打开串口中断
void init_irq( ){ /*打开UART0 RX中断,TX不打开中断*/ INTSUBMSK &=(~(1<<0)) ; /*打开UART0中断*/ INTMSK &= (~(1<<28));}
第三步定义中断处理程序
void INT_Handle(){ unsigned long oft = INTOFFSET; unsigned char c; if(SUBSRCPND & (1<<0)) //接收中断 { c = getc(); if((1<<6)==(GPFDAT &((1<<6)))) { GPFDAT &= ~(1<<6); }else if(0==(GPFDAT &((1<<6)))) { GPFDAT |= (1<<6); } SUBSRCPND |= (1<<0); if (isDigit(c) || isLetter(c)) putc(c+1); } SRCPND = 1<<oft; INTPND = 1<<oft;}
上面的程序的主要功能:中断方式接收UART发过来的数据,中断处理程序中将接收的数据加1,再发送出去,同时每进入一次中断LED的电平就取反一次,经测试本程序工作正常。
至此学习uboot的所有准备工作已经完成,接下来将正式开始uboot的学习。
- 学习uboot前奏之hardware-uart[s3c2440]
- 学习UBOOT前奏之hardware-sdram[s3c2440]
- 学习uboot前奏之hardware-mmu[s3c2440]
- 学习uboot前奏之hardware-IRQ[s3c2440]
- 学习uboot前奏之hardware-clock[s3c2440]
- 学习uboot前奏之hardware-arm基础知识[s3c2440]
- 学习uboot前奏之hardware-nand flash[s3c2440]
- S3C2440数据资料之UART
- S3C2440之UART
- S3C2440之UART
- S3C2440之UART
- S3C2440之uboot移植
- linux驱动之S3C2440 Uart
- webService学习之前奏
- S3C2440-UART
- S3C2440之UART操作(FIFO模式)
- S3C2440之UART操作(FIFO中断模式)
- S3C2440之UART操作(FIFO中断模式)
- codeforces 895E
- win10添加Windows照片查看器
- HashMap的底层实现
- Markdown example
- java-16(4)-工具类
- 学习uboot前奏之hardware-uart[s3c2440]
- windows系统如何通过命令实现挂载盘符
- Linux基本指令
- 内存分配函数
- 旅行生活英语
- 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。(java)
- 通用Makefile的编写和在项目工程中使用Makefile(包括动态库、静态库的链接、整个工程联合编译)
- OpenCV直线、轮廓的提取与描述
- 题目:判断101-200之间有多少个素数,并输出所有素数。(java)