S3C2440——使用URAT0查询方式发送和接收字符串

发布者:nu23最新更新时间:2022-10-25 来源: csdn关键字:S3C2440  查询方式  发送和接收  字符串 手机看文章 扫描二维码
随时随地手机看文章

UART初始化函数


void Uart_Init(int pclk,int baud)

{

    int i;

    rGPHCON|=0xa0; //GPH2,GPH3 as TXD0,RXD0

    rGPHUP = 0x0;    //GPH2,GPH3内部上拉

    if(pclk == 0)

    pclk = PCLK;

    rUFCON0 = 0x0; //禁止3个通道的FIFO控制寄存器

    rUFCON1 = 0x0;

    rUFCON2 = 0x0;

    rUMCON0 = 0x0;

    rUMCON1 = 0x0;

    rUMCON2 = 0x0;    //初始化3个通道的MODEM控制寄存器,禁止AFC

    //Line control register 0: Normal,No parity,1 stop,8 bits.

    rULCON0=0x3;

    // Control register 0

    rUCON0  = 0x5;

    //Baud rate divisior register 0

    rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );

}


接收1字节数据


//接收一字节数据

char Uart_Getch(void)

{

    while(!(rUTRSTAT0 & 0x1)); //等待就绪

    //读错误状态寄存器UERSTATn

    if ((rUERSTAT0 & 0x1)|| (rUERSTAT0 & 0x4))

        return -1;

    return RdURXH0;  //0x50000027

}


接收1个字符串


//接收一个字符串

void Uart_GetString(char *string)

{

    char *string2 = string;

    char c;

    while((c = Uart_Getch())!=‘r’)   //回车符

        *string++ = c;

}


接收1个字符串,转换为数字


int Uart_GetIntNum(void)

{

    char str[30];

    char *string = str;

    int base     = 10;  //进制

    int minus    = 0;   //是否负数

    int result   = 0;    //转换的结果

    int lastIndex;       //字符串长度

    int i;

    Uart_GetString(string);

    if(string[0]=='-')

    {

        minus = 1;

        string++;

    }


    if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))

    {

        base    = 16;

        string += 2;

    }


    lastIndex = strlen(string) - 1;


    if(lastIndex<0)

            return -1;

    if(string[lastIndex]=='h' || string[lastIndex]=='H' )

    {

        base = 16;

        string[lastIndex] = 0;

        lastIndex--;

    }

    if(base==10)

    {

        result = atoi(string);

        result = minus ? (-1*result):result;

    }

    else {

        for(i=0;i<=lastIndex;i++) {

            if(isalpha(string[i]))

            {

                if(isupper(string[i]))

                    result = (result<<4) + string[i] - ‘A’ + 10;//之前的结果乘16,再加当前数字

                else

                    result = (result<<4) + string[i] - 'a' + 10;

            }

            else

            {

                result = (result<<4) + string[i] - '0';

            }

            result = minus ? (-1*result):result;

    }

    return result;

}


发送一字节


//发送一字节

//#define WrUTXH0(ch)  ( * (volatile unsigned char * )0x50000023)=(unsigned char)(ch)


void Uart_SendByte(int data)

{

    while(!(rUTRSTAT0 & 0x4));

    Delay(10);  //because the slow response of hyper_terminal

    WrUTXH0(data);

}


送一个字符串


//发送一个字符串

void Uart_SendString(char *pt)

{

    while(*pt)

        Uart_SendByte(*pt++);

}


2410addr.h 定义UART各个寄存器的头文件


//2410addr.h  定义UART各个寄存器的头文件

#define rULCON0 ( * (volatile unsigned * )0x50000000)  //UART 0 Line control

#define rUCON0 ( * (volatile unsigned * )0x50000004)  //UART 0 control

#define rUFCON0 ( * (volatile unsigned * )0x50000008)  //UART 0 FIFO control

#define rUMCON0 ( * (volatile unsigned * )0x5000000c)  //UART 0 Modem control

