S3C2440之UART操作(FIFO模式)

发布者:真诚相伴最新更新时间:2016-06-12 来源: eefocus关键字:S3C2440  UART操作  FIFO模式 手机看文章 扫描二维码
随时随地手机看文章
背景知识:

<1>

由于UART的波特率设置与时钟有关,此文设置FCLK:HCLK:PCLK=1 : 2 : 4,FCLK=200MHZ,遂先介绍时钟的设置。

通常认为上电复位后PLL是不稳定的。因此在软件重新配置PLLCON之前Fin代替MPLL直接供给Fclk。即便用户不希望复位之后改变PLLCON的数值,用户还是要用软件写入相同的数值到PLLCON寄存器中。

按照MDK4.22中启动代码的设置来说明以下设置。

S3C2440之UART操作(FIFO模式)
 

MPLL,UPLL根据公式即可算出,这里的MPS最后算出的Fclk=200Mhz。PCLK也就是50Mhz了。

注意到HDIVN这里设置为0x01,不为0,那么Fclk != Hclk,要将fast mode转为异步模式,不然的话,Fclk相当于Pclk了。

由于MDK自带的启动代码没有这部分代码,所以自己加以修改了这部分。

S3C2440之UART操作(FIFO模式)
 

FAST_TO_ASYN如果勾选的话,会选中

IF ASYN_SETUP <> 0
MRC p15, 0, r1, c1, c0, 0
ORR r1, r1, #0xc0000000
MCR p15, 0, r1, c1, c0, 0
         ENDIF

这样就可以配置成自己想要设置的时钟了。

 

 

关于串口的知识

3个独立的串口,每一个都可以利用DMA和中断方式操作。每个包含2个64字节FIFO,一个接,一个发。

非FIFO模式相当于FIFO模式的一个寄存器缓冲模式。

每一个UART有7种状态,overrun错误,校验错误,帧错误,断点,接收缓冲区准备好,发送缓冲区为空,发送移位寄存器为空。钱4个被认为是接收错误状态,每一个都可以引起接收错误状态中断请求,前提是UCONn中设置了receive-error-status-interrupt-request=1。

当接收移位寄存器中的数据传给FIFO的时候,且接收的数据触发了Rx FIFO的阀值,Rx中断产生了。

发送器中FIFO的还未发得数据到达Tx FIFO阀值的时候,Tx中断产生了。

 

程序要点:

本程序首先完成基本的UART0的配置,比如TXO RXO的管脚配置,这可以在启动文件里配置完成,接着ULCON0配置,UCON0配置,UFCON0配置,UMCON0配置,UBRDIV0配置,INTSUBMSK打开相应位,INTMSK打开相应位。

中断程序里,接收和发都会引起UART0中断,在里面要加以区分,是接还是发引起。接设置FIFO16字节触发,脉冲模式;发为0字节触发,电平模式。

注意到一上电,UART0配置完成后,就会触发发中断,因为发设置为0电平模式触发,所以为了避免无缘无故的触发,需要在某些时机下,禁止中断。

功能:在串口上输入16字节,包括回车,然后会把输入的字符回显在串口终端上。

 

程序代码:

uart.c

 

/*
 *   PC<----->2440UART0
 */
#include "S3C2440.h"
#include "uart.h"


static u8 string[512]  = {0,0};
static u8 data_is_ready = 0;


void init_uart0(void)
 {


	rULCON0 = 0x03;  
	
	rUCON0 = (0x05) | (1<<9);
	//15---12   	11-10		9		8		7				6						5		 4			3-2				1-0
	//not pclk/n	pclk		Tlevel	Rpulse	timeout disable	rx error int disable   loop dis  break dis	int or poll		int or poll
 
 	rUFCON0 = (0x0<<6) | (0x02<<4) | (0x01<<0);
	//0		0		1		1		0		0		0		1
	//Tx trigger level = 0	Rx trigger level = 16bytes	FIFO enable=1
	
	rUMCON0 = 0x0;
	rUBRDIV0 = UART_BRDIV;

	rINTSUBMSK &= ~BIT_SUB_RXD0;
	rINTMSK &= ~BIT_UART0;

	pHandleUART0 = UART0_Handle;
}


