1、打开ads,新建一个工程,命名为:uart
area init,code,readonly
start
ldr sp,=4096
import main
b main
/*UART registers*/
#define ULCON0 (*(volatile unsigned long *)0x50000000) //串口0串行控制寄存器
#define UCON0 (*(volatile unsigned long *)0x50000004) //串口0控制寄存器
#define UFCON0 (*(volatile unsigned long *)0x50000008) //串口0FIFO控制寄存器
#define UMCON0 (*(volatile unsigned long *)0x5000000c) //串口0 MODEM控制寄存器
#define UTRSTAT0 (*(volatile unsigned long *)0x50000010) //串口0发送/接收状态寄存器
#define UTXH0 (*(volatile unsigned char *)0x50000020) //串口0发送缓冲寄存器
#define URXH0 (*(volatile unsigned char *)0x50000024) //串口0接收缓冲寄存器
#define UBRDIV0 (*(volatile unsigned long *)0x50000028) //串口0波特率除数寄存器UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
2、在工程中新建一个文件 start.s
/* start.s */
start
ldr sp,=4096
import main
b main
end
3、再新建一个文件用于对串口有关的端口进行初始化,也包括寄存器的初始化。
/* uart.h */
/* GPIO registers */
#define GPHCON (*(volatile unsigned long *)0x56000070) //GPIO端口H配置寄存器
#define GPHDAT (*(volatile unsigned long *)0x56000074) //GPIO端口H数据寄存器
#define GPHUP (*(volatile unsigned long *)0x56000078) //GPIO端口H上拉无效寄存器
#define GPHCON (*(volatile unsigned long *)0x56000070) //GPIO端口H配置寄存器
#define GPHDAT (*(volatile unsigned long *)0x56000074) //GPIO端口H数据寄存器
#define GPHUP (*(volatile unsigned long *)0x56000078) //GPIO端口H上拉无效寄存器
/*UART registers*/
#define ULCON0 (*(volatile unsigned long *)0x50000000) //串口0串行控制寄存器
#define UCON0 (*(volatile unsigned long *)0x50000004) //串口0控制寄存器
#define UFCON0 (*(volatile unsigned long *)0x50000008) //串口0FIFO控制寄存器
#define UMCON0 (*(volatile unsigned long *)0x5000000c) //串口0 MODEM控制寄存器
#define UTRSTAT0 (*(volatile unsigned long *)0x50000010) //串口0发送/接收状态寄存器
#define UTXH0 (*(volatile unsigned char *)0x50000020) //串口0发送缓冲寄存器
#define URXH0 (*(volatile unsigned char *)0x50000024) //串口0接收缓冲寄存器
#define UBRDIV0 (*(volatile unsigned long *)0x50000028) //串口0波特率除数寄存器UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
#define PLCK 356864000
#define UART_CLK PLCK //内部系统时钟频率
#define UART_BAUD_RATE 1115200
#define UART_BED ((UART_CLK/(UART_BAUD_RATE * 16))-1)
4、在工程中新建一个main.c的执行源文件;
/*mian.c*/
#include<uart.h>
/*uart串口初始化*/
void init(void)
{
GPHCON |= 0xa0; //GPH2,GPH3 used as TXD0,RXD0
GPHUP = 0x0; //GPH2,GPH3内部上拉
ULCON0 = 0x03; //8N1
UCON0 = 0x05; //查询方式为轮询或中断;时钟选择为PCLK
UFCON0 = 0x00; //不使用FIFO
UMCON0 = 0x00; //不使用流控
}
/*uart串口接受字符 */
void putc(unsigned char c)
{
while(!(UTRSTAT0 & (0x1<<2)))
UTXH0 = C;
}
/*uart串口输出字符*/
unsigned char getc()
{
while(!(UTRSTAT0 & 0x1));
return URXH0;
}
int main()
{
unsigned char a;
init();
while(!(UTRSTAT0 & (1<<2)))
{
a=putc(a);
getc();
}
}
在编译的过程中对发现UBRDIVn 的值等于19时才能正确回显;这一点不知道是为什么?(正在寻找答案)