串口通信的格式:
起始位 数据位 奇偶校验位 停止位
传输速率:
每一个数据位的宽度定于发送波特率的倒数。微机异步串行通信中,常用的波特率为110、
150、300、600、1200、2400、4800、9600、57600、115200 等。
电气特性:
要完成基本的通信功能,实际上值需要RXD、TXD 和GND 即可,但由于RS-232-C 标准所
定义的高、低电平信号于S3C2440A 系统的LVTTL 电路定义的高、低电平信号完全不同,LVTTL
的标准逻辑“1”对应2-3.3V,标准逻辑“0”对应0-0.4V,而RS-232C 标准采用负逻辑方
式,逻辑“1”对应-5――15V,标准逻辑“0”对应+5-+15V。显然两者间要进行通信,必
须经过电平的转换,转换芯片采用max202。
RS-232C 标准规定,当误码率小于4%时,要求导线的电容值应小于2500PF。
对于普通导线,其电容值约为170PF/M。则允许距离L=2500PF/(170PF/M)=15M.这一距离的计
算,是偏于保守的,实际应用中,当使用9600bps,普通双绞屏蔽线时,距离可达30~35 米。
零Modem 的最简连线(3 线制)
由此可以看出,串口只是适合于短距离的地方,在选择每一种器件的时候都必须考虑其使用场合,精度,温度影响,等等。否则前功尽弃。
串口的模块功能图:
其中包括,控制单元,接受移位,发送移位, 接受/发送fifo模块,波特率产生器。
编程实现:
1)设置串口传输格式,数据位数,奇偶校验位,停止位
2)设置波特率产生器的时钟源、设置串口工作方式(查询方式(polling mode), 中断模式(interrupt mode), DMA( direct memory access))
3)通过各种状态标志,或者中断服务子程序发送、接受数据
源代码:
AREA |DATA|, CODE, READONLY
ENTRY
;LDR R13,=0x1000 /*将本句注释掉发现似乎没有什么影响,不知道写上为何用意?删除后执行效果一样!*/
IMPORT rs232Main
B rs232Main
END
/*宏定义*/
#define ULCON0 (*(volatile unsigned *)0X50000000) //UART线控制寄存器
#define UCON0 (*(volatile unsigned *)0X50000004) //UART控制寄存器
#define UFCON0 (*(volatile unsigned *)0X50000008) //FIFO控制寄存器
#define UTRSTAT0 (*(volatile unsigned *)0X50000010) //UART状态寄存器
#define UBRDIV0 (*(volatile unsigned *)0X50000028) //波特率
#define UTXH0 (*(volatile unsigned *)0X50000020)
#define URXH0 (*(volatile unsigned *)0X50000024)
#define GPBDAT (*(volatile unsigned *)0X58000054)
void rs232Main()
{
char buf;
ULCON0 &= 0xffffff00;/*将0-7位置零*/
ULCON0 |= 0x03;/*设置为8位,无奇偶校验,停止位1位,正常模式*/
UCON0 = 0X0805;/*查询方式(polling mode)正常运行模式,不产生,接受或者发送错误中断,串口时钟是PCLK,*/
/*计算公式:UBRDIVn = (int)( UART clock / ( buad rate x 16) ) - 1*/
/*26+1 = 27 27*16*115200 PCLK 约等于 50M*/
UBRDIV0 = 0x1a; /*设置波特率为115200*/
while (1)
{
while (UTRSTAT0 & 0x01)
{
buf = URXH0;
while (!(UTRSTAT0 & 0X04));
UTXH0 = buf;
}
}//这里必须使用while(1)不然,其会执行到linux的操作系统上去,最开始还不知道是什么原因...
}
地址范围
Please select which region to write : Esc to abort
0 : offset 0x00000000, size 0x00020000 [boot]
1 : offset 0x00020000, size 0x00060000 [bootParam]
2 : offset 0x00080000, size 0x00100000 [pic]
3 : offset 0x00180000, size 0x00380000 [MyApp]
4 : offset 0x00500000, size 0x00300000 [kernel]/*紧跟其后的就是linux内核*/
5 : offset 0x00800000, size 0x03c00000 [fs_yaffs]/*文件系统*/
6 : offset 0x04400000, size 0x00080000 [eboot]
7 : offset 0x04480000, size 0x03b80000 [wince]
--------------------------------------------------------------坚持不懈、追求卓越--------------------------------------------------------------------------