📄 serial.c
字号:
extern cregister unsigned int IE,IF,ST;
interrupt void c_int03(void);
#define UART_BASE_ADDR 0xC00000
#define UART_REV_ADDR *(int *)0xC00000
#define UART_RESTORE_ADDR *(int *)0xC00002
#define RBR *((int *)(UART_BASE_ADDR+0))
#define THR *((int *)(UART_BASE_ADDR+0))
#define IER *((int *)(UART_BASE_ADDR+1))
#define IIR *((int *)(UART_BASE_ADDR+2))
#define FCR *((int *)(UART_BASE_ADDR+2))
#define LCR *((int *)(UART_BASE_ADDR+3))
#define MCR *((int *)(UART_BASE_ADDR+4))
#define LSR *((int *)(UART_BASE_ADDR+5))
#define MSR *((int *)(UART_BASE_ADDR+6))
#define SCR *((int *)(UART_BASE_ADDR+7))
#define DLL *((int *)(UART_BASE_ADDR+0))
#define DLM *((int *)(UART_BASE_ADDR+1))
unsigned char inp_buffer[0x10];
unsigned char uartstate;
int i, flag, index;
unsigned int *VECS=(unsigned int *)0x809fc0;
main()
{
flag = 0;
index = 0;
IE = 4;
IF = 0;
ST = 0x2000;
for(i=0; i<16; i++)
{
inp_buffer[i]=0;
}
*(VECS+3) = 0x60000000 | (unsigned int)c_int03;
LCR = 0x80;
DLL = 0x18; /* 9600 */
DLM = 0x00;
LCR = 0x03; /* 8 bits, no parity and one stop bit */
FCR = 0x01;
MCR = 0x20;
IER = 0x01;
for(;;){}
}
interrupt void c_int03(void)
{
/* the following is to output data to MAX232,only one a case */
/* the following is to input data from MAX232 */
uartstate = LSR;
inp_buffer[index] = RBR&0xff;
THR = inp_buffer[index];
index++;
index = index%0x10;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -