##S3C2440串口##

1、RTS/CTS
RTS : Request to send
CTS : Clear to send

应用场合:半双工收发切换,工业控制应用较多

2、时钟频率管理
2.1、基本知识
FCLK:CPU工作频率
HCLK:中断控制器、存储管理器、DMA控制器、LCD控制器、FLASH控制器、USB Host(不用PLL时)、总线控制器、片外设备
PCLK:SPI、II2C、GPIO、ADC、PWM、UART、RTC、WDT、SD卡接口

MPLL = (2 * m * FIN) / (p * 2^s) //MPLL值计算方式
m = M + 8; p = P + 2; s = S;

UPLL = (m * FIN) / (p * 2^s)
m = M + 8; p = P + 2; s = S;

重要:在设置系统时钟的时候不要使PMS任何一个值等于0,不然设置到的串口时钟不对,出现乱码,即可能压根系统的时钟设置就不对

若时钟分配HCLK != PCLK,在进行系统时钟设定的时候要使系统进入异步模式,具体设定CPU核(ARM920T)协处理器CP15的寄存器C1的iA与nF位

iAnFmode
00FastBus
01synchronous
10Reserved
11Asynchronous
2.2、系统时钟设置步骤
2.2.1、设置UPLL与MPLL
2.2.2、设置PCLK,FCLK,HCLK
2.2.3、使能相应的时钟W位

3、OM模式选择

OM1OM0mode
00NAND Flash
0116 bit
1032 bit
11test mode
本实验板的OM1接地,OM0接由拨码开关选择NAND Flash启动和Nor Flash启动
OM3OM2mode
valuemainclkUSBclk
00Crystal
01Crystal
10EXTCLK
11EXTCLK
本实验板的OM2和OM3脚都接地了,所以使用的时钟源都是Crystal(外部晶振)
4、UART

4.1、错误种类
Frame error:帧差错
Parity error:奇偶校验错误
Break error:传输中断错误

4.2、波特率计算
UBRDIV = (int)(UART Clock / (buad rate * 16)) - 1;

4.3、配置步骤(不使用FIFO)

4.3.1、配置引脚模式,使能上拉
4.3.2、配置UARTn模块模式
4.3.3、设置波特率(包括系统时的设定)
4.3.4、开启UARTn时钟

5、lds链接文件
代码如下

SECTIONS {
. = 0x00000000;
.init : AT(0){ head.o init.o uart.o}
. = 0x30000000;
.text : AT(4096) { *(.text) }
.rodata ALIGN(4) : AT((LOADADDR(.text)+SIZEOF(.text)+3)&~(0x03)) {(.rodata)}
.data ALIGN(4) : AT((LOADADDR(.rodata)+SIZEOF(.rodata)+3)&~(0x03)) { *(.data) }
__bss_start = .;
.bss ALIGN(4) : { (.bss) (COMMON) }
__bss_end = .;
}

在本UART实验中,lds文件中有如下的代码

AT(LOADADDR(.text) + SIZEOF(.text) + 3) & ~0x03 { *(.rodata) }

此行代码的意思是设置.rodata的地址起点为.text结束点之后的最小四字节倍数地址

&(~0x03)的意思是进行4字节的代码对齐操作,即抹掉地址的低两位,此时地址为4的倍数,也即实现了4字节对齐

+3的意思是万一.text的结束地址不是4的倍数,此时若抹掉地址低两位会造成.rodata地址与.text地址交叠的情况,所以要加3之后再进行低两位抹除

. = 0x30000000;
.text : AT(4096) { *(.text) }
0x30000000是链接地址(也即程序运行地址),AT(4096)是程序存储地址,在程序运行的时候需要将4096的代码存储区拷贝到0x30000000地方再运行程序,这个过程需要在该段程序运行之前准备好

PS:在程序内部不能使用诸如uart_init(void)的方式引用,这样会被认为是函数的声明,在带返回值的时候会出现错误,rx_data = uart_rx(void)是错误的调用方式

JZ2440串口代码链接:使用中断方式,实现中断函数体的调用
http://download.csdn.net/detail/u013904227/9252191

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值