📄 console.c
字号:
#include <stdarg.h>
#include "inc\44b0x.h"
#include "DataType.h"
#include "console.h"
#include "option.h"
static void Delay(int time)
{
while(time--);
}
void UartInit(int ch, int baud)
{
U8 a;
if(!ch)
{
rUFCON0 = 0x0; //禁止使用FIFO
rUMCON0 = 0x0; //禁止使用FIFO
rULCON0 = 0x3; //正常无奇偶校验,一个停止位,8个数据位
rUCON0 = 0x45; //TX RX 都用PULSE非LEVEL中断
//rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
rUBRDIV0 = (int)(MCLK/(16.0*baud)+0.5)-1;
a = rURXH0;
}
else
{
rUFCON1 = 0x0; //禁止使用FIFO
rUMCON1 = 0x0; //禁止使用FIFO
rULCON1 = 0x3; //正常无奇偶校验,一个停止位,8个数据位
rUCON1 = 0x45;
//rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
//baud *= 16;
rUBRDIV0 = (int)(MCLK/(16.0*baud)+0.5)-1;
a = rURXH1;
}
}
void UartSend(int ch, char data)
{
if(!ch)
{
if(data=='\n')
{
while(!(rUTRSTAT0&0x2));
//改动延时时间1--10
Delay(10); //由于超级终端反应较慢,有一个微小延迟
WrUTXH0('\r');
}
while(!(rUTRSTAT0&0x2)); //等待知道THR变空
//改动延时时间1--10
Delay(10);
rUTXH0 = data;
}
else
{
if(data=='\n')
{
while(!(rUTRSTAT1&0x2));
//改动延时时间1--10
Delay(10); //由于超级终端反应较慢,有一个微小延迟
rUTXH1 = '\r';
}
while(!(rUTRSTAT1&0x2)); //等待知道THR变空
//改动延时时间1--10
Delay(10);
rUTXH1 = data;
}
}
int UartReceive(int ch)
{
if(!ch)
{
while(!(rUTRSTAT0&0x1)); //等待直到接受到一个数据
return rURXH0;
}
else
{
while(!(rUTRSTAT1&0x1)); //等待直到接受到一个数据
return rURXH1;
}
}
int UartRxStat(int ch)
{
if(!ch)
return (rUTRSTAT0&0x1);
else
return (rUTRSTAT1&0x1);
}
int UartGetch(int ch)
{
if(!ch)
{
if(rUTRSTAT0&0x1) //如果收到字符就返回该字符
return rURXH0;
else
return -1; //如果没有收到字符就返回0
}
else
{
if(rUTRSTAT1&0x1) //如果收到字符就返回该字符
return rURXH1;
else
return -1; //如果没有收到字符就返回0
}
}
int UartGetkey(int ch)
{
return ch?rURXH1:rURXH0;
}
void UartSendString(int ch, char *pt)
{
while(*pt)
UartSend(ch, *pt++);
}
/************************************************/
void console_init(int baud)
{
UartInit(CONSOLE_UART, baud);
}
void putch(char data)
{
UartSend(CONSOLE_UART, data);
}
void puts(char *str)
{
while(*str)
UartSend(CONSOLE_UART, *str++);
}
int getch()
{
return UartReceive(CONSOLE_UART);
}
int getkey()
{
return UartGetkey(CONSOLE_UART);
}
int kbhit()
{
return UartRxStat(CONSOLE_UART);
}
#ifdef __SDT_COMPILER
typedef char *__va_list[1];
#else
typedef int *__va_list[1];
#endif
int vsprintf(char * /*s*/, const char * /*format*/, __va_list /*arg*/);
void printf(char *fmt, ...)
{
va_list ap;
char string[256];
va_start(ap, fmt);
vsprintf(string, fmt, ap);
UartSendString(CONSOLE_UART, string);
va_end(ap);
}
void PortInit(void)
{
// PORT A GROUP
/* BIT 9 8 7 6 5 4 3 2 1 0 */
/* A24 A23 A22 A21 A20 A19 A18 A17 A16 A0 */
/* 0 1 1 1 1 1 1 1 1 1 */
rPCONA = 0x1ff;
// PORT B GROUP
/* BIT 10 9 8 7 6 5 4 3 2 1 0 */
/* /CS5 /CS4 /CS3 /CS2 /CS1 nWBE3 nWBE2 /SRAS /SCAS SCLK SCKE */
/* EXT NIC 8019 IDE D12 NC NC Sdram Sdram Sdram Sdram */
/* 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1 */
rPDATB = 0x04f;
rPCONB = 0x7cf;
//PORT C GROUP
//BUSWIDTH=16 */
/* PC15 14 13 12 11 10 9 8 */
/* o o RXD1 TXD1 o o o o */
/* NC NC Uart1 Uart1 NC NC NC NC */
/* 01 01 11 11 01 01 01 01 */
/* PC7 6 5 4 3 2 1 0 */
/* o o o o o o o o */
/* NC NC NC NC LED LED LED LED */
/* 01 01 01 01 01 01 01 01 */
rPDATC = 0x0000; //All IO is low
rPCONC = 0x5f555555;
rPUPC = 0x3000; //PULL UP RESISTOR should be enabled to I/O
//PORT D GROUP
/* PORT D GROUP(I/O OR LCD) */
/* BIT7 6 5 4 3 2 1 0 */
/* VF VM VLINE VCLK VD3 VD2 VD1 VD0 */
/* 01 01 01 01 01 01 01 01 */
rPDATD= 0x55;
rPCOND= 0xaaaa;
rPUPD = 0x00;
//These pins must be set only after CPU's internal LCD controller is enable
/////////////////////////////////////////////////////
//PORT E GROUP
/* Bit 8 7 6 5 4 3 2 1 0 */
/* ENDLAN o o TOU2 o o RXD0 TXD0 FOUT */
/* 00 01 01 10 01 01 10 10 11 */
rPDATE = 0x157; //Beep = 10
rPCONE = 0x556b;
rPUPE = 0xff;
//PORT F GROUP
/* Bit8 7 6 5 4 3 2 1 0 */
/* IISCLK IISDI IISDO IISLRCK Input Input Input IICSDA IICSCL */
/* 100 100 100 100 00 00 00 10 10 */
rPDATF = 0x0;
rPCONF = 0x24900a;
rPUPF = 0x1d3;
//PORT G GROUP
/* BIT7 6 5 4 3 2 1 0 */
/* EINT7 EINT6 EINT5 EINT4 EINT3 EINT2 EINT1 EINT0 */
/* KEY3 KEY2 KEY1 KEY0 NIC EXT IDE USB */
/* 11 11 11 11 11 11 11 11 */
rPDATG = 0xff;
rPCONG = 0x000f; //enable extint0 extint1
rPUPG = 0x00; //enabled pull up register
rSPUCR= 0x7; //D15-D0 pull-up disable
//rSPUCR= 0x6; //D15-D0 pull-up enable
rSYSCFG = 0x0e; //使用8K字节的指令缓存,write buffer disable
rNCACHBE0 = 0xc0000000; //定义非Cache区,从0x0000000到0xbffffff 烧写FLASH时不能对FLASH cache
rEXTINT = 0x42; //所有的外部硬件中断为低电平触发, extint0 为下降沿,extint1为上升沿
rINTCON = 5; // non vector mode, irq enable
rINTMOD = 0; //all are irq mode
// rINTMSK = BIT_EINT1|BIT_GLOBAL;
}
U32 SERIAL_BAUD = 115200;
void Main(void)
{
PortInit();
console_init(SERIAL_BAUD);
next_line();
puts(" 欢迎使用北京恒丰锐科科技有限公司ARM7开发板\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -