S3C2440 UART串口驱动
接收数据错误中断 | [6] | 设置当接收数据时,如果产生异常,如传输中止,帧错误,校验错误时,是否产生接收状态中断信号: 0 =不产生错误状态中断1 =产生错误状态中断 | 0 |
回送模式 | [5] | 设置该位时UART会进入回送模式,该模式仅用于测试 0 =正常模式1 =回送模式 | 0 |
发送终止信号 | [4] | 设置该位时,UART会发送一个帧长度的终止信号,发送完毕后,该位自动恢复为0 0 =正常传输1 =发送终止信号 | 0 |
发送模式 | [3:2] | 设置采用哪个方式执行数据写入发送缓冲区 00 =无效 01 =中断请求或查询模式 10 = DMA0请求 | 00 |
接收模式 | [1:0] | 设置采用哪个方式执行数据写入接收缓冲区 00 =无效 01 =中断请求或查询模式 10 = DMA0请求 | 00 |
UCON0 = 0x05;
表2-27 UART FIFO控制寄存器(UFCON0)寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
UFCON0 | 0x50000008 | R/W | 串口0 FIFO控制寄存器 | 0x00 |
UFCON0 | 位 | 描述 | 初始值 |
发送数据 触发级别 | [7:6] | 设置FIFO发送模式的触发级别: 00 = FIFO为空触发01 = 16字节触发 10 = 32字节触发11 = 48字节触发 | 00 |
接收数据 触发级别 | [5:4] | 设置FIFO接收模式的触发级别: 00 = FIFO为空触发01 = 16字节触发 10 = 32字节触发11 = 48字节触发 | 00 |
保留 | [3] | 0 | |
发送FIFO重置 | [2] | 在重置FIFO后自动清除发送缓冲区 0 =正常模式1 =自动清除 | 0 |
接收FIFO重置 | [1] | 在重置FIFO后自动清除接收缓冲区 0 =正常模式1 =自动清除 | 0 |
启用FIFO | [0] | 0 =不启用FIFO1 =启用FIFO | 0 |
寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
UMCON0 | 0x5000000C | R/W | 串口0MODEM控制寄存器 | 0x00 |
UMCON0 | 位 | 描述 | 初始值 |
保留 | [7:5] | 必须全部置0 | 000 |
AFC自动流控 | [4] | 0 =不开启流控1 =开启流控 | 0 |
保留 | [3:1] | 必须全部置0 | 000 |
请求发送 | [0] | 如果启用AFC,该位无效,S3C2440会自动控制nRTS,如果不启用AFC,nRTS必须由软件控制 0 =高电平激活nRTS1 =低电平激活nRTS | 0 |
表2-29 UART发送/接收状态寄存器(UTRSTAT0)
寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
UTRSTAT0 | 0x50000010 | R/W | 串口0发送/接收状态寄存器 | 0x06 |
UTRSTAT0 | 位 | 描述 | 初始值 |
发送器为空 | [2] | 当发送缓存寄存器中没有数据要发送且发送移位寄存器为空时,自动置1 0 =非空 1 =发送器为空(发送缓存和移位寄存器) | 1 |
发送缓存寄存器为空 | [1] | 当发送缓存寄存器为空时,自动置1 0 =发送缓存寄存器非空 1 =发送缓存寄存器为空 | 1 |
接收缓存寄存器为空 | [0] | 当接收缓存寄存器有数据到达时,自动置1 0 =接收缓存寄存器为空 1 =缓存寄存器接收数据 | 0 |
表2-30 UART发送缓存寄存器(UTXH0)
寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
UTXH0 | 0x50000020(L) 0x50000023(B) | W | 串口0发送缓存寄存器 | - |
表2-31 UART接收缓存寄存器(URXH0)
寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
URXH0 | 0x50000024(L) 0x50000027(B) | R | 串口0接收缓存寄存器 | - |
寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
UBRdiv0 | 0x50000028 | R/W | 串口0波特率除数寄存器 | - |
UBRdiv0 | 位 | 描述 | 初始值 |
波特率除数 | [15:0] | 设置波特率除数(大于0)使用外部输入时钟时可以置0 | - |
UFCON0 = 0x00;//不使用FIFO
UMCON0 = 0x00;//不使用流控
UBRdiv0 = 26;//波特率为115200,PCLK=50Mhz
UBRdiv0 = 53;//波特率为57600,PCLK=50Mhz
UBRdiv0 = 12;//波特率为57600,PCLK=12Mhz
#defineTXD0READY(1<2)//发送数据状态OK
#defineRXD0READY(1)//接收数据状态OK
/* UART串口单个字符打印函数*/
extern void putc(unsigned char c)
{
while( ! (UTRSTAT0 & TXD0READY) );
UTXH0 = c;
}
/* UART串口接受单个字符函数*/
extern unsigned char getc(void)
{
while( ! (UTRSTAT0 & RXD0READY) );
return URXH0;
}
1.1.6UART串口驱动实验
init.s:本程序文件对看门狗,内存等基本硬件做初始化,然后跳入到xmain.c中的xmain函数执行。;
; UART串口实验
;
GPBCONEQU0x56000010
GPBDATEQU0x56000014
AREA Init, CODE, READONLY
ENTRY
start
; close watchdog
ldr r0, = 0x53000000;将看门狗控制寄存器地址放入r0
mov r1, #0
str r1, [r0];设置看门狗控制寄存器的值为0
bl initmem;跳转到initmem代码段,初始化内存
IMPORT xmain;引入main.c中的xmain函数
ldr sp, =0x34000000;调用C程序之前先初始化栈指针
ldr lr, =loop;设置xmain函数的返回地址
ldr pc, =xmain;跳转到C程序中的xmain函数的入口处执行
loop
b loop;死循环
initmem;内存初始化
ldr r0, =0x48000000;加载内存相关寄存器首地址r0
ldr r1, =0x48000034;加载内存相关寄存器尾地址到r1
adr r2, memdata;将寄存器配置数据地址段首地址加载到r2
initmemloop
ldr r3, [r2], #4;循环设置存寄存器
str r3, [r0], #4
teq r0, r1
bne initmemloop;循环到最后一个寄存器时退出函数
mov pc,lr
memdata
DCD0x22000000;BWSCON
DCD0x00000700;BANKCON0
DCD0x00000700;BANKCON1
DCD0x00000700;BANKCON2
DCD0x00000700;BANKCON3
DCD0x00000700;BANKCON4
DCD0x00000700;BANKCON5
DCD0x00018005;BANKCON6
DCD0x00018005;BANKCON7
DCD0x008e07a3;REFRESH
DCD0x000000b1;BANKSIZE
DCD0x00000030;MRSRB6
DCD0x00000030;MRSRB7
END
S3C2440UART串口驱 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)