历史上的今天
返回首页

历史上的今天

今天是:2025年01月22日(星期三)

正在发生

2020年01月22日 | 【ARM】2410裸机系列-uart串口通信

2020-01-22 来源:eefocus

开发环境

(1)硬件平台:FS2410

(2)主机:Ubuntu 12.04


FS2410串口的原理图

 


串口UART寄存器配置

 

配置TXD0与RXD0(GPH2、GPH3)


设置波特率(UBRDIVn)


设置传输格式(ULCONn)


选择时钟源与中断方式(UCONn)


设置FIFO(UFCONn)


设置流控(UMCONn)


接收字符和发送字符(UTRSTATn)

源代码


 //uart.c


#include "2410addr.h"

                                                                        

void putc(char ch)          //发送字符

{

    while(!(rUTRSTAT0 & 0x2) );      //判断发送缓冲区是否为空 

                                                                        

    rUTXH0 = ch;         //发送字符

                                                                        

}

                                                                        

char getc(void)      //接收字符

{

    while(!(rUTRSTAT0 & 0x1));      //判断接收缓冲区是否为空

                                                                                

    return rURXH0;      //返回接收的字符

}

                                                                        

void putstr(char *str)     //发送字符串

{

    while(*str != '')

    {

        if(*str == 'n')

        {

            putc('n');

            putc('r');

        }

        else

            putc(*str);

                                                                        

        str++;

    }

}

                                                                        

int main(void)

{

    char ch;

    char str[100];

    int i = 0, j;

                                                                        

    for(j = 0; j < 100; j++)       //清空字符串

        str[j] = '';

                                                                        

    rGPHCON = rGPHCON & ~(0xf << 4) | (0xa << 4);    //配置RXD0、TXD0

    rGPHUP = 0x0c;       //设置上拉电阻

                                                                        

    rUFCON0 = 0;      //不用FIFO

    rUMCON0 = 0;    //不用流控

    rULCON0 = 0x3;    //8位数据,1个停止位,无校验,正常模式

    rUCON0 = 0x5;     //时钟源位PCLK, 中断方式为查询

                                                                        

    rUBRDIV0 = ((int)(50000000 / 115200 / 16) - 1);     //设置波特率为115200

                                                                        

    putc('r');

    putstr("hello mystery n");

                                                                        

    while(1)

    {

        ch = getc();      //接收字符

                                                                        

        putc(ch);      //发送字符

                                                                        

        str[i++] = ch;

                                                                        

        if(ch == 'r')

        {

            i = 0;

            putc('n');

            putstr("mystery:");

            putstr(str);

            putstr("n");

                                                                        

            for(j = 0; j < 100; j++)    //清空字符串

                str[j] = '';

        }

    }

                                                                        

    return 0;

}

 


//start.S



.text

.global _start

_start:

#define WATCHDOG 0x53000000

    ldr r0, =WATCHDOG

    mov r1, #0

    str r1, [r0]

                                                             

    ldr sp, =1024*4

    bl main

                                                             

loop:

    b loop

 


//Makefile



uart.bin: start.S uart.c

    arm-linux-gcc -c start.S -o start.o

    arm-linux-gcc -c uart.c -o uart.o

    arm-linux-ld -Ttext 0x30008000 start.o uart.o -o uart

    arm-linux-objcopy -O binary -S uart uart.bin

                                                

clean:

    rm -f *.o uart.binxyyc


编译运行

编译运行都OK


推荐阅读

史海拾趣

Caddell-Burns Manufacturing公司的发展小趣事

为了进一步扩大市场份额,Caddell-Burns Manufacturing公司开始积极寻求国际合作。他们与多个国家的电子制造商建立了稳定的合作关系,将产品出口到世界各地。同时,公司还参加了多个国际电子展会,展示了公司的最新产品和技术成果,吸引了众多客户的关注。这些举措不仅提升了公司的国际知名度,也为公司的长期发展奠定了坚实基础。

Alorium Technology公司的发展小趣事

随着科技的不断发展,Caddell-Burns Manufacturing公司意识到技术创新是保持竞争力的关键。于是,公司加大了对研发的投入,引进了一批高素质的技术人才,不断推出具有创新性的电子产品。这些新产品不仅提高了公司的市场份额,也为客户提供了更优质的服务。同时,公司还积极与高校和研究机构合作,开展产学研一体化项目,进一步提升了公司的技术实力。

CUI Inc.公司的发展小趣事

在追求持续增长的道路上,CUI Inc.采取了一项重要举措——收购加拿大电源制造商Tectrol Inc.。这次收购为CUI带来了丰富的产品线和技术资源,尤其是Tectrol在标准和定制电源解决方案方面的领先设计能力和制造能力。通过整合Tectrol的技术和资源,CUI进一步巩固了其在电源设计领域的领先地位,并为其未来的发展奠定了坚实的基础。

Anderson Power公司的发展小趣事

随着集成电路技术的快速发展,对先进IC供电的需求日益增长。为了应对这一挑战,CUI Inc.推出了90A数字负载点模块系列。这些模块采用先进的封装技术和设计,具有高电流输出和优异的性能表现。它们的推出不仅满足了客户对高效、可靠供电的需求,还进一步提升了CUI在电源领域的竞争力。

Comus_International公司的发展小趣事

在过去几十年里,Comus International通过持续的有机增长和收购增长相结合的方式,实现了公司的快速发展。这种增长策略不仅使公司规模不断扩大,也使其业务范围更加广泛。最终,Comus International成功发展成为一家集团公司,成为电子行业中的佼佼者。

以上就是Comus International在电子行业中的五个发展故事。这些故事充分展示了公司在创新、质量、服务以及市场拓展等方面的卓越表现,也揭示了其能够在竞争激烈的电子行业中脱颖而出的原因。

AMSCO [Austria micro systems AG]公司的发展小趣事

在过去几十年里,Comus International通过持续的有机增长和收购增长相结合的方式,实现了公司的快速发展。这种增长策略不仅使公司规模不断扩大,也使其业务范围更加广泛。最终,Comus International成功发展成为一家集团公司,成为电子行业中的佼佼者。

以上就是Comus International在电子行业中的五个发展故事。这些故事充分展示了公司在创新、质量、服务以及市场拓展等方面的卓越表现,也揭示了其能够在竞争激烈的电子行业中脱颖而出的原因。

问答坊 | AI 解惑

博客大赛要开始啦!

博客大赛要开始啦!各位论坛上的朋友们:         看着eeworld论坛上的工程师圈子不断扩大,不断提升,我们心里甚是欢喜~ 借此,我们也想趁着热乎气儿,举办一次规模庞大,专业性强的博客大赛,希望大家多多参与哦 ...…

查看全部问答>

遇到了从未见过的超小封装该怎么办?

MAX1898电源管理芯片,要搭在面包板上,但是这个太小了,网上说的飞线方法根本不可能 实现,然后就是单独做个贴片转直插的PCB,老板娘开价40。。。。。 问题1 哪位好心大侠教导一下,有没有其它的方式把它稳当的焊住? 问题2 这个是什么型号的封 ...…

查看全部问答>

ucos系统综合讨论

1:你认为系统最难的是哪个部分2:你是怎么划分任务的3:任务间的同步你是怎么处理的 ucos大家都很熟悉,那么在使用过程中你遇到什么问题了,那么在这里大家可以一同讨论一下!基本上大多数人前期会把精力放到移植上,我认为在开始学习的时候不要 ...…

查看全部问答>

VS2005/WinCE6.0/6410 定置WinCE内核时,LCD屏的大小(如:2.7寸,3.5寸,7寸, 320X240, 800X480)在什么地方设置

VS2005/WinCE6.0/6410 定置WinCE内核时,LCD屏的大小(如:2.7寸,3.5寸,7寸, 320X240, 800X480)在什么地方设置? 是在BSP中直接改代码吗?…

查看全部问答>

touch screen的校正演算法

請問是否有touch screen的演算法可以提供的 用過nano-x內附的演算法,不過效果不好 …

查看全部问答>

同时使用2个UART的问题

有人同时用过两个UART口么 该注意些什么问题,能同时接受发送么 我使用的是C8051F040   就是一个板子上有两个UART口  一个用于UART0用于和触摸屏的通讯  一个UART1要实时的接收DSP传来的数据(都不是用分机) [ 本帖最后由 ks ...…

查看全部问答>

MSP430学习笔记之四:看门狗

看门狗定时器实际上是一个特殊的定时器,它的的功能是当程序运行发生故障时序时能使系统从新启动。其原理就是发生的故障的时间满足规定的定时时间后,产生一个非屏蔽中断,使系统的复位。这样当在调试程序或预计程序运行在某段内部可能瞬时发生时序 ...…

查看全部问答>

内存分配

用ARM处理器     边采集视频边显示,分配一个缓存可以实现吗?…

查看全部问答>

P1OUT&=0x01与P1=0x01的区别

还有一个问题程序中:P1DIR=0x01是不是要伴随P1OUT=0x01才能实现P1.0为输出的功能。P…

查看全部问答>

DIY音乐门铃使用单片机MSP430G2211

本来想着是否用来替代原来的门铃的(应该可以不用电路板直接把G2211放进原来门铃结构的凹槽里面的),不过现在也懒了。当做娱乐吧 原来门铃: DIY视频(没有装进原来门铃结构里,在LaunchPad上接线,使用原来门铃的蜂鸣器) $(\'swf_wOP\').in ...…

查看全部问答>