📄 uart1.c
字号:
//*********************************************************************************************************************
//【 版 权 】Copyright (c) 2007-2008 gliethttp
//
//【 文 件 版 本 】v1.x
//
//【 文 件 名 称 】uart1.c
//
//【 创 建 日 期 】2007-04-04
//
//【 功 能 描 述 】
//*********************************************************************************************************************
#include <uart.h>
#define uart1_rcve_pdc_max 200
uint32 uart1_baud_rate;
static void uart1_irq_handler(void);
char uart1_cache_buffer[uart1_rcve_pdc_max];
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】void uart1_ini(uint32 baud)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
void uart1_ini(uint32 baud)
{
uart1_baud_rate = baud;
AT91F_US1_CfgPIO();
AT91F_US1_CfgPMC();
AT91F_US_Configure (
AT91C_BASE_US1,
__MCLK,
AT91C_US_ASYNC_MODE ,
uart1_baud_rate ,
0);
AT91C_BASE_US1->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX;
AT91C_BASE_US1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN | AT91C_US_STTTO;
AT91F_US_EnableIt(AT91C_BASE_US1,AT91C_US_TIMEOUT);
AT91C_BASE_US1->US_RTOR = 10;
AT91C_BASE_PDC_US1->PDC_RPR = (uint32)uart1_cache_buffer;
AT91C_BASE_PDC_US1->PDC_RCR = uart1_rcve_pdc_max;
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US1, 7,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, uart1_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】static void uart1_irq_handler(void)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
static void uart1_irq_handler(void)
{
if(AT91C_BASE_US1->US_CSR & AT91C_US_TIMEOUT)
{
AT91C_BASE_US1->US_CR = AT91C_US_STTTO;
{uint32 counts;
boolean ok;
counts = uart1_rcve_pdc_max - AT91C_BASE_PDC_US1->PDC_RCR;
if( (dbgu_control.flag & flag_uart1_out_all) == 0 )
{
#define ais_stirng0 "!AIVDM"
if( xmemcmp(uart1_cache_buffer,ais_stirng0,strlen(ais_stirng0)) )ok = false;
else ok = true;
}else ok = true;
if(ok)
{
printf2dbgu(uart1_cache_buffer,counts);
uart1_cache_buffer[strlen(ais_stirng0)-1] = 0;
}
}
AT91C_BASE_PDC_US1->PDC_RPR = (uint32)uart1_cache_buffer;
AT91C_BASE_PDC_US1->PDC_RCR = uart1_rcve_pdc_max;
}
AT91C_BASE_US1->US_CR = AT91C_US_RSTSTA;
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】void uart1_send_char(uint8 data)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
void uart1_send_char(uint8 data)
{
while( (AT91C_BASE_US1->US_CSR & AT91C_US_TXRDY) == false );
AT91C_BASE_US1->US_THR = data;
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】void uart1_send_string(char *string)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
void uart1_send_string(char *string)
{
while( (AT91C_BASE_US1->US_CSR & AT91C_US_TXRDY) == false );
AT91C_BASE_PDC_US1->PDC_TPR = (uint32)string;
AT91C_BASE_PDC_US1->PDC_TCR = strlen(string);
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】uint8 uart1_rcve_char(void)
//【 创建人及创建时间 】gliethttp 2007-04-04
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
uint8 uart1_rcve_char(void)
{
return 0;
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】uint32 uart1_get_baud(void)
//【 创建人及创建时间 】gliethttp 2007-04-05
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
uint32 uart1_get_baud(void)
{
return uart1_baud_rate;
}
//---------------------------------------------------------------------------------------------------------------------
//【 版 本 】v1.0
//【 函 数 名 称 】void uart1_set_baud(uint32 baud)
//【 创建人及创建时间 】gliethttp 2007-04-05
//【 修改人及修改时间 】
//【 修 改 原 因 】
//【 功 能 描 述 】
//---------------------------------------------------------------------------------------------------------------------
void uart1_set_baud(uint32 baud)
{
if(baud)
{
uart1_baud_rate = baud;
AT91F_US_SetBaudrate(AT91C_BASE_US1, __MCLK, uart1_baud_rate);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -