⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart0.c

📁 at91sam7s64两个uart、一个debug的ads源程序,atmel的基于arm7内核的单片机。
💻 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 + -