最近在弄mini2440跟PC端通信,本来想在超级终端输入字符串 ,2440接收后再进行+1处理后发送到PC显示出来。如:在终端输入abc,隔会后显示bcd。。问题出现:
输入abc正常,可隔会显示类似于~的字符。。。望各位看看
#include "def.h"
//#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
//================================
#define uartPCLK 50000000
#define uart_rate 115200
#define uart_brd ((int)(uartPCLK/(uart_rate*16))-1)
void dely(U32 tt)
{
U32 i;
for(;tt>0;tt--)
{
for(i=0;i<10000;i++){}
}
}
void init_uart()
{
rGPHCON = rGPHCON & (~(0xffff)) ;
rGPHCON = rGPHCON | (0xaaa0) ;
rGPHUP = 0xf; // 使用内部上拉电阻。
rUFCON0=0x00; //不使用FIFO
rUMCON0=0x00; //不使用自动流控制
rULCON0=0x03; //不采用红外线传输模式,无奇偶校验位,1个停止位,8个数据位
rUCON0=0x245; //发送中断为电平方式,接收中断为边沿方式,禁止超时中断,允许产生错误状态中断,禁止回送模式,禁止中止 //信号,传输模式为中断请求模式,接收模式也为中断请求模式。
rUBRDIV0=uart_brd;
}
void putc(char c)
{
if(c=='\n')
{
while(!(rUTRSTAT0&0x2));
dely(10);
rUTXH0='\r';
}
while(!(rUTRSTAT0&0x02));
dely(10);
rUTXH0 = c;
//rUTXH0(c);
}
void puts (char *s)
{
while(*s)
{
putc(*s++);
}
}
unsigned char getc()
{
while(!(rUTRSTAT0&0X01));
return rURXH0;
}
unsigned char gets(char *str)
{
char c;
char *s2=str;
while((c=getc())!='\r')
{
putc(c);
*s2++=c+1;
}
putc('\n');
}
int Main(int argc, char **argv)
{
int i;
U8 key;
U32 mpll_val=0;
int data;
unsigned char c;
mpll_val = (92<<12)|(1<<4)|(1);
ChangeMPllValue(127,2,1); //405MHZ
rCLKDIVN = 0x05;// 1:4:8 PCLK=50MHZ;
MMU_DisableICache();
MMU_DisableDCache();
rGPBCON = 0x155555;
init_uart();
data = 0x06;
// unsigned char cccc;
while(1)
{
char *s;
char *str;
char *s2;
puts("\n");
puts("\n");
puts("please enter any key:\n");
gets(str);
//putc(c);
//dely(50);
putc('\n');
puts(str);
}
return 0;
}