这儿用串口来实现从电脑键盘读取数据,显现在中止上面
首要对串口进行初始化
1.引脚设置(初始化对应的GPIO口为TX或RX)
2.数据格式设置(ULCON0,串口线控制器0)
3.作业形式设置(UCON0,串口控制器)
4.波特率设置(UBRDIV0用来存用公式计算出来的整数部分,UDIVSLOT0用来寄存公式计算出来的小数部分超支得到的数据)
公式如下
UBRDIV0=(int)(PCLK/(BAUD*16)-1)
#define PCLK 66000000 //PCLk是用来供串口用的时钟
#define BAUD 115200
void uart_init()
{
GPACON|=0x22;
ULCON0=0x3;
UCON0=0x5;
UBRDIV0=(int)(PCLK/(BAUD*16)-1);
UDIVSLOT0=0x0D5D5;
}
进行发送数据的操作
先判别串口是否在发送数据(即忙检测,UTRSTAT0),假如不是忙,就往UTXH0里写入要发送的数据
void putc(unsigned char ch)
{
while(!(UTRSTAT0&(0b1<<2)));
UTXH0=ch;
}
进行读数据的操作
与发送相似,先判别忙,若不忙,则从URXH0里边读出数据就能够了
unsigned char getc()
{
unsigned char dat;
while(!(UTRSTAT0&(0b1<<0)));
dat=URXH0;
return dat;
}
假如咱们要在中止控制台想看到当键盘输入一个字符,屏幕就显现这个字符,能够加上如下代码
unsigned char getc()
{
unsigned char dat;
while(!(UTRSTAT0&(0b1<<0)));
dat=URXH0;
if ((dat==0x0d)||(dat==0x0a))
{
}
else
putc(dat);
return dat;
}
在这儿特别强调,在宏界说里边的千万留意是long,short,仍是char,一旦界说犯错,查看起来很难会去留意这个当地;
还有就是在判别不等于0时,千万留意括号的方位,不要多,不要少,我在写这段代码时,就因为while(!(UTRSTAT0&(0b1<<0)))这一句没有把UTRSTAT0&(0b1<<0)这一句括起来,就呈现键盘输入一个字符,屏幕出来一大堆的状况,查看了半响也查看不出问题所在吗,最好仍是一句一句代码对应厂家给的代码才留意到
最终附上悉数代码
和main函数代码
#define GPACON *((volatile unsigned short*)0x7F008000)
#define ULCON0 *((volatile unsigned long*)0x7F005000)
#define UCON0 *((volatile unsigned long*)0x7F005004)
#define UBRDIV0 *((volatile unsigned short*)0x7F005028)
#define UDIVSLOT0 *((volatile unsigned short*)0x7F00502C)
#define UTRSTAT0 *((volatile unsigned long*)0x7F005010)
#define UTXH0 *((volatile unsigned char*)0x7F005020)
#define URXH0 *((volatile unsigned char*)0x7F005024)
#define PCLK 66000000
#define BAUD 115200
void uart_init()
{
GPACON|=0x22;
ULCON0=0x3;
UCON0=0x5;
UBRDIV0=(int)(PCLK/(BAUD*16)-1);
UDIVSLOT0=0x0D5D5;
}
void putc(unsigned char ch)
{
while(!(UTRSTAT0&(0b1<<2)));
UTXH0=ch;
}
unsigned char getc()
{
unsigned char dat;
while(!(UTRSTAT0&(0b1<<0)));
dat=URXH0;
if ((dat==0x0d)||(dat==0x0a))
{
}
else
putc(dat);
return dat;
}
**************************************************************************************************************
unsigned char p[13]=”I am iron man”;
void gboot_main()
{
int i;
unsigned char temp[4*1024];
#ifdef MMU_ON
mmu_init();
#endif
led_off();
button_init();
irq_init();
uart_init();
putc(0x0a);
for(i=0;i<13;i++)
putc(p[i]);
while(1)
{
getc();
}
}