#define rUTRSTAT0 ( * (volatile unsigned * )0x50000010)  //UART 0 Tx/Rx status

#define rUERSTAT0 ( * (volatile unsigned * )0x50000014)  //UART 0 Rx error status

#define rUFSTAT0 ( * (volatile unsigned * )0x50000018)  //UART 0 FIFO status

#define rUMSTAT0 ( * (volatile unsigned * )0x5000001c)  //UART 0 Modem status

#define rUBRDIV0 ( * (volatile unsigned * )0x50000028)  //UART 0 Baud rate diviaor

#define rULCON1 ( * (volatile unsigned * )0x50004000)  //UART 1 Line control

#define rUCON1 ( * (volatile unsigned * )0x50004004)  //UART 1 Control

#define rUFCON1 ( * (volatile unsigned * )0x50004008)  //UART 1 FIFO control

#define rUMCON1 ( * (volatile unsigned * )0x5000400c)  //UART 1 Modem control

#define rUTRSTAT1  ( * (volatile unsigned * )0x50004010)  //UART 1 Tx/Rx status

#define rUERSTAT1  ( * (volatile unsigned * )0x50004014)  //UART 1 Rx error status

#define rUFSTAT1 ( * (volatile unsigned * )0x50004018)  //UART 1 FIFO status

#define rUMSTAT1  ( * (volatile unsigned * )0x5000401c)  //UART 1 Modem status

#define rUBRDIV1  ( * (volatile unsigned * )0x50004028)  //UART 1 Baud rate divisor

#define rULCON2  ( * (volatile unsigned * )0x50008000)  //UART 2 Line control

#define rUCON2 ( * (volatile unsigned * )0x50008004)  //UART 2 Control

#define rUFCON2 ( * (volatile unsigned * )0x50008008)  //UART 2 FIFO control

#define rUMCON2 ( * (volatile unsigned * )0x5000800c)   //UART 2 Modem control

#define rUTRSTAT2  ( * (volatile unsigned * )0x50008010)  //UART 2 Tx/Rx status

#define rUERSTAT2  ( * (volatile unsigned * )0x50008014)  //UART 2 Rx error status

#define rUFSTAT2 ( * (volatile unsigned * )0x50008018)  //UART 2 FIFO status

#define rUMSTAT2  ( * (volatile unsigned * )0x5000801c)  //UART 2 Modem status

#define rUBRDIV2  ( * (volatile unsigned * )0x50008028)  //UART 2 Baud rate divisor

#if def_BIG_ENDIAN

#define rUTXH0  ( * (volatile unsigned char * )0x50000023)  //UART 0 Transmission Hold

#define rURXH0  ( * (volatile unsigned char * )0x50000027)  //UART 0 Receive buffer

#define rUTXH1  ( * (volatile unsigned char * )0x50004023)  //UART 1 Transmission Hold

#define rURXH1  ( * (volatile unsigned char * )0x50004027)  //UART 1 Receive buffer

#define rUTXH2  ( * (volatile unsigned char * )0x50008023)  //UART 2 Transmission Hold

#define rURXH2  ( * (volatile unsigned char * )0x50008027)  //UART 2 Receive buffer

#define WrUTXH0(ch)  ( * (volatile unsigned char * )0x50000023)=(unsigned char)(ch)

#define RdURXH0  ( * (volatile unsigned char * )0x50000027)

#define WrUTXH1(ch)  ( * (volatile unsigned char * )0x50004023)=(unsigned char)(ch)

#define RdURXH1()  ( * (volatile unsigned char * )0x50004027)

#define WrUTXH20(ch)  ( * (volatile unsigned char * )0x50008023)=(unsigned char)(ch)

#define RdURXH2()  ( * (volatile unsigned char * )0x50008027)

#define UTXH0     (0x50000020+3)  //Byte_access address by DMA

#define URXH0     (0x50000024+3)

#define UTXH1     (0x50004020+3)

#define URXH1     (0x50004024+3)

#define UTXH2     (0x50008020+3 )

#define URXH2     (0x50008024+3)

#else//Little Endian

