S3C2440串口及其中断系统详解

发布者:SereneSoul55最新更新时间:2017-01-07 来源: eefocus关键字:S3C2440  串口  中断系统 手机看文章 扫描二维码
随时随地手机看文章

S3C2440A的通用异步收发器(UART)配有3个独立异步串行I/O(SIO)端口,每个都可以是基于中断或基于DMA模式的操作。换句话说,UART可以通过产生中断或DMA请求来进行CPU和UART之间的数据传输。

UART通过使用系统时钟可以支持最高115.2Kbps的比特率。如果是外部器件提供UEXTCLK的UART,则UART可以运行在更高的速度。每个UART通道包含两个的64字节的FIFO给发送和接收。

S3C2440A的UART包括了可编程波特率,红外(IR)发送/接收,插入1个或2个停止位,5位、6位、7位或8位的数据宽度以及奇偶校验。每个UART包含一个波特率发生器、发送器、接收器和一个控制单元,如图11-1所示。波特率发生器可以由PCLK、FCLK/n或UEXTCLK(外部输入时钟)时钟驱动。发送器和接收器包含了64字节FIFO和数据移位器。

将数据写入到FIFO接着在发送前复制到发送移位器中。随后将在发送数据引脚(TxDn)移出数据。与此同时从接收数据引脚(RxDn)移入收到的数据,接着从移位器复制到FIFO

 

使用2440的uart和其他芯片的uart使用类似,也是分为以下几步

 

设置数据长度,开始为,停止位,奇偶校验相关

 


选择设置uart时钟,中断类型,fifo状态等


设置FIFO,(我禁用了fifo)


设置自动流控制(我禁用了自动流控制)


设置波特率


波特率的计算公式如下


然后很重要的一点是串口配置好了还需要配置串口IO,参见之前的IO配置

 

如果要使能中断的话还要配置相应的中断,主要还是之前说过的寄存器,但是多了两个,子中断寄存器,


也就是说打开串口总中断之后需要再打开相应的子中断才能工作,中断处理清除总中断标志之后还要清除对应的子中断标志才行

 

Uart0.c

#include "uart0.h"
#include "stdio.h"


//////////////////////////////////////////////////////////////////
//加入以下代码,支持printf函数,而不需要选择use MicroLIB	  
#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
_sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
	while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.
	WrUTXH0((u8)ch);;      
	return ch;
}
#endif 



/***********只打开接收中断***********/
void __irq uartRxISP(void)
{
       char ch;
       int i = 0;
      
       rSUBSRCPND |= 0x3;	//清除rx,tx中断请求
       rSRCPND |= 0x1<<28;	//清除串口源挂起
       rINTPND |= 0x1<<28;	//清除串口子挂起	
      
       if(rUTRSTAT0 & 1)             //接收缓冲区有数据
       {
          ch = rURXH0;                     //接收字节数据,接受处理
		  Uart0SendByte(ch);
       }  
}



void Uart0Init(u32 baud)
{	
 	CalcBusClk();                 //计算总线频率
 	
	rULCON0 = 0x03;	//8位数据,1位停止位,无校验,不使用红外
	rUFCON0 = 0;	//禁止fifo
	rUMCON0 = 0;	//禁止rts自动流控制
	
	rUCON0 = 0x5;	//使用pclk时钟,中断模式
	
	rUBRDIV0=( (int)(PCLK/16./baud+0.5) -1 );
	
	rGPHCON &=~((3<<4)|(3<<6));
 	rGPHCON |=(2<<4)|(2<<6);      //把GPH3、GPH2设置为RXD[0] 、TXD[0] 功能
   
   
	rSRCPND |= 0x1<<28;		//清除串口中断挂起
    rSUBSRCPND |= 0x3;		//清除收发中断
	rINTPND |= 0x1<<28;		//清除串口中断请求
    rINTSUBMSK &= ~(0x1);             //打开UART0接收中断,使能中断
    rINTSUBMSK |= (0x1<<1);          //关闭UART0发送中断,禁止中断
    rINTMSK &= ~(0x1<<28);            //打开UART0中断屏蔽,总中断
           
    pISR_UART0 = (unsigned)uartRxISP;		//中断子程序建立连接
	
}



void Uart0SendByte(u8 dat)
{
	while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.
	WrUTXH0(dat);
	while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.
}



Uart0.h


#ifndef __UART0_H_
#define __UART0_H_
#include "2440addr.h"
#include "def.h"
#include "clock.h"
#include "stdio.h"

void Uart0Init(u32 baud);

void Uart0SendByte(u8 dat);


#endif


关键字:S3C2440  串口  中断系统 引用地址:S3C2440串口及其中断系统详解

上一篇:S3C2440外部中断系统详解
下一篇:s3c2440的GPIO驱动