void __irq UART0_Handle(void)
{
	u8* ps = string;


	if(rSUBSRCPND&0x01){

		rINTSUBMSK |= BIT_SUB_RXD0;
	
		while(((rUFSTAT0&0x1f)>0))
			*ps++ = RdURXH0_L;
		
		data_is_ready = 1;		
	
		
		rSUBSRCPND = BIT_SUB_RXD0;
	}
	else if(rSUBSRCPND&0x02)
	{
		int i;
	
		rINTSUBMSK |= BIT_SUB_TXD0;	 
		
		while((!(rUFSTAT0&(1<<14))) && (*ps != '\r'))
		{
		   WrUTXH0_L(*ps++);        
		   for(i=0; i<100;i++);
		}	
		

		data_is_ready = 0;

		rSUBSRCPND = BIT_SUB_TXD0;	 
			
	}
	rSRCPND = BIT_UART0;
	rINTPND = BIT_UART0;

	
	if(data_is_ready)
		rINTSUBMSK &= ~(BIT_SUB_TXD0);   
	else
		rINTSUBMSK &= ~(BIT_SUB_RXD0);	
}


main.c

 

 

#include "S3C2440.h"
#include "uart.h"


int main(void)
{	
	rGPBDAT |= (0xf<<5);

	init_uart0();
	
	while(1);
}

经测试可以完成功能。
关键字:S3C2440  UART操作  FIFO模式 引用地址:S3C2440之UART操作(FIFO模式)

上一篇:S3C2440在MDK4.22下使用printf向串口打印调试
下一篇:ARMLinux s3c2440 之UART分析一

推荐阅读最新更新时间:2024-03-16 14:56

