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

📄 interrupt_usart.c

📁 ATMEL AT91SAM9260的中段控制程序!
💻 C
字号:
/*-----------------------------------------------------------------------------
 *           ATMEL Microcontroller Software Support  -  ROUSSET  -
 *-----------------------------------------------------------------------------
 * DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *----------------------------------------------------------------------------
 * File Name           : interrupt_Usart.c
 * Object              : USART Interrupt Management
 *
 * 1.0 06/Sep/06 JPP   : Creation
 *----------------------------------------------------------------------------
*/

// Include Standard LIB  files
#include "project.h"

#define USART_INTERRUPT_LEVEL		2
#define AT91_BAUD_RATE			115200
static const char atmel_header[]={
"\n\r  *** ATMEL Usart IRQ ***\n\r"
"Copyright (C) 2002 ATMEL Corporations Version: 1.0\n\r"
};

//* \fn    AT91F_US_Baudrate
//* \brief Calculate the baudrate
//* Standard Asynchronous Mode : 8 bits , 1 stop , no parity
#define AT91C_US_ASYNC_MODE ( AT91C_US_USMODE_NORMAL + \
                        AT91C_US_NBSTOP_1_BIT + \
                        AT91C_US_PAR_NONE + \
                        AT91C_US_CHRL_8_BITS + \
                        AT91C_US_CLKS_CLOCK )

//*------------------------- Internal Function --------------------------------

//*----------------------------------------------------------------------------
//* Function Name       : Usart_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 Usart_c_irq_handler(void)
{
    AT91PS_USART USART_pt = AT91C_BASE_US0;
    unsigned int status;
    //* get Usart status register
	status = USART_pt->US_CSR;
	if ( status & AT91C_US_RXRDY){
	//* Get byte and send
		AT91F_US_PutChar (USART_pt, AT91F_US_GetChar(USART_pt));
	}

	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;
}
//*-------------------------- External Function -------------------------------

//*----------------------------------------------------------------------------
//* Function Name       : Usart_init
//* Object              : USART initialization
//* Input Parameters    : none
//* Output Parameters   : TRUE
//*----------------------------------------------------------------------------
void Usart_init ( void )
//* Begin
{
    AT91PS_USART COM0 = AT91C_BASE_US0;

    //* Configure PIO controllers to periph mode
 	AT91F_PIO_CfgPeriph( AT91C_BASE_PIOB,
 		((unsigned int) AT91C_PB5_RXD0  ) |
 		((unsigned int) AT91C_PB4_TXD0  ) |
 		((unsigned int) AT91C_PB26_RTS0 ) |
 		((unsigned int) AT91C_PB27_CTS0 ), // Peripheral A
 		0); // Peripheral B

    // First, enable the clock of the PIOB
       AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US0 ) ;
    // Usart Configure
       AT91F_US_Configure (COM0, AT91B_MASTER_CLOCK,
                           AT91C_US_ASYNC_MODE,
                           AT91_BAUD_RATE,
                           0);

    // Enable usart
       COM0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;

    //* Enable USART IT error and RXRDY
    	AT91F_US_EnableIt(COM0,AT91C_US_TIMEOUT | AT91C_US_FRAME | AT91C_US_OVRE |AT91C_US_RXRDY);

    //* open Usart 1 interrupt
        AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US0,
                               USART_INTERRUPT_LEVEL,
                               AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,
                               Usart_c_irq_handler);

        AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);

        AT91F_US_PutChar (COM0,'X');

        AT91F_US_SendFrame(COM0,(char *)atmel_header,sizeof(atmel_header),0,0);
}

⌨️ 快捷键说明

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