📄 uart.cpp
字号:
#include "precomp.h"
#include "uart.h"
#define PCLK 101250000 //(FCLK=101.25MHz)
#define BAUDRATE 115200
volatile S3C2410_IOPreg* UART::s2410IOP = (volatile S3C2410_IOPreg*)S3C2410_IOP_VA_BASE;
volatile S3C2410_UART0reg* UART::s2410UART = (volatile S3C2410_UART0reg*)S3C2410_UART0_VA_BASE;
void UART::Initialize()
{
// (GPH3,GPH2)
s2410IOP->rGPHUP |= (0x03<<2);
s2410IOP->rGPHCON = (s2410IOP->rGPHCON & (~0x000000F0)) | (0x000000A0);
// mode setting...
s2410UART->rULCON = 0x03; // forbid IRDA,no Parity, 1-stop-bit,8-bit dat
s2410UART->rUCON = 0x245; // |0 1 0 0 1 0 0 0 1 0 1|interrupt or polling method
s2410UART->rUFCON = 0x00; // FIFO disabled
s2410UART->rUMCON = 0x00; //disable AFC
// baudrate
s2410UART->rUBRDIV=(int)(PCLK/16.0/BAUDRATE + 0.5) -1;
for(int i=0;i<100;i++)
;
}
void UART::SendByte(UCHAR const data)
{
while(!(s2410UART->rUTRSTAT&0x02));
for(int i=0;i<10;i++)
;
s2410UART->rUTXH=data;
}
void UART::SendString(UCHAR* const str)
{
UCHAR* temp=str;
while((*temp)!='\0')
{
if(*temp=='\n')
SendByte('\r');
SendByte(*(temp++));
}
}
UCHAR UART::GetKey()
{
while(!(s2410UART->rUTRSTAT&0x01));
for(int i=0;i<10;i++);
return (s2410UART->rURXH);
}
UCHAR UART::TryGetKey()
{
UCHAR ch;
if(!(s2410UART->rUTRSTAT&0x01))
{
ch=UART_NO_INPUT;
}
else
{
ch=s2410UART->rURXH;
}
return ch;
}
UINT UART::Test()
{
UCHAR Tstr1[]="Please press a key for the test...\r\n";
UCHAR Tstr2[]="Test success!\r\n";
UCHAR Tstr3[]="do iic test again------read 0x00 and 0x05\r\n";
UCHAR Tstr4[]="iic test again over\r\n";
UCHAR div;
//test UART function
SendString(&Tstr1[0]);
GetKey();
SendString(&Tstr2[0]);
div=s2410UART->rUBRDIV;
SendByte(div);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -