S3C2440串口通信基本功能的代码(注释+学习)
功能:将通过串口接收到的内容再发送出去,在PC机上看到的现象就是在串口通信软件中输入什么就会实时地显示什么。
主文件:serial.c
1 //最常用的寄存器是ULCON、UCON、UBRDIV、UTRSTAT、UTXH、URXH这六个寄存器 2 #define ULCON0 (*(volatile unsigned *)0X50000000) //UART线控制寄存器 3 #define UCON0 (*(volatile unsigned *)0X50000004) //UART控制寄存器 4 #define UFCON0 (*(volatile unsigned *)0X50000008) //FIFO控制寄存器 5 #define UTRSTAT0 (*(volatile unsigned *)0X50000010) //UART状态寄存器 6 #define UBRDIV0 (*(volatile unsigned *)0X50000028) //波特率 7 #define UTXH0 (*(volatile unsigned *)0X50000020) 8 #define URXH0 (*(volatile unsigned *)0X50000024) 9 //还有UMCON、UERSTAT、UFSTAT、UMSTAT这四个寄存器,有需要的话再设置不迟 10 11 #define GPBDAT (*(volatile unsigned *)0X58000054) 12 13 int TSmain() 14 { 15 char buf; 16 17 ULCON0 &=0XFFFFFF00; //不使用红外模式,使用正常模式+无校验位+1位停止位 18 ULCON0 |=0X03; //8位数据位 19 20 UCON0 =0X0805; //串口时钟PCLK,发送与接收的中断类型均为pulse,禁止接收超时中断,禁止接收错误中断,不使用loopback模式,使用正常模式,查询方式 21 //不发送break signal,发送模式与接收模式均为中断响应或轮询模式 22 23 //UFCON的默认值是关闭FIFO,所以如果不用的话可以直接不设置即可 24 25 //UBRDIV如何设定?UBRDIV=(int)(用户通过UCON设定的UART时钟/(用户想要的波特率*16))-1 26 UBRDIV0 =0X1A; //波特率115200 27 28 while(1) 29 { 30 //UTRSTAT寄存器既有表示接收缓冲区状态的bit,也有表示发送缓冲区状态的bit。 31 if(UTRSTAT0 & 0X01) //UTRSTAT的[0]位用于表示接收缓冲区是否就绪,=0表示缓冲区为空,可以接收了,=1表示缓冲区内有数据,暂时不能接收。 32 { 33 buf=URXH0; //URXH为接收缓冲区寄存器,缓冲区共8bit=2Byte, 34 while(!(UTRSTAT0 & 0X04));//UTRSTAT[3]=1时表示发送缓冲区与发送移位寄存器都为空,可以放入数据进行发送,=0时表示暂时不为空,不能放入数据。 35 UTXH0=buf;//将接收到的数据再发送出去 36 37 } 38 } 39 return 0; 40 }
上电后运行的初始汇编代码init.s:
AREA |DATA|,CODE,READONLY
ENTRY
ldr r13,=0x1000
IMPORT TSmain
b TSmain
END