推荐阅读最新更新时间:2024-03-16 15:29

PIC入门3,SPI通信和串口调试实验
MSSP模块工作于SPI主控方式,这个可以直接在实验板上执行。 程序: //适合3EPIC实验板,配置PIC单片机的MSSP模块工作于SPI主控方式下, //通过一个并/串行转换移位寄存器(74HC165)将接收的并行数据通过SD0口送出的串行数据, //PIC将串行数据存入寄存器,送给D口,驱动LED亮。 #include pic.h #include pic1687x.h volatile unsigned char data; /*************************************************************************/ /*函数名:SPIINT()
[单片机]
mage128串口加超级终端打印程序
#include avr/io.h #include avr/interrupt.h #include inttypes.h #include avr/sfr_defs.h #include util/delay.h #include avr/pgmspace.h #include stdio.h #include stdarg.h //使用的是mage128的板子,这个是抄别人的,觉得很好用,里面的可变参数的 //理解起来还是有点儿困难的,不过myprintf()这个函数很好用,如果电脑没有 //串口,也可以用usb转串口来实现,需要安装usb转串口驱动,硬件管理器里面可 //以看到安装后的usb-serial的
[单片机]
STM32CubeMX之串口接收不定长数据
基本串口通信通常只能接收到定长数据,无法稳定接收不定长数据,本章介绍利用STM32单片机的IDLE空闲中断,接收不定长数据。 使能串口1的异步串行通信模式,开启Usart1的全局中断。添加DMA通道。 使用Stm32Cubemx生成源码, 打开生成的源码,删除whiel循环中的语句。 打开usart.h文件,在文件开头的USER CODE BEGIN Includes下方引入stdio.h头文件 打开usart.c文件,在USER CODE BEGIN 0与 USER CODE END 0之间添加下列代码。 #if 1 struct __FILE { int handle; }; FILE __stdout; //定义
[单片机]
STM32CubeMX之<font color='red'>串口</font>接收不定长数据
stm32f103——串口UART
在学习UART之前,我们先来了解一下单片机与外围设备之间的通信: 单片机与外围设备之间的信息交换和传输我们称为通信。过去通信方式有两种:并行通信和串行通信。 并行通信: 定义:并行通信是指利用多条传输线将一个数据的各位同时传送。 传输方式:传输一个字节(8个位)的数据时,并口是将8个位一字排开,分别在8条连接线上同时传输。 特点:传输速度块,适用于短距离通信。 缺点:虽然,并行通信传输速度快,但是由于,线与线之间存在电磁干扰,会导致数据错误。而且由于线比较多,PCB布线比较麻烦,所以并行通信不常用,而串行通信用得比较广泛。 串行通信: 定义:串行通信是指利用一条传输线将数据一位位地顺序传送。 传输方式:传输一个字节(8
[单片机]
stm32f103——<font color='red'>串口</font>UART
Linux驱动:s3c2410/s3c2440 ts驱动分析 之二
一,前言 前面结合“平台总线-设备-驱动”模型分析了ts(触摸)驱动的加载过程,现在进入驱动程序分析下其具体的实现。涉及到输入子系统详解、input核心层程序分析、evdev事件处理层程序分析、ts设备驱动层程序分析以及s3c2440的ADC转换和触摸控制器的操作。 二,涉及的寄存器 三,调用probe函数 根据上一篇的分析,驱动层通过platform_driver_register注册后,会调用到该驱动层的probe函数。 四,s3c2410ts_probe函数分析 4.1 硬件寄存器设置 4.1.1 获取设备参数 struct s3c2410_ts_mach_info *info; info = ( str
[单片机]
STM32 DMA详解——一串口为例
一. DMA原理: DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。 DMA 传输将数据从一个地址空间复制到另外一个地址空间。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。 二.STM32使用DMA 1
[单片机]
串口实验改用串口2实现
一。串口2初始化 void uart_init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIOA时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //串口2的时钟来自PCLK1 USART_DeInit(USART2); //复位串
[单片机]
带全速USB接口的PIC18F4550应用设计
引 言 随着USB(Universal Serial Bus)技术的发展,特别是高速(480 Mbps)USB2.0协议的出现,几乎所有的PC外设都可以移植到USB上,所以USB的PC外设的发展空间是巨大的,甚至在不久的将来,USB将完全取代异步串口和打印机并口,PC机厂商将不会再生产机箱上带异步串口和打印机并口的PC机了,机箱上也不会再有那么多的连线了。 USB是一种快速的、双向同步传输的、廉价并可以进行热插拔的串行接口。利用USB总线技术,开发适用于科学研究和工业牛产的各种仪器仪表设备,借以取代传统计算机测控系统中采用串行RS232或并行接口的仪器仪表设备,使计算机测控系统更加高效实时,方便灵活。 利用USB总线的数据采
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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