基于S3C2440与EP2S15芯片实现靶场破片测速系统的设计
0 引言 破片速度是战斗部爆炸效能评估的一个重要参数。传统的靶场破片测速系统多使用多路数据采集卡设置好的参数现场采集标靶的试验波形,试验完成后再交由计算机进行后期处理和解读以获取破片速度等参数。但随着军事科技的日新月异,靶场破片测速系统需要根据实际情况现场设置的参数越来越多,参数设置的灵活性越来越强,对系统工作的实时性要求越来越高;另一方面,战斗部爆炸试验在野外进行,条件恶劣,大型设备携带不便,并为靶场破片测速系统设计提供了一个新的思路。 1 系统硬件设计 系统使用ARM+FPGA的设计方式:ARM处理器选用Samsung公司推出的基于ARM920T内核的S3C2440。S3C2440主频高达400 MHz,完全能够胜任系统工
[单片机]
基于<font color='red'>S3C2440</font>与EP2S15芯片实现靶场破片测速系统的设计
S3c2440ARM异常与中断体系详解7---按键中断程序示例完善
首先main.c中 我们初始化中断控制器 初始化中断源 假设按键按键就会产生中断,CPU就会跳到start.S 执行 .text .global _start _start: b reset /*vector 0 一上电复位,是从0地址开始执行,跳到reset*/ ldr pc, und_addr /*vector 4 如果发生未定义指令异常,硬件就会在自动跳转0x04地址未定义指令异常处,执行do_und*/ ldr pc,swi_addr /* vector 8 : swi */ IRQ模式的话跳到0x00000018地方 .text .global _start _start: b rese
[单片机]
S3c2440ARM异常与中断体系详解7---按键中断程序示例完善
06-S3C2440学习之移植2012u-boot到S3C2440(移植过程一)新建单板+修改时钟+SDRAM+UART
移植u-boot-2012.04之建新单板_时钟_SDRAM_UART (1)新建单板目录,以及配置头文件 tar xjf u-boot-2012.04.01.tar.bz2 cd u-boot-2012.04.01 cd board/samsung/ cp smdk2410 smdk2440 –rf cd ../.. cd /include/configs/ cp smdk2410.h smdk2440.h (2) 修改 boards.cfg: 仿照 smdk2410 arm arm920t - samsung s3c24x0 添加: smdk244
[单片机]
06-S3C2440学习之移植2012u-boot到<font color='red'>S3C2440</font>(移植过程一)新建单板+修改时钟+SDRAM+<font color='red'>UART</font>
S3C2440裸机------触摸屏_使用定时器支持长按
我们前面写的代码中,长按或者滑动时不能读取坐标,接下来我们使用定时器对代码进行改进,可以在长按或者滑动时把坐标值读出来。 #include ../s3c2440_soc.h #define ADC_INT_BIT (10) #define TC_INT_BIT (9) #define INT_ADC_TC (31) /* ADCTSC's bits */ #define WAIT_PEN_DOWN (0 8) #define WAIT_PEN_UP (1 8) #define YM_ENABLE (1 7) #define YM_DISABLE (0 7) #define YP
[单片机]
s3c2440内存类设备访问原理
在嵌入式里面所谓内存类接口有SDRAM接口,NORFLASH接口,DM9000网卡接口等 ,他们都有一个共同点就是可以直接连S3C2440内存控制器,数据总线,地址总线;这三者缺一不可。 内存类接口可以通过地址直接访问内部数据,当然他们都有自己的一段可访问的地址范围。S3C2440将其1G地址空间划分为8个bank,每个bank有128M,所以芯片提供了8个片选信号线,每个片选信号线对应一个bank,一个片选信号连接一个设备,所以每个设备可访问的地址的范围是128M空间,128M=2的27次方个字节,所以芯片上面的地址线只有27跟,最大只能到A26。理论上32位的CPU应该有32跟地址线,因为最大可以到0xffffffff=2
[单片机]
<font color='red'>s3c2440</font>内存类设备访问原理
S3C2440内部中断和外部中断
1.中断分两大类:内部中断和外部中断。 2.外部中断。24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体参考datesheet数据手册。 寄存器:EXTINT0-EXTINT2:三个寄存器设定EINT0-EINT23的触发方式。 EINTFLT0-EINTFLT3:控制滤波时钟和滤波宽度。 EINTPEND:这个是中断挂起寄存器,清除时要写1,后面还有几个是写1清除。当一个外部中断(EINT4-EINT23)发生后,那么相应的位会被置1。为什么没有EINT0-EINT3,呵呵,看看SRCPND就知道了
[单片机]
s3c2440裸机-内存控制器(三-2、norflash编程之适配访问时序)
前面我们了解了 norFlash的特性和原理 ,那么cpu是如何和nor进行通信的呢?下面开始详细介绍。 1.内存控制器适配norflash 如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部norflash的性能进行配置,这里先列出时间参数的含义: Tacs: Address set-up time before nGCSn(表示地址信号A发出多久后才能发出nGCS片选) Tcos: Chip selection set-up time before nOE(表示片选信号nGCS发出多久后才能发出读使能信号) Tacc:access cycle(数据访问周期) Tacp:page模式下的访问周
[单片机]
<font color='red'>s3c2440</font>裸机-内存控制器(三-2、norflash编程之适配访问时序)
s3c2440存储控制器和地址以及启动的理解
1.首先应该先了解Flash ROM的种类 NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。 NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。 通俗的说,只给地址不行,要先命令,再给地址,才能读到NAND的数据,在一个总线完成的。 结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash. 2.Nand Flash的命令、地址、数据都通过I/O口发送,管脚复用,这样做做的好处是,可以明显减少NAND FLASH的管脚数目,将来如果设计者想将NAND FLASH更换为更高密度、更大容量的,也不必改动电路板。在S3C2440中NANDFLASH的控制依靠NAND F
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved