This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

uart interrupt on str9 without polling

Hi ,
I am looking for the code for uart0 for STR9 in which wnen ever I send some character form the terminal it should just jump to the interrupt handler print taht character then come back can any one please help it should be like this

#include "91x_lib.h"

#include "stdio.h"

#include <91x_lib.h>
#include <string.h>
#include <limits.h>
u16 LedPulse = 0,tmp = 0;
GPIO_InitTypeDef GPIO_InitStructure;
static unsigned int tx_restart = 1;   /* NZ if TX restart is required */
void UART0_IRQHandler(void);

void com_baudrate (unsigned int baudrate) {
  unsigned long      BRDi = 0, BRDf = 0;
  unsigned long long UARTClk = 48000000;

  if ((SCU->CLKCNTR & SCU_BRCLK_Div2) != SCU_BRCLK_Div2) {
    UARTClk /= 2;                                                          /* set UART Clock acc. BRSEL  */
  }

  /* baudrate calculation */
  BRDi = ((100 * UARTClk) / (16 * baudrate));  /* calculate the integer part */
  BRDf = BRDi - (100 * (BRDi / 100));          /* calculate the fractal part */

  UART0->CR  &= 0xFFFE;                        /* disable UART               */

  UART0->IBRD = BRDi / 100;                                 /* set the integer part       */
  UART0->FBRD = ((((BRDf * 64) + 50) / 100));  /* set the fractal part       */

  UART0->LCR &= 0xFFFF;                        /* to accept baudrate         */
  UART0->CR  |= 0x0001;                                 /* enable UART                */
}
int SendChar (int ch)
{
        UART_SendData(UART0, ch);
   while(UART_GetFlagStatus(UART0, UART_FLAG_Busy) != RESET);
        return (ch);
}
int GetKey (void)
{  while ((UART0->FR & 0x10));                      /* RX Fifo Empty */

  return (UART0->DR);

}
void com_initialize (void) {
        /*------------------------------------------------
  Setup serial port registers.
  ------------------------------------------------*/


  UART0->LCR  =   UART_WordLength_8D              /* 8 bits              */
                | UART_Parity_No                  /* no Parity           */
                                | UART_HardwareFlowControl_None   /* no flow control     */
                                & UART_StopBits_1                 /* 1 Stop bit          */
                                & UART_FIFO_Disable;              /* FIFO disabled       */

  UART0->CR   =   UART_Mode_Rx                                         /* Receive Enable      */
                | UART_Mode_Tx                                    /* Transmit Enable     */
                | 0x0001;                         /* UART Enable         */

// UART0->IMSC =  UART_IT_Transmit                 /* Enable Tx Interrupt */
 //              |UART_IT_Receive ;                /* Enable Rx Interrupt */
 UART0->IMSC =   UART_IT_Receive ;                /* Enable Rx Interrupt */

  com_baudrate (115200);                          /* 115200     */

  /*------------------------------------------------
  Setup Default Interrupt
  ------------------------------------------------*/
  //VIC0->DVAR = (unsigned int)def_irq;
  //VIC1->DVAR = (unsigned int)def_irq;

  /*------------------------------------------------
  Setup UART0 Interrupt, UART0_ITLine = 16
  ------------------------------------------------*/
 // VIC1->VAiR[3] = (unsigned int)UART0_IRQHandler;          /* set IRQ handler               */
 // VIC1->INTSR  &= ~(0x01 << (UART0_ITLine - 16)); /* generate an IRQ interrupt     */
  ///VIC1->VCiR[3] =    0x20 | (UART0_ITLine - 16);  /* enable vetored interrupt No 0 */
  //VIC1->INTER  |=  (0x01 << (UART0_ITLine - 16)); /* enable the interrupt          */

        SCU_AHBPeriphClockConfig(__VIC,ENABLE);
        SCU_AHBPeriphReset(__VIC,DISABLE);
        VIC_DeInit();
        VIC_Config(UART0_ITLine, VIC_IRQ, 0);
        VIC_ITCmd(UART0_ITLine, ENABLE);
}
void LEDINIT()
        {
         GPIO_DeInit(GPIO9);
        GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1 ;
        GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;
        GPIO_Init (GPIO9, &GPIO_InitStructure);
        GPIO_WriteBit(GPIO9, GPIO_Pin_0, Bit_RESET);
        GPIO_WriteBit(GPIO9, GPIO_Pin_1, Bit_RESET);

        }


void main(void)
{
        SCU_APBPeriphClockConfig(__GPIO9, ENABLE);
        LEDINIT();
        SCU->GPIOIN[5] = 0x0002;
        SCU->PCGR1 |=0x8;
        SCU->GPIOOUT[5]  = 0x03;       /* P5.1 input  UART0 RX */
        SCU_APBPeriphReset(__UART0,ENABLE);
    SCU_APBPeriphReset(__UART0,DISABLE);
        com_initialize();
        GPIO_WriteBit(GPIO9, GPIO_Pin_0, Bit_SET);
         while(1)
         { if(tmp>0)
                {//     Delay(0xFFF);
                        // printf(".");
                        //GPIO_WriteBit(GPIO9, GPIO_Pin_0, Bit_RESET);
                        //GPIO_WriteBit(GPIO9, GPIO_Pin_1, Bit_RESET);
                        //tmp=0;
                }
                //tmp=0;
          }
        //tmp=0;
  }



void UART0_IRQHandler(void)

{
        volatile unsigned int IIR;
        unsigned char ch;
        //tmp++;

        while ((IIR = UART0->MIS) & (UART_IT_Transmit | UART_IT_Receive)) {
        if (IIR & UART_IT_Receive) {
        UART0->ICR = UART_IT_Receive;            /* clear the interrupt   */
                GPIO_WriteBit(GPIO9, GPIO_Pin_0, Bit_SET);
                  printf("%c",ch);
        }

  }
                GPIO_WriteBit(GPIO9, GPIO_Pin_1, Bit_SET);
  VIC1->VAR = 0;                        /* Acknowledge Interrupt */
 }
</p>



what happened in this code is that uart does not comes out from the handler what may be reason i am not able to get


0