#define rUTXH0  ( * (volatile unsigned char * )0x50000020)//UART 0 Transmission Hold

#define rURXH0  ( * (volatile unsigned char * )0x50000024)//UART 0 Receive buffer

#define rUTXH1  ( * (volatile unsigned char * )0x50004020)//UART 1 Transmission Hold

#define rURXH1  ( * (volatile unsigned char * )0x50004024)//UART 1 Receive buffer

#define rUTXH2  ( * (volatile unsigned char * )0x50000820)//UART 2 Transmission Hold

#define rURXH2  ( * (volatile unsigned char * )0x50008024)//UART 2 Receive buffer

#define WrUTXH0(ch)  ( * (volatile unsigned char * )0x50000020)=(unsigned char)(ch)

#define RdURXH0  ( * (volatile unsigned char * )0x50000024)

#define WrUTXH1(ch)  ( * (volatile unsigned char * )0x50004020)=(unsigned char)(ch)

#define RdURXH1()  ( * (volatile unsigned char * )0x50004024)

#define WrUTXH2(ch)  ( * (volatile unsigned char * )0x50008020)=(unsigned char)(ch)

#define RdURXH2()  ( * (volatile unsigned char * )0x50008024)

#define UTXH0     (0x50000020+3)  //Byte_access address by DMA

#define URXH0     (0x50000024+3)

#define UTXH1     (0x50004020+3)

#define URXH1     (0x50004024+3)

#define UTXH2     (0x50008020+3 )

#define URXH2     (0x50008024+3)

#endif

关键字:S3C2440  查询方式  发送和接收  字符串 引用地址:S3C2440——使用URAT0查询方式发送和接收字符串

上一篇:S3C2440——使用URAT0中断方式发送和接收字符串
下一篇:JZ2440挂载nfs

推荐阅读最新更新时间:2024-11-02 11:35

LPC210X定时器查询方式及如何初始化
定时器查询方式定时器初始化: 1、设置定时器分频数,为(x+1)分频 2、匹配通道X中断并复位TxTC 3、比较值(1S定时值) 4、启动并复位TxTC 如: T1PR = 99; // 设置定时器0分频为100分频,得110592Hz T1MCR = 0x03; // 匹配通道0匹配中断并复位T0TC T1MR0 = 110592/2; // 比较值(1S定时值) T1TCR = 0x03; // 启动并复位T0TC T1TCR = 0x01; 研究了好长一段时间,LPC210X的定时器,查询方式定时很简单如上面,但中断方式要操作好多寄存器,太麻烦,一直是一头雾水。好不容易理出了思路,现将一段例程粘贴备忘。 #inclu
[单片机]
S3C2440 启动代码分析
启动代码是系统上电或复位以后运行的第一段代码,它的作用是在用户程序运行之前对系统硬件及软件运行环境进行必要的初始化并在最后使程序跳转到用户程序,它直接面对ARM 处理器内核及硬件控制器进行编程,所执行的操作与具体的目标系统紧密相关。 S3C2440 支持两种方式的启动:Nor Flash 启动和Nand Flash 启动。Nor Flash 和Nand Flash 都是非易失性存储器,Nor Flash 的特点是芯片内执行,程序可以直接在其中运行,而不必将程序读取到RAM 中运行。Nor Flash 虽然具有这个优点,但是它的性价比远低于Nand Flash,因而很多系统采用Nand Flash 启动。Nand Flash 的特
[单片机]
S3C2440—2.裸机开发步骤及工具使用
一.裸机开发步骤简介 1.在X86架构的Windows系统中 1.建立工程 2.编辑源代码 3.编译(VC6.0) 4.运行 2.在X86架构的Ubuntu系统中 1.编辑源代码(vim) 2.编译(gcc) 3.运行 3.ARM裸机开发 1.编辑源代码(Windows:Source insight或者Notepad++) 2.编译(涉及到交叉编译:arm-linux-gcc) arm-linux-gcc是基于Linux系统的arm编译器,功能强大、稳定、支持qrm芯片多。 3.烧写 4.运行 注意: 使用ads(停止更新)、MDK编译器,是win系统的编译器,功能很弱,只适合个
[单片机]
<font color='red'>S3C2440</font>—2.裸机开发步骤及工具使用
Uboot在S3C2440上的移植详解(六)
一、移植环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 10)u-boot利用tftp服务下载内核和利用nfs服务挂载nfs文件系统。 知识点: tftp服务的安装与配置及测试; nfs服务的安装与配置及测试; u-boot到kernel的参数传递(重点)。 我们知道使用tftp下载内核和使用nfs挂载文件系统的好处是,当我们重新编译内核或文件系统后不用重新把这些镜像文件
[单片机]
Uboot在<font color='red'>S3C2440</font>上的移植详解(六)
S3C2440挂载NFS文件系统
主要记录下如何在ARM开发板上挂载NFS文件系统。 PC主机:Ubuntu 和 redhat 9.0 目标板:TQ2440开发板,linux内核2.6.30 1.PC上安装NFS服务 sudo apt-get install nfs-kernel-server sudo apt-get install portmap nfs-common 2. 编辑/etc/exports文件 yj423@ubuntu:~$ cat /etc/exports /home/yj423/nfswork *(rw,sync,no_root_squash) 设置/home/yj423/nfswork为被挂载的文件目录 3.启动NFS服务 sudo /et
[单片机]
<font color='red'>S3C2440</font>挂载NFS文件系统
基于S3C2440的多媒体控制器设计
根据当今移动终端设备多功能、低功耗、易于移植的要求,分别从硬件和软件系统 2 方面提出了一种基于三星μS3C2440 芯片的嵌入式多媒体娱乐控制器的解决方案,同时介绍了利用 CLinux 构造嵌入式系统的方法,并提出了基于MiniGUI开发多媒体娱乐软件的基本方案。通过测试,系统能够满足用户在文字、音视频处理以及常用有线、无线数据交换等多方面的要求。 由于移动通信技术的高速发展,移动电话早已超出原有的进行语音通信的领域,正逐步成为手持娱乐终端的中心。手机用户希望自己的手机在完成通信基本功能的同时还能作为 PDA、MP3 播放器、数码相机、摄像机、视频播放机等。因此,设计出多功能、低功耗的多媒体终端至关重要。ARM+Linux系统
[单片机]
基于<font color='red'>S3C2440</font>的多媒体控制器设计
I2S音频总线学习(三)S3C2440的I2S控制器
在自己的产品测试中 子机正常模式下运行毫无问题 都正常 但是远程主机端 一直发送数据 ,就会导致产品lcd花屏 串口死机 而且显示lcd花屏 串口后面才死机的的 两者死机间隔时间有长有短 不必深究,通过其他没有接在总线上的子机对比来看 是串口惹的货。 lcd花屏 肯定是全局变量自己变化了的 是内存泄露或者覆盖问题 串口接收死机 并非子机死机 ,而是串口接收不到数据了。 实验中 接收不到数据的现象可以分为下面原因 1 这里的接收不到数据我们不能单一的理解为串口中断死掉了 这是不可能的(通常情况下) 2 我们接收中断被发射中断阻挡了即 发送中断 一直在发数据(之前是死循环等待发送完成 而呈现中有看门狗 所以
[单片机]
I2S音频总线学习(三)<font color='red'>S3C2440</font>的I2S控制器
S3C2440开发板的学习使用(一)----串口的安装
串口连接 1、板上有USB转UART芯片PL2303HX,可以通过MINI USB口,使用一根USB转MINI USB线连接到笔记本上。 2、Windows下安装USB转串口驱动程序PL2303_Prolific_DriverInstaller_v1.5.0.exe。 3、下载串口工具软件SecureCRT,设置波特率和COM口,即可通过串口读写。 UART简介:http://blog.csdn.net/GQ1900/article/details/51885259 UART和RS232、RS485的关系:http://blog.csdn.net/chun_1959/article/details/450545
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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