FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [October 2007 Threads] AT91SAM7SE512: USART0 RXD interrupt Posted by nanjooh on October 19, 2007 Dear All,
I am using the Keil uvision3 ARM version(Real view), In my code i am using UART0 for Transmission and reception.
The transmission has no problem. For reception i am using the RX interrupt. The problem is, If i type any letter in the keyboard (Hyperterminal), no receiver interrupt is generated in the controller.
Can you please help me to rectify this problem. operating system: XP Operating Tool : Keil Uvision3 ARM view (version 3.53) Controller: AT91SAM7SE512 For your reference here is the code, //*---------------------------------------------------------------------------- //* Function Name : Usart_c_irq_handler //* Object : C handler interrupt function call by the interrupts //* assembling routine //*---------------------------------------------------------------------------- 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 //*---------------------------------------------------------------------------- void Usart_init ( void ) //* Begin {
AT91PS_USART COM0 = AT91C_BASE_US0;
//* Configure PIO controllers to periph mode AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, ((unsigned int) AT91C_PA5_RXD0 ) | ((unsigned int) AT91C_PA6_TXD0 ), 0); // Peripheral B //((unsigned int) AT91C_PA7_RTS0 ) | //((unsigned int) AT91C_PA8_CTS0 ), // Peripheral A //0); // Peripheral B
//* First, enable the clock of the USART AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US0 ) ; //* Usart Configure AT91F_US_Configure (COM0, AT91B_MCK, 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_HIGH_LEVEL, Usart_c_irq_handler); AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
AT91F_US_PutChar (COM0,'X'); AT91F_US_SendFrame(COM0,(char *)display,sizeof(display),0,0); //* End }
with regards, Murthy.R
RE: AT91SAM7SE512: USART0 RXD interrupt Posted by Allure99 on October 19, 2007 Do you have your interrupt service routine?
serialISR.c ?
void vUART_ISR( void ) __attribute__ ((naked));
void vUART_ISR( void ) { if( ulStatus & AT91C_US_RXRDY) { //--- } }
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|