【ARM】串口通信·FS2410·裸机UART

简介:

开发环境


   (1)硬件平台:FS2410

   (2)主机:Ubuntu 12.04



FS2410串口的原理图



串口UART寄存器配置


配置TXD0与RXD0(GPH2、GPH3)



设置波特率(UBRDIVn)



设置传输格式(ULCONn)



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



设置FIFO(UFCONn)



设置流控(UMCONn)



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



源代码


 //uart.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#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 !=  '\0' )
     {
         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] =  '\0' ;
                                                                        
     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] =  '\0' ;
         }
     }
                                                                        
     return  0;
}


//start.S

1
2
3
4
5
6
7
8
9
10
11
12
13
.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

1
2
3
4
5
6
7
8
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




本文转自infohacker 51CTO博客,原文链接:http://blog.51cto.com/liucw/1223137
相关文章
|
传感器 定位技术 数据处理
ARM裸板开发——UART通信方式及使用(一)
ARM裸板开发——UART通信方式及使用
285 0
ARM裸板开发——UART通信方式及使用(一)
|
缓存 芯片
ARM裸板开发——UART通信方式及使用(二)
ARM裸板开发——UART通信方式及使用
238 0
|
关系型数据库 MySQL C语言
ARM Mysql c 通信
/************************************************************************************ * ARM Mysql c 通信 * 说明: * 之前虽然看到有mysql c通信的程序,但不确定怎么在ARM上用,并且如何在buildroot搭 * 建的文件系统上进行交叉编译。
1017 0
|
17天前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
21天前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
36 0
|
26天前
|
NoSQL MongoDB Docker
求助,有没有大神可以找到arm64架构下mongodb的3.6.8版本的docker镜像?
在Docker Hub受限的情况下,寻求适用于ARM架构的docker镜像资源或拉取链接,以便在x86架构上获取;内网中的机器为ARM架构,因此优先请求适合ARM的Docker镜像或Dockerfile,非常感激您的帮助。