s3c2440裸机串口UART

串口收发数据:


        115200,8N1。
        每一位的时间是t=1/115200。
        传输一个字节需要10位:包括起始位1位,数据位8位,停止位1位,需要的时间是t=10/115200。
        每秒传输的的字节数: 1/t = 115200/10 = 11520byte。
        回环模式:
            一发出数据就立刻收到,用于测试。

main.c

#include"s3c2440_soc.h"
#include"uart.h"

int main(void)
{
	unsigned char c;
	uart0_init();
	puts("Hello , world\n\r");
	while(1)
		{
            c = getchar();
			if(c == '\r')
			{
			putchar('\n');
			}
			if(c == '\n')
			{
			putchar('\r');
			}
			putchar(c);
		} 
	return 0;
}



uart.c

#include"s3c2440_soc._h"

void uart0_init()
{
	//引脚设置
	//GPH2/3  TXD0  RXD0
	GPHCON &= ~((3<<4) | (3 <<6));
	GPHCON |=  ((2<<4) | (2<< 6));
	//要想平时处于高电平,需要启动内部上拉
	GPHUP  &= ~((1<<2) | (1<<3));

	//设置波特率
	UCON0 = 0x00000005;/*PCLK,中断/查询模式*/
	//计算公式UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
	//例如串口时钟频率为40MUBRDIVn = (int)(40000000 / (115200 x 16) ) -1
   //= (int)(21.7) -1 [round to the nearest whole number]
   //= 22 -1 = 21
	//50M时  UBRDIVn = (int)(50000000 / (115200 * 16))-1 = 26
	UBRDIV0 = 26;
	//设置数据模式
	ULCON0 = 0X00000003;
	
	
	//设置波特率
	//设置数据格式
	
}

int getchar(void)
{
	while(!(UTRSTAT0 & (1<<2)));
	UTXH0 = (unsigned char )c;//发送寄存器
}
int putchar(int c)
{
	while(!(UTRSTAT0 & (1<<0)) //状态查询寄存器
	return URXH0;  //接收寄存器
}


int puts(const char *s)
{
	while(*s)
		{
			putchar(*s);
			s++;
		}
}

makefile

all:
	arm-linux-gcc -c -o led.o led.c
	arm-linux-gcc -c -o uart.o uart.c
	arm-linux-gcc -c -o start.o start.S
	arm-linux-ld -Ttext 0 start.o led.o uart.o main.o -o uart.elf
	arm-linux-objcopy -O binary -S uart.elf uart.bin
	arm-linux-objdump -D uart.elf > uart.dis
clean:
	rm *.bin *.o *.elf *.dis
	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值