mini2440 串口通信 连续发送字符 发送一个字符小灯闪烁一下 用交叉编译连编译一下就可以了
三个文件 start.s uart.c makefile
start.s:
.global start
start:
b uart_run
uart.c:
#define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)
void delay(int c)
{
for(;c>0;c--);
}
void led_ops(int c)
{
if(c==1)
{
volatile int *p=(int *)0x56000014;
*p=(1<<5);
}else
{
volatile int *p=(int *)0x56000014;
*p=0;
}
delay(0xa00000);
}
void led_init(){
volatile int *p=(int *)0x56000010;
*p=(1<<10);
p=(int *)0x56000018;
*p=0;
}
#if 1
void uart_init()
{
led_init();
volatile int *p=(int *)0x56000070;
*p=0x02faaa;
p=(int *)0x56000078;
*p=0x7ff;
p=(int *)0x50000000;
*p=0x3;
p=(int *)0x50000004;
*p=0x245;
p=(int *)0x50000008;
*p=0;
p=(int *)0x5000000c;
*p=0;
p=(int *)0x50000028;
*p= ( (int)(50000000/16./115200+0.5) -1 );
int i;
for(i=0;i<1000;i++);
}
#endif
void putci(char c){
volatile int *p=(int *)0x50000023;
volatile int *q=(int *)0x50000010;
while(!(*q&0x2));
WrUTXH0(c);
}
void uart_run(){
uart_init();
int i=0;
while(1)
{
led_ops(0);
putci('a');
led_ops(1);
putci('A');
led_ops(0);
}
}
makefile:
uarts.bin:uart
arm-linux-objcopy -O binary uart uarts.bin
uart:start.o uart.o
arm-linux-gcc -e start -nostartfiles -nostdlib start.o uart.o -o uart
uart.o:uart.c
arm-linux-gcc -c uart.c
start.o:start.s
arm-linux-gcc -c start.s
clean:
rm uart.o start.o uart uart.bin