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

📄 uart1.c

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