ARM裸机——FS2410串口通信(UART)

来源:互联网 发布:截屏软件 编辑:程序博客网 时间:2024/05/22 16:57

一、开发环境

(1)硬件平台:FS2410

(2)主机:Ubuntu 10.10


二、FS2410串口的原理图

             

三、串口UART寄存器配置

(1)配置TXD0与RXD0(GPH2、GPH3)

                                                                      

 

      


(2)设置波特率(UBRDIVn)

     

(3)设置传输格式(ULCONn)

   

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

   

(5)设置FIFO和流控(UFCONn 、UMCONn)

   

  

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

 

四、详细设计

uart.c:

#include "s3c2410.h"void putc(char ch)          //发送字符{while(!(UTRSTAT0 & 0x2) );      //判断发送缓冲区是否为空  UTXH0 = ch;         //发送字符}char getc(void)      //接收字符{while(!(UTRSTAT0 & 0x1));      //判断接收缓冲区是否为空return URXH0;      //返回接收的字符}void putstr(char *str)     //发送字符串{while(*str != '\0'){if(*str == '\n'){putc('\n');putc('\r');}elseputc(*str);str++;}}int main(void){char ch;char str[100];int i = 0, j;for(j = 0; j < 100; j++)       //清空字符串str[j] = '\0';GPHCON = GPHCON & ~(0xf << 4) | (0xa << 4);    //配置RXD0、TXD0GPHUP = 0x0c;       //设置上拉电阻UFCON0 = 0;      //不用FIFOUMCON0 = 0;   //不用流控ULCON0 = 0x3;    //8位数据,1个停止位,无校验,正常模式UCON0 = 0x5;     //时钟源位PCLK, 中断方式为查询UBRDIV0 = ((int)(50000000 / 115200 / 16) - 1);     //设置波特率为115200putc('\r');putstr("hello fs2410\n");while(1){ch = getc();      //接收字符putc(ch);      //发送字符str[i++] = ch;if(ch == '\r'){i = 0;putc('\n');putstr("fs2410:");putstr(str);putstr("\n");for(j = 0; j < 100; j++)    //清空字符串str[j] = '\0';}}return 0;}

start.S:

.text.global _start_start:#define WATCHDOG 0x53000000ldr r0, =WATCHDOGmov r1, #0str r1, [r0]ldr sp, =1024*4bl mainloop:b loop

Makefile:

uart.bin: start.S uart.carm-none-linux-gnueabi-gcc -c start.S -o start.oarm-none-linux-gnueabi-gcc -c uart.c -o uart.oarm-none-linux-gnueabi-ld -Ttext 0x30008000 start.o uart.o -o uartarm-none-linux-gnueabi-objcopy -O binary -S uart uart.binclean:rm -f *.o uart.bin

在开发板的uboot上输入以下命令:

tftp 30008000 uart.bin

go 30008000