📄 serial.c
字号:
#include "system.h"
#include "types.h"
#include "serial.h"
//init the first series port
void serial_init()
{
UINT32 intm;
UINT32 status; //set bandrate under 38400
HAL_WRITE_UINT32(SERIAL_BASE+BAUD_REG_LO,BAUD_RATE_2400_LO);
HAL_WRITE_UINT32(SERIAL_BASE+BAUD_REG_HI,BAUD_RATE_2400_HI);
//clear interrupt state
//intm = STAT_XMIT_EMPT | ~(STAT_REV_AVAIL) ;
//HAL_WRITE_UINT32(SERIAL_BASE+INT_STAT_REG,intm);
/*
//enable UART interrupt
HAL_READ_UINT32(BASE_SYSTEM+INT_Unmask, status);
status &= (~UART_BIT);
HAL_WRITE_UINT32(BASE_SYSTEM+INT_Unmask, status);
//enable Serial interrupt
intm = EN_XMIT_EMPT | EN_REV_AVAIL ;
HAL_WRITE_UINT32(SERIAL_BASE+INT_ENB_REG,intm);
*/
return;
}
//output a char whit first serial
void serial_putc( char c)
{
UINT32 status; //wait untile the Transmit fifo not full unsigned long addr;
//wait for trasmitter is free
do {
HAL_READ_UINT32(SERIAL_BASE+STAT_REG, status);
} while (!(status & XMIT_EMPT));
/*
do {
HAL_READ_UINT32(SERIAL_BASE+INT_STAT_REG, status);
} while ((status & STAT_XMIT_EMPT) == 0);
*/
//send this char
HAL_WRITE_UINT32(SERIAL_BASE+XMIT_DAT_REG,c);
// HAL_WRITE_UINT32(SERIAL_BASE+XMIT_DAT_REG,c);
//wait untill Transmit over
/*
do {
HAL_READ_UINT32(SERIAL_BASE+STAT_REG, status);
} while (!(status & XMIT_EMPT));
*/
}
void serial_print(char * string)
{
int len = strlen(string);
while ((len--) >0)
serial_putc(*string++);
}
//get char from serial port
int serial_getc(char* ch)
{
UINT32 status;
char c;
////wait for getting a new byte
/*
do {
HAL_READ_UINT32(SERIAL_BASE+INT_STAT_REG, status);
} while ((status & STAT_REV_AVAIL)== 0);
*/
do {
HAL_READ_UINT32(SERIAL_BASE+0x0c, status);
} while ((status & 0x02)== 0);
HAL_READ_UINT32(SERIAL_BASE+REC_DAT_REG, c);
*ch = c;
//status &= ~(STAT_REV_AVAIL);
//HAL_WRITE_UINT32(SERIAL_BASE+INT_STAT_REG, status);
return 1;
}
int serial_get(char * buf, int len)
{
int i;
for (i =0 ; i < len; i++)
serial_getc(&buf[i]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -