串口打印,好东西啊这个。目标就是从板子传输数据打印在超级终端上,也就是在电脑上能显示板子传输的数据即可,这个比较容易,有参考了TQ自带的2440lib.c文件,对初始化那些参考芯片跟那个c文件之后很快程序就出来了,有更简便的方法,但是要自己写出来才比较印象深刻。
#include "2440addr.h"
#include "Option.h"
#include "def.h"
//一旦用到U32怎么不行
unsigned int PCLK;
extern void Uart_Printf(char *fmt,...);//函数申明,不然一直提示警告
extern void Uart_Select(int ch);
void delay(void)//Delay()在2440lib.c里边有定义,不小心重定义了,纠结了一下
{
unsigned int i,j;
for(i=0;i<1000;i++)
for(j=0;j<1000;j++)
;
}
void My_uart_init(int mypclk,int mybuat)//我自己写的串口初始化
{
unsigned int a;
rGPHCON = 0x0faaa;//0x1111 1010 1010 1010选中RTS、CTS、TXD、RXD
rGPHUP = 0x7ff;//全取消上拉电阻【0;10」共11个I/O口
if(mypclk == 0)//如果为0就用mpll中PCLK的时钟频率,这里我用了50MHz,而且必须是50MHz
mypclk = PCLK;//mpll的PCLK不就是50MHz么,如果设置为mypclk为0应该也是可以,没试。
rUFCON0 = 0x0;
rUFCON1 = 0x0;
rUFCON2 = 0x0;//FIFO禁止
rUMCON0 = 0x0;
rUMCON1 = 0x0;//禁止AFC等
rULCON0 = 0x3;//传输字长8字节
rUCON0 = 0x245;//【0,3】是保留没得设置的,设置Rx错误状态中断,Tx电平中断。串口1、2设置一样
rUBRDIV0 = ((int)(mypclk/(mybuat*16)))-1;//为发送器和接收器提供串行时钟,计算公式见芯片手册
rULCON1 = 0x3;
rUCON1 = 0x245;
rUBRDIV1 = ((int)(mypclk/(mybuat*16)))-1;
rULCON2 = 0x3;
rUCON2 = 0x245;
rUBRDIV2 = ((int)(mypclk/(mybuat*16)))-1;
for(a=0;a<100;a++);//延时,参考2440lib.c,个人理解应该是
}
void Main(void)
{
Uart_Select(0);//选择串口0
My_uart_init(50000000,115200);//给时钟50MHz,波特率115200串口才能工作
Uart_Printf("\n\n");//测试2440lib.c里面关于输入\n是不是会另外补上\r,回车换行
delay();
while(1)
{
Uart_Printf("I love caimanjun more than myself\n"); //打印字符串
delay();
Uart_Printf("yes I do! \n");
delay();
}
}