📄 uart.c
字号:
/*******************************************************************************
该文件是Space OS源代码的一部分,欢迎提供意见和反馈。
版权所有 (C) 2002-2003 中国科学院空间科学与应用总体部,保留所有权利。
*******************************************************************************/
/*******************************************************************************
文件: UART.C
作者: sam
创建: 2003-06-20
版本: 1.0.0
功能:
与串口相关的函数定义.
相关文件:
UART.H
*******************************************************************************/
#include "eb40a.h"
#include "uart.h"
void HalUartInit( DWORD dwBps )
{
// First, enable the clock of the PIOB
AT91C_BASE_PS->PS_PCER = 1 << AT91C_PS_US1;
//* Define RXD and TXD as peripheral
AT91C_BASE_PIO->PIO_PDR = AT91C_P22_RXD1 | AT91C_P21_TXD1;
//* Disable interrupts
AT91C_BASE_US1->US_IDR = 0xFFFFFFFF;
//* Reset receiver and transmitter
AT91C_BASE_US1->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;
//* Define the baud rate divisor register
AT91C_BASE_US1->US_BRGR = ((MCK * 10) / (dwBps * 16) + 5) / 10;
//* Write the Timeguard Register
AT91C_BASE_US1->US_TTGR = 0;
//* Define the USART mode
AT91C_BASE_US1->US_MR = AT91C_US_CHMODE_NORMAL
| AT91C_US_NBSTOP_1_BIT
| AT91C_US_PAR_NONE
| AT91C_US_CHRL_8_BITS
| AT91C_US_CLKS_CLOCK;
// Enable usart
AT91C_BASE_US1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
}
void HalUartSendByte( BYTE byData )
{
while( (AT91C_BASE_US1->US_CSR & AT91C_US_TXRDY) == 0 )
KeDelay( 1 );
AT91C_BASE_US1->US_THR = byData;
}
void HalUartSendString( void* szString )
{
CHAR* szPos;
szPos = szString;
while ( *szPos )
{
HalUartSendByte( (BYTE)*szPos );
szPos++;
}
}
BOOL HalUartGetByte( BYTE* pbyData )
{
if ( (AT91C_BASE_US1->US_CSR & AT91C_US_RXRDY) != 0 )
{
*pbyData = (BYTE)AT91C_BASE_US1->US_RHR;
return TRUE;
}
else
{
*pbyData = 0x00;
return FALSE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -