S3C2440之UART驱动代码模板(RealView MDK)

发布者:暮烟微雨最新更新时间:2018-06-04 来源: eefocus关键字:S3C2440  UART  驱动代码模板 手机看文章 扫描二维码
随时随地手机看文章

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 UART驱动代码。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。需要注意的是,本代码中,对GPIO的初始化放在了s3c2440.s中完成,采用keil自带的html方式进行配置。

该源码结构简单明了,原始工程下载地址:点击打开链接


UART控制器初始化:


  1. void Uart_Init(void)  

  2. {  

  3. #define rULCON0         (*(volatile unsigned int*)0x50000000)  

  4. #define rUCON0          (*(volatile unsigned int*)0x50000004)  

  5. #define rUBRDIV0        (*(volatile unsigned int*)0x50000028)  

  6.   

  7. #define PCLK            50000000  

  8. #define BUADRATE        115200  

  9.   

  10.     rULCON0 = 0x03;     //No parity, One stop bit, 8-bits data  

  11.     rUCON0  = 0x05;     //Tx Enable, Rx Enable, PCLK as source clock  

  12.     rUBRDIV0 = (int)(PCLK / (BUADRATE * 16)) - 1;   //115200bps  

  13. }  



字符发送函数:


  1. void Uart_Putc(unsigned char c)  

  2. {  

  3. #define rUTRSTAT0       (*(volatile unsigned int*)0x50000010)  

  4. #define rUTXH0          (*(volatile unsigned int*)0x50000020)  

  5.   

  6. #define BUFFER_EMPTY    (1 << 1)  

  7.   

  8.     while(!(rUTRSTAT0 & BUFFER_EMPTY));  

  9.     rUTXH0 = c;  

  10. }  


字符接收函数:


  1. unsigned char Uart_Getc(void)  

  2. {  

  3. #define rUTRSTAT0       (*(volatile unsigned int*)0x50000010)  

  4. #define rURXH0          (*(volatile unsigned int*)0x50000024)  

  5.   

  6. #define BUFFER_READY    (1 << 0)  

  7.   

  8.     while(!(rUTRSTAT0 & BUFFER_READY));  

  9.     return rURXH0;  

  10. }  


为了使用printf库函数,需要进行如下重映射:


  1. struct __FILE    

  2. {    

  3. int handle;    

  4. /* Whatever you require here. If the only file you are using is */    

  5. /* standard output using printf() for debugging, no file handling */    

  6. /* is required. */    

  7. };    

  8.   

  9. /* FILE is typedef'd in stdio.h. */    

  10. FILE __stdout;    

  11.   

  12. int fputc(int ch, FILE *f)   

  13. {   

  14.     Uart_Putc(ch);   

  15.        

  16.     return ch;   

  17. }   

  18.   

  19. int ferror(FILE *f) {  

  20.   /* Your implementation of ferror */  

  21.   return EOF;  

  22. }  


测试代码:


  1. int main(void)  

  2. {  

  3.     unsigned char ch;  

  4.   

  5.     //clock_init();  

  6.     Uart_Init();  

  7.     printf("%s, %d", __FILE__, __LINE__);  

  8.     while(1)  

  9.     {  

  10.         ch = Uart_Getc();  

  11.         Uart_Putc(ch);  

  12.     }  


关键字:S3C2440  UART  驱动代码模板 引用地址:S3C2440之UART驱动代码模板(RealView MDK)

上一篇:S3C2440之Camera驱动代码模板(RealView MDK)
下一篇:S3C2440之MMU驱动代码模板(RealView MDK)

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

S3C2440移植uboot之支持DM9000
上一节S3C2440移植uboot之支持NANDFLASH操作移植了uboot 支持了NANDFLASH的操作,这一节修改uboot支持DM9000。 目录 通过Makefile把dm9000x编译进uboot 编译报错 DM9000_DATA 修改内存控制器时序 网卡的初始化的流程 支持DM9000C的初始化 编译测试 TFTP下载测试 通过Makefile把dm9000x编译进uboot cd drivers/net vi Makefile 需要在文件中添加以下宏 在smdk2440.h中修改文件支持DM9000 #if 0 #define CONFIG_CS8900 /* we have a CS8
[单片机]
<font color='red'>S3C2440</font>移植uboot之支持DM9000
S3C2440的存储器管理
以前不知道S3C2440的每个BANK都要设置位宽,也不知道为什么要设置,今天弄懂了。在使用BANK之前要设置每个BANK所接的外设时多少位的?由BWSCON寄存器设置,默认情况为8位。由于BANK0位启动区,所以有硬件指示,通过读OM 引脚来设置。 当宽度为8位的时候, Memory Controller 硬件是这样做的:(不错位连接) (1)CPU想进行8位操作时,直接根据软件所给出的地址读取8位数据返回给CPU。 (2)CPU想进行16位操作时,进行两次8位的操作,并组成一个16位的数据返回给CPU。 (3)CPU想进行32位操作时,进行四次8位的操作,并组成一个32位的数据返回给CPU。 当宽度为16位的时
[单片机]
嵌入式视频监控系统设计方案
    引言        相比传统视频监控系统,嵌入式视频监控系统具有体积小、实时性强、性价比高、可靠性高、组网方便、可远程监控等优点,因而更适用于工业控制、银行、政府部门的安防系统中。本文提供的这套系统,采用的s3C2440具有更高的性价比,并且基于B/S架构来构建网络进行数据传输,用户可直接通过浏览器访问,相比C/S架构,本系统更符合客户对网络化的要求。     1 嵌入式视频监控系统方案     采用模块化设计方法,将系统分为3个功能模块,分别是:前端视频采集及警报模块、嵌入式Web服务器模块、后端用户监视模块。前端视频采集及警报模块负责视频的采集、存储、处理及传输,并实时监控现场环境温度,提供火险预警。嵌入式
[单片机]
嵌入式视频监控系统设计方案
02-JZ2440裸机学习之系统时钟和UART串口实验
1、S3C2440的系统时钟 1.1、2440的几种频率 笔记本CPU可以 1G 2G ,内存133M等 2440CPU:400MHz -------FCLK-----CPU SDRAM:100M/133M---- HCLK----存储区控制器,中断控制器,LCD,DMA,USB主机模块 串口IIC: -------------------PCLK----IIS,IIC,PWM,MMC,SD,ADC,UART,GPIO,RTC,SPI 定时器:---------------------PCLK 1.2时钟选择与启动方式选择 S3C2440可以选择晶振,或外部时钟。: 1.3PLL 两种PLL
[单片机]
02-JZ2440裸机学习之系统时钟和<font color='red'>UART</font>串口实验
MSP430单片机各种寄存器总结(7)——USCI_A in UART mode
第七章 USCI 7.1 UCA1CTL1 【注意】配置USCI先将UCSWRST置位 7.2 UCA1BR0 & UCA1BR1 BRCLK预分频器 预分频系数=UCA1BR0 + UCA1BR1*256 7.3 UCA1MCTL 注意复习波特率的计算!! 7.4 UCA1RXBUF 接收数据的寄存器 7.5 UCA1TXBUF 发送数据的寄存器,写入后自动发送 7.6 UCA1IE & UCA1IFG 中断使能和中断标志位,其中TX是发送,RX是接受 UCTXIFG置位表明UCAxTXBUF为空,可向其写入待发送字符,若UCTXIE 和GIE也置位,将产生发送中断请求。写UCAxTXB
[单片机]
MSP430单片机各种寄存器总结(7)——USCI_A in <font color='red'>UART</font> mode
s3c2440.jflash项目的配置(使用jlink下载boot到norflash)
J-Flash ARM的配置。 一般说来file– open project里面会找到一些*.jflash的配置文件,加载他们就行了,但是没找到适合S3C2440的。所以自己建了一个MINI2440.jflash,手动进行配置: j-link设置 1.打开J-Flash ARM,并进入菜单:Options– Project settings 2.主要设置CPU选项和Flash选项 CPU : Core -- ARM9, Little endian Use target RAM(faster)– Addr:40000000 4KB(不选很慢;从Nor flash启动时内部Boot SRAM的地址和大小,参考S3C24
[单片机]
s3c2440.jflash项目的配置(使用jlink下载boot到norflash)
s3c2440裸机-LCD编程(三、框架准备和LCD初始化)
1.准备框架 为了让程序更加好扩展,体现出”高内聚、低耦合 的特点,能够兼容各种不同型号的lcd,假如有两款尺寸大小的lcd,如何快速的在两个lcd上切换? 首先我们抽象出lcd_3.5.c和lcd_4.3.c的共同点,比如都有初始化函数init(),我们可以新建一个lcd.c,然后定义一个结构体: struct lcd_opr{ void (*init)(void); }; 用户不接触lcd_3.5.c和lcd_4.3.c,只需要在lcd.c里通过指针访问对应的结构体的函数,也就调用了不同init(),如下图所示: 我们的目的是在LCD显示屏上画线、画圆(geomentry.c)和写字(font.c)其核心是画点
[单片机]
<font color='red'>s3c2440</font>裸机-LCD编程(三、框架准备和LCD初始化)
MSP430多处理器之间的通信方式及协议
  在单片机系统中,多处理器是指多个相同类型或者不同类型的单片机协作处理同一个系统的不同工作。它们之间必须具备一定的数据交换和协作处理能力,共同完成一个系统化的工作。不同处理器之间可以采用数据交换方式、并行总线方式、串行总线方式进行通信。其中,数据交换方式又可以称为共享内存交换方式;串行总线方式又可以分为单总线方式、集成电路之间的通信方式和UART方式。 1 MSP430多处理器   MSP430是一款超低功耗的混合信号控制器,具有1 6位RISC结构,有着丰富的片内外设,主要包括有看门狗、定时器、比较器、硬件乘法器、液晶驱动器、ADC、I/0端口、串口(USART)等等,还集成有64 KB的Flas’E-ROM和2 KB的R
[单片机]
MSP430多处理器之间的通信方式及协议
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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