int My_serial_2_init ()
{
/* make any port initializations specific to this port */
*AT91C_PIOA_PDR = AT91C_PA23_TXD2 | AT91C_PA22_RXD2; /* PA 23 & 22 */
*AT91C_PMC_PCER = 1 << AT91C_ID_US2; /* enable clock */
My_serial_2_setbrg(115200);
void Usart_c_irq_handler(void)
{
unsigned int status;
//* get Usart status register
status = AT91C_BASE_US2->US_CSR;
if ( status & AT91C_US_ENDRX)
{AT91F_DBGU_Printk("AT91C_US_ENDRX\n\r");}
// check if interrupt is present and available
if ( (status & AT91C_US_ENDTX) & (AT91C_BASE_US2->US_IMR & AT91C_US_ENDTX) )
{
AT91F_DBGU_Printk("AT91C_US_ENDTX\n\r");
AT91F_US_DisableIt(AT91C_BASE_US2, AT91C_US_ENDTX );
}
// check if interrupt is present and available
if ( (status & AT91C_US_TXBUFE) & (AT91C_BASE_US2->US_IMR & AT91C_US_TXBUFE) )
{AT91F_DBGU_Printk("AT91C_US_TXBUFE\n\r");}
if ( status & AT91C_US_OVRE)
{AT91F_DBGU_Printk("AT91C_US_OVRE\n\r");}
//* Check error
if ( status & AT91C_US_PARE)
{AT91F_DBGU_Printk("AT91C_US_PARE\n\r");}
if ( status & AT91C_US_FRAME)
{AT91F_DBGU_Printk("AT91C_US_FRAME\n\r");}
if ( status & AT91C_US_TIMEOUT)
{AT91F_DBGU_Printk("AT91C_US_TIMEOUT\n\r");}
//* Reset the satus bit
AT91C_BASE_US2->US_CR = AT91C_US_RSTSTA;
}
int main()
{
My_serial_2_init();
AT91F_DBGU_Printk("usart2_init()\n\r");
while(1);
}