📄 serial.c
字号:
#include "../inc/def.h"
#include "../inc/config.h"
#include "../inc/board.h"
#include "AT91RM9200.h"
#include "lib_AT91RM9200.h"
U32 SerialBaud;
static U16 SerialPortSel;
U16 SerialSwitch(U16 port)
{
#ifdef SERIAL_PORTS_SWITCH
// U16 old_sel = SerialPortSel;
SerialPortSel = port?1:0;
#else
SerialPortSel = 0;
#endif
return SerialPortSel;
}
void SerialChgBaud(U32 baud)
{
AT91F_US_Configure (
(AT91PS_USART) AT91C_BASE_DBGU, // DBGU base address
GetMasterClock(), //
AT91C_US_ASYNC_MODE, // mode Register to be programmed
baud, // baudrate to be programmed
0); // timeguard to be programmed
// Enable Transmitter
AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
/* Enable Receiver */
AT91F_US_EnableRx((AT91PS_USART)AT91C_BASE_DBGU);
SerialBaud = baud;
}
void SerialTxEmpty(void)
{
while(!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
}
void SerialTxChar(char c)
{
if(c=='\n') {
while(!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU, '\r');
Delay(1);
}
while(!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU, c);
//Delay(1);
}
int SerialRxReady(void)
{
return AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU);
}
char SerialRxKey(void)
{
if(AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU))
return AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);
return 0;
}
char SerialRxChar(void)
{
while(!AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU));
return AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);
}
int SerialRxToBuf(char *b)
{
if(AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU)) {
*b = AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);
return 1;
}
return 0;
}
void SerialTxString(char *s)
{
while(*s)
SerialTxChar(*s++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -