📄 uart0.c
字号:
//*********************************************************************************************************************
//【 版 权 】Copyright (c) 2007-2008 gliethttp
//
//【 文 件 版 本 】v1.x
//
//【 文 件 名 称 】uart0.c
//
//【 创 建 日 期 】2007-04-04
//
//【 功 能 描 述 】
//*********************************************************************************************************************
#include <uart.h>
#define uart0_rcve_pdc_max 200
uint32 uart0_baud_rate;
static void uart0_irq_handler(void);
char uart0_cache_buffer[uart0_rcve_pdc_max];
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】void uart0_ini(uint32 baud)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
void uart0_ini(uint32 baud)
{
uart0_baud_rate = baud;
AT91F_US0_CfgPIO();
AT91F_US0_CfgPMC();
AT91F_US_Configure (
AT91C_BASE_US0,
__MCLK,
AT91C_US_ASYNC_MODE ,
uart0_baud_rate ,
0);
AT91C_BASE_US0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX;
AT91C_BASE_US0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN | AT91C_US_STTTO;
AT91F_US_EnableIt(AT91C_BASE_US0,AT91C_US_TIMEOUT);
AT91C_BASE_US0->US_RTOR = 10;
AT91C_BASE_PDC_US0->PDC_RPR = (uint32)uart0_cache_buffer;
AT91C_BASE_PDC_US0->PDC_RCR = uart0_rcve_pdc_max;
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US0, 7,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, uart0_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】static void uart0_irq_handler(void)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
static void uart0_irq_handler(void)
{
if(AT91C_BASE_US0->US_CSR & AT91C_US_TIMEOUT)
{
AT91C_BASE_US0->US_CR = AT91C_US_STTTO;
{uint32 counts;
boolean ok;
counts = uart0_rcve_pdc_max - AT91C_BASE_PDC_US0->PDC_RCR;
if( (dbgu_control.flag & flag_uart0_out_all) == 0 )
{
#define gps_stirng0 "$GPRMC"
if( xmemcmp(uart0_cache_buffer,gps_stirng0,strlen(gps_stirng0)) )ok = false;
else ok = true;
}else ok = true;
if(ok)
{
printf2dbgu(uart0_cache_buffer,counts);
uart0_cache_buffer[strlen(gps_stirng0)-1] = 0;
}
}
AT91C_BASE_PDC_US0->PDC_RPR = (uint32)uart0_cache_buffer;
AT91C_BASE_PDC_US0->PDC_RCR = uart0_rcve_pdc_max;
}
AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA;
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】void uart0_send_char(uint8 data)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
void uart0_send_char(uint8 data)
{
while( (AT91C_BASE_US0->US_CSR & AT91C_US_TXRDY) == false );
AT91C_BASE_US0->US_THR = data;
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】void uart0_send_string(char *string)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
void uart0_send_string(char *string)
{
while( (AT91C_BASE_US0->US_CSR & AT91C_US_TXRDY) == false );
AT91C_BASE_PDC_US0->PDC_TPR = (uint32)string;
AT91C_BASE_PDC_US0->PDC_TCR = strlen(string);
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】uint8 uart0_rcve_char(void)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
uint8 uart0_rcve_char(void)
{
return 0;
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】uint32 uart0_get_baud(void)
//【 创建人及创建时间 】gliethttp 2007-04-05
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
uint32 uart0_get_baud(void)
{
return uart0_baud_rate;
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】void uart0_set_baud(uint32 baud)
//【 创建人及创建时间 】gliethttp 2007-04-05
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
void uart0_set_baud(uint32 baud)
{
if(baud)
{
uart0_baud_rate = baud;
AT91F_US_SetBaudrate(AT91C_BASE_US0, __MCLK, uart0_baud_rate);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -