mini2440串口模块总结

发布者:咖啡小熊最新更新时间:2022-10-11 来源: csdn关键字:mini2440  串口模块  字符串 手机看文章 扫描二维码
随时随地手机看文章

一.串口工作原理:

1.由上面的串口电路可知具体流程如下:


发送:写数据——》buffer—》shifter—》TXDn-->RSTXDn--->PC


接收:PC---》RSRXDn---》RXDn--->shifter-->buffer--->取数据


2.由上图可知,


buffer有两种模式,FIFO模式 和 Non-FIFO模式。


如果使用FIFO模式,则需要配置FIFO Register,具有64 字节的缓存可用。


如果使用Non-FIFO模式,则不需要配置FIFO Register,但是只具有一个字节的缓存可用。


3.做串口模块的具体流程:


<1>.从串口电路图中可以知道,我们首先应该配置相应的引脚为相应的功能模式.在这里我们可以看到相应的引脚是GPH。


<2>.从用户手册中我们需要逐一地配置相应的寄存器.


这里我们先使用Non-FIFO模式,浏览后我们可以获取的信息有:


第一:我们需要配置帧格式设置(ULCON0).


第二:我们需要配置工作模式(UCON0).(工作模式包括DMA  中断 轮循模式 我们这里先采用轮循模式 ).


第三:我们需要配置波特率.


注:对于状态寄存器,我们不需要配置,除非有特殊的要求.


所以总结:对于串口模块,我们要做以下4步:


1.引脚设置


2.帧格式设置


3.工作模式设置(DMA 中断 轮询)


4.波特率设置.


以下是基于mini2440串口模块的源代码:


/************************************************

  NAME    : UART.C

  DESC   :

  Revision: 2015.8.18 ver 0.0

 ************************************************/

 #include "uart.h"

 #include

 #include

 

/***********************************************

Function  name  :   uart_init

Description     :   uart 初始化

Input parameter :   none

Return          :   none   

Others      :   uart init                                      

*************************************************/


 void uart_init()

 {

  

  //1.配置GPHCON中串口0的发送和接收的相应位

  rGPHCON &= ~(0xf<<4);

  rGPHCON |=(0xa<<4);

  

  //2.设置一次可以传输多少数据位

  rULCON0 |= (0x3<<0);

  

  //3.配置串口控制器 设置发送接收模式  发送为DMA模式  接收为轮询模式

  rUCON0 |= (0x9<<0);

  //rUCON0 = 0<<12|0<<10|0<<4|1<<2|1;

  //4.设置波特率

  rUBRDIV0 = (int)(PCLK/(BAUDRATE*16)) - 1;

 }

/***********************************************

Function  name  :   getc

Description     :   接收数据

Input parameter :   none

Return          :   char   

Others      :   none                                     

*************************************************/


 unsigned char uart_getc(void)

 {

  unsigned char ret;

  while((rUTRSTAT0 & (1<<0))==0);

  ret = rURXH0;

  if(ret == 'r')

       ret = 'n';

       

 return ret; 

 }

/***********************************************

Function  name  :   myputc

Description     :   发送数据

Input parameter :   char

Return          :   none   

Others      :   none                                      

*************************************************/


 void myputc(unsigned char ch)

 {

  if(ch=='n')

        myputc('r');

 while((rUTRSTAT0 & 2) == 0);

 

 rUTXH0 = ch; 

 }

/***********************************************

Function  name  :   send_string

Description     :   发送字符串

Input parameter :   char *

Return          :   none   

Others      :   none                                      

*************************************************/


 void uart_puts(const char *str)

 { 

  while(*str)

 {  

  myputc(*str);

  str++; 

 }

 myputc('n');

 }

/***********************************************

Function  name  :   mygets

Description     :   接收字符串

Input parameter :   char *

Return          :   none   

Others      :   none                                      

*************************************************/


void mygets(char *str)

{

 S32 i=0;

 U8 ch;

 while((ch=uart_getc())!='n')

 {

  if(ch=='b')

  {

   if(i>0)

   {

    myputc('b');

    myputc(' ');

    myputc('b');

    i--;

   }

  }

  else

  {

   str[i++] = ch;

   myputc(ch);

  }

 }

 str[i]='';

 myputc('n');

 

}

/***********************************************

Function  name  :   uart_printf

Description     :   发送信息

Input parameter :   char *fmt....

Return          :   none   

Others      :   none                                      

*************************************************/

void uart_printf(char *fmt,...)  //可变参数的函数

{

    va_list ap;//初始化指向可变参数列表的指针

   char string[256];


 va_start(ap,fmt);//将第一个可变参数的地址付给ap,即ap指向可变参数列表的开始

 

 vsprintf(string,fmt,ap);//将参数fmt、ap指向的可变参数一起转换成格式化字符串,放string数组中,其作用同sprintf(),只是参数类型不同

 uart_puts(string); //把格式化字符串从开发板串口送出去

 

 va_end(ap); //ap付值为0,没什么实际用处,主要是为程序健壮性


}


关键字:mini2440  串口模块  字符串 引用地址:mini2440串口模块总结

上一篇:关于mini2440中断配置
下一篇:关于mini2440按键中断的配置

推荐阅读最新更新时间:2024-11-12 18:19

U-boot-2014.04移植到MINI2440(1) 初步探索移植
友善之臂给出了一份移植U-BOOT-2010-03的移植手册,之前也跟着做了,这次带着分析源码的目的再次移植一遍,整个过程借鉴友善之臂提供的手册,韦东山老师书籍的视频,同时参考了其他一些作者的博客,在此对他们表示感谢。 开发环境:VMWARE—Fedora14 开发板:MINI2440(64M RAM,256M NAND FLASH,2M NOR FLASH) 编译器:arm-linux-gcc-4.3.2 U-Boot版本:U-Boot-2014.04 下载地址:ftp://ftp.denx.de/pub/u-boot/ 我移植的U-boot属于版本比较新的了,友善之臂和网上很多帖子都是移植的U-boot-2
[单片机]
U-boot-2014.04移植到<font color='red'>MINI2440</font>(1) 初步探索移植
STM32串口发送字符串函数
最近由于要调试一个SMS发送短信的模块,该模块需要发送一系列AT指令,且需要字符串发送,但是STM32官方给的usart.c中并没有直接发送字符串的函数,因此写了一个发送字符串的函数。 其实发送字符串的本质还是发送一个个字符,所以只需在字符串结束标志之前,循环发送字符即可。不罗嗦,上程序。 //程序功能:利用串口发送一个字符串 // 参数:USARTx USART编号 可取 USART1、USART2、USART3、USART4、 USART5(STM32F103ZET6) str
[单片机]
关于mini2440中断配置
一.由上面的中断原理图可知: 2440一共有60个中断源,这些中断源是由DMA,串口,IIC等等控制器产生的,当有多重中断产生时,这些中断会经过一个仲裁寄存器来给这些中断分优先级。 如上图可知: 中断分为复合中断(含有子中断)和单个中断。 复合中断要配置 SUBSRCPND,SUBMASK,SRCPND,MASK,MODE, Priority,INTPND等七个寄存器,同时不要忘了要配置CPSR中的‘I’ ‘F’位。 单个中断需要配置SRCPND,MASK,MODE,Priority,INTPND等五个寄存器,同时也不要忘了要配置CPSR中的‘I’ ‘F’位。(若使用IRQ普通中断,则只需要配置‘I’位,若使
[单片机]
关于<font color='red'>mini2440</font>中断配置
韦东山视频之LCD驱动(Mini2440 X35)
测试平台: Mini2440 Sonic X35 Lcd Linux-2.6.29 u-boot 2008.10 实验思考: 说起这块屏幕,可真是费劲,LCD原理图跟别人的好多不一样,时序图也有很大的差别,LCD上vline 和vframe根本没有,只能通过pci和mck两个时钟进行设置; 还一个就是:不知道是uboot的原因还是友善官网提供的原理图有错 ,vden必须反转才能正常!! 源代码: #include linux/module.h #include linux/kernel.h #include linux/errno.h #include linux/string.h #include linux
[单片机]
c51: 串口中断方式,收发字符串
/* 程序设计功能: 1.参数 f=12MHZ,baud=1200 2.串口中断方式:发送字符串存放字符数组tran_buf 中,接收字符串存放字符数组rec_buf 中。 2.发送字符串由16位键盘控制。由T2定时中断,每10ms扫描一次键盘。不同按键发送不同字符串。 */ #include reg52.h #include string.h #define uchar unsigned char //发送字符串缓存 uchar tran_buf ; //接收字符串缓存 uchar rec_buf ; uchar tnum=0; uchar rnum=0; //串口初始化
[单片机]
mini2440汇编实例--mmu
head.S .text .global _start _start: ldr sp, =4096 bl disable_watch_dog bl memsetup bl copy_2th_to_sdram bl create_page_table bl mmu_init ldr sp, =0xB4000000 ldr pc, =0xB0004000 halt_loop: b halt_loop init.S .equ WTCON, 0
[单片机]
u-boot-2011.03在mini2440/micro2440上的移植 结束语及资源下载
8.1 其他 (1)支持使用向上的箭头显示上一条命令 include/configs/micro2440.h #define CONFIG_CMDLINE_EDITING #ifdef CONFIG_CMDLINE_EDITING #undef CONFIG_AUTO_COMPLETE #else #define CONFIG_AUTO_COMPLETE #endif (2)使用自己的环境变量 common/env_common.c文件中的default_environment 数组,格式如: b= nand read 0x30008000 0x60000 0x300000;bootm 0x30008000 /0 8.2
[单片机]
LabVIEW编程之字符串转换为双精度数
  下面我们就 Labview 编程中字符串转换为双精度数问题进行详细分析:   大家都知道两点之间最近的路径是直线,遗憾的是程序员往往走的并非直线。   这是用户的程序框图:   分析用户的程序框图:   用户的目的是字符串转换为双精度数,从程序框图上看,他限定了字符串的格式。字符串由5个字符组成,其中整数部分2个字符,小数点1个字符,小数部分两个字符。   用户首先把字符串转换为U8数组,然后利用索引数组取出各个位,根据各位、百位、小数点后一位、小数点后两位,分别乘以10、100、0.1、0.01,然后求和。   框图中比较难理解的是除以16,求余数的操作,他的目的把ASCII转换为数字。我们知道ASCII0X
[测试测量]
LabVIEW编程之<font color='red'>字符串</font>转换为双精度数
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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