微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第4课:UART串口编程

第4课:UART串口编程

时间:11-11 来源:互联网 点击:

read(char *a,int n)
{
do{

while(!(UTRSTAT0&1));//第1位为1表示shifter内的数据已经有了,可以读了,如果为0的话将一直循环,知道有数据可读。
*(a++) = (char)URXH0;
n--;
}
while(n>0);
}

void uart_read_line(char *a)
{
do{

while(!(UTRSTAT0&1));
*(a++) = URXH0;
}
while(*a!=\0);
}

void led_on()
{
GPEDAT = 0;
}

void led_off()
{
GPEDAT = (3<12);
}

第5个文件main.c文件

#include"addr.h"
#include"uart.h"

int main()
{
char *t = "Welcome to bootloader...\r\n";//这里只能用指针来传递,指针指向常量字符串的首地址传入。
char *t1 = "press 1 to light loop on\r\n";
char *t2 ="press 2 to light loop off\r\n";
char *t3 ="please input your choice\r\n";
char r[10] ;//这里指针务必用数组来分配,一个没有malloc函数。
GPECON = GPE12_out|GPE13_out;

uart_init();
uart_write(t);
uart_write(t1);
uart_write(t2);
uart_write(t3);
while(1){
uart_read(r,1);
UTXH0 = *r;//这里是为了回显
switch(*r){
case 1:led_on();break;
case 2:led_off();break;
}
}
return 0;
}

第6个连接文件

SECTIONS {
. = 0x00;
.text : { *(.text) }
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
最后介绍下makefile比较好的写法。

SRC := $(wildcard *.c) //设定直接变量SRC,$(wildcard )表示使用通配符
OBJC := $(patsubst %.c,%.o,$(SRC)) //表示把SRC里的值是.c结尾的换成.o结尾的结果保存到OBJC中

uart.bin:uart.elf
arm-linux-objcopy -O binary -S $^ $@//表示$@目标文件$^所有依赖
arm-linux-objdump -D -m arm $^ > uart.dis
uart.elf:crt0.o $(OBJC)
arm-linux-ld -T uart.lds $^ -o $@
%.o:%.c //任意.o的依赖为.c
arm-linux-gcc -c $^ -o $@
%.o:%.s
arm-linux-gcc -c $^ -o $@

clean:
rm -f uart.bin uart.dis uart.elf uart.o crt0.o main.o

然后用jtag烧入0x0内部SRAM的4k容量内,并在minicom里输入数据来控制led

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top