Atmel website | ARM Community | AVR freaks | Technical Support
Banner
 FAQ •  Search •  Register •  Login 

All times are UTC + 1 hour [ DST ]




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: Usart handling problem : URGENT using GH multi
PostPosted: Mon Nov 15, 2010 11:18 am 
Offline

Joined: Mon Nov 15, 2010 6:44 am
Posts: 1
Hi, I am facing an issue in handling the usart interrupt. I am using two interrupts, external interrupt IRQ0 and usart receive interrupt.For testing purpose, IRQ0 is low all the time. In the below program, when i receive usart data, usart0_handler is executed and then IRQ0_handler also gets automatically executed.
so every time usart data arrives,both interrupt routines usart and irq0 gets executed.
I am using greenhills multi compiler. Can any body please point out error in this code.
Thanks in advance.

#include "project.h"

#define BOARD_MCK 48000000

void PIO_Init (void);
void ext_intr_1pps(void);
void USART0_handler(void);
void uart0_init(void);

AT91PS_USART COM0 = AT91C_BASE_US0;

unsigned char ch;

//esternal interrupt handler
void IRQ0_handler(void)
{
AT91F_US_PutChar (COM0,ch);
}

//usart receive interrupt handler
void USART0_handler (void )
{
unsigned int status_reg = COM0->US_CSR;
if(status_reg & AT91C_US_RXRDY)
{
ch=AT91F_US_GetChar(COM0);
}
}

int main()
{
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOB ) ;
PIO_Init ();
uart0_init();
AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, AT91C_PIO_PB21 | AT91C_PIO_PB20);
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_IRQ0,AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_POSITIVE_EDGE,IRQ0_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_IRQ0);

for (;;);

}

void PIO_Init (void)
{
AT91C_BASE_PIOB->PIO_PPUER = AT91C_PIO_PB21 |AT91C_PIO_PB20;
AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, AT91C_PIO_PB21 | AT91C_PIO_PB20);
}


void uart0_init ( void )
{
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,((unsigned int)AT91C_PA0_RXD0)|((unsigned int)AT91C_PA1_TXD0),0);//Peripheral B

// First, enable the clock of the USART
AT91F_PMC_EnablePeriphClock (AT91C_BASE_PMC,1 << AT91C_ID_US0);
AT91F_US_Configure (COM0,AT91B_MCK,AT91C_US_ASYNC_MODE,9600,0);

// Enable usart transmit and receive but receive interrupt only
COM0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
AT91F_US_EnableIt(COM0,AT91C_US_RXRDY );

COM0->US_RTOR = 0x1F40; //COUNT FOR TIMEOUT OF 832ms.//for faster queries this time should be less.
COM0->US_TTGR = 0;
// open Usart 0 interrupt
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_US0,AT91C_AIC_PRIOR_LOWEST,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,USART0_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
}


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC + 1 hour [ DST ]


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: