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

📄 uart.c

📁 44BO 的UCGUI包
💻 C
字号:
/*
 *Module: Uart.C		串口程序
 *Programed by: ZHI-XIONG PENG
 *Programed on: Date: 2004-12-22 18:11
 *Modified  by:
 *Modified  on: Date:
 *Copyright (c) LONGFLY SHAOGUAN Inc. All rights reserved
*/

/*
*********************************************************************************************************
*                                               INCLUDES
*********************************************************************************************************
*/

#define		UART_GLOBALS

#define		ComMessageMax	500

#include	"../SRC/includes.h"

extern void usart0_asm_irq_handler(void);
extern void usart1_asm_irq_handler(void);

char 	ComMessage[ComMessageMax];
	
void Usart0_c_irq_handler( AT91PS_USART USART_pt )
{
	unsigned int status,i;
	
	//* get Usart status register
	status = USART_pt->US_CSR & USART_pt->US_IMR;
	
	if ( status & ( AT91C_US_ENDRX | AT91C_US_TIMEOUT ) )
	{
		USART_pt->US_CR = AT91C_US_STTTO;
		for( i=0; i < (ComMessageMax-USART_pt->US_RCR); i++ )
		{
			Check_Frame( ComMessage[i] );	
		}
//		AT91F_US_PutChar (USART_pt, 'O');
		// Set PDC
//		AT91F_US_ReceiveFrame(USART_pt,(char *)ComMessage,ComMessageMax);
		USART_pt->US_RPR = (unsigned int)&ComMessage;
		USART_pt->US_RCR = ComMessageMax;
	}

	//* Reset the satus bit
	 USART_pt->US_CR = AT91C_US_RSTSTA;
}

//*----------------------------------------------------------------------------
//* Function Name       : Usart1_c_irq_handler
//* Object              : C handler interrupt function called by the interrupts 
//*                       assembling routine
//* Input Parameters    : <RTC_pt> time rtc descriptor
//* Output Parameters   : increment count_timer0_interrupt
//*----------------------------------------------------------------------------
void Usart1_c_irq_handler(AT91PS_USART USART_pt)
{
	unsigned int status;

	//* get Usart status register
	status = USART_pt->US_CSR & USART_pt->US_IMR;
	
	if ( status & AT91C_US_RXRDY)//接收
	{
//	#if OSVIEW > 0
//		OSView_RxISRHandler();
//	#else
//		Com1_RxISRHandler();
//	#endif
	}
	
	if ( status & AT91C_US_TXRDY )
	{	
//	#if OSVIEW  > 0
//		OSView_TxISRHandler();
//	#else
		
//	#endif
	}
	
//	if ( status & AT91C_US_OVRE) 
//	{
		//* clear US_RXRDY
		//AT91F_US_GetChar(USART_pt);
		//AT91F_US_PutChar (USART_pt, 'O');
//	}

	
	//* Check error
//	if ( status & AT91C_US_PARE) 
//	{
		//AT91F_US_PutChar (USART_pt, 'P');
//	}

//	if ( status & AT91C_US_FRAME) 
//	{
		//AT91F_US_PutChar (USART_pt, 'F');
//	}

//	if ( status & AT91C_US_TIMEOUT)
//	{
		//USART_pt->US_CR = AT91C_US_STTTO;
		//AT91F_US_PutChar (USART_pt, 'T');
//	}

	//* Reset the satus bit
	 USART_pt->US_CR = AT91C_US_RSTSTA;
}

void Usart_init(void)
{
	AT91PS_USART COM0,COM1;
    	 		
	COM0 = AT91C_BASE_US0;
	COM1 = AT91C_BASE_US1;
	
    AT91F_PIO_CfgPeriph( AT91C_BASE_PIO, AT91C_P15_RXD0 | AT91C_P14_TXD0, 0 );
//	AT91F_PIO_CfgPeriph( AT91C_BASE_PIO, AT91C_P22_RXD1 | AT91C_P21_TXD1, 0 );
	
	AT91F_PS_EnablePeriphClock ( AT91C_BASE_PS, 1<<AT91C_ID_US0 ) ;// First, enable the clock of the PIOB
//	AT91F_PS_EnablePeriphClock ( AT91C_BASE_PS, 1<<AT91C_ID_US1 ) ;
	
	AT91F_US_Configure ( COM0, MCK, AT91C_US_ASYNC_MODE, 115200, 0 );// Usart Configure
//#if OSVIEW	> 0
//	AT91F_US_Configure ( COM1, MCK, AT91C_US_ASYNC_MODE, 115200, 0 );
//#else	
//	AT91F_US_Configure ( COM1, MCK, AT91C_US_ASYNC_MODE, 9600, 0 );
//#endif	
//	CalBub( AT91C_BASE_US0, MCK, SysProg[3] );
	
	COM0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RSTSTA | AT91C_US_RXEN | AT91C_US_TXEN;// Enable usart 
//    COM1->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RSTSTA | AT91C_US_RXEN | AT91C_US_TXEN;
    	
	AT91F_US_EnableIt( COM0, AT91C_US_TIMEOUT | AT91C_US_ENDRX );//* Enable USART IT error and RXRDY
//	AT91F_US_EnableIt( COM1, AT91C_US_TIMEOUT | AT91C_US_RXRDY );
	
	AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US0, USART0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, usart0_asm_irq_handler); 
// 	open Usart interrupt
//	AT91F_AIC_EnableIt ( AT91C_BASE_AIC, AT91C_ID_US0 ); 
	
	AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US1, USART1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, usart1_asm_irq_handler); 
//	AT91F_AIC_EnableIt ( AT91C_BASE_AIC, AT91C_ID_US1 ); 

// Set PDC
//	AT91F_US_ReceiveFrame(COM0,(char *)ComMessage,ComMessageMax);
	COM0->US_RPR = (unsigned int)&ComMessage;
	COM0->US_RCR = ComMessageMax;
	
	//* Arm time out after 50 * 4  bits time 
	COM0->US_RTOR = 10;
   	//* Enable usart SSTO
	COM0->US_CR = AT91C_US_STTTO;
}

void Check_Frame(uchar c)
{	
	c = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -