This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Can the flash bootloader be called from the Application ? ROM Bootloader can be called , similarly , is there any way flash bootloader could be invoked from the application to do the UART update of the flash on tiva ( TM4C129NCPDT) ?

Other Parts Discussed in Thread: EK-TM4C1294XL

Hi, 

Can the flash bootloader be called from the Application ?

ROM Bootloader can be called by using ROM API for uart updating of flash using uart ( ROM Bootloader) ,

similarly , is there any way flash boot loader could be invoked from the application to do the UART update of the flash on tiva ( TM4C129NCPDT) ?

Thanks,

Sanchit Mehra

  • Hello Sanchit

    Absolutely. Did you check the boot loader example for ek-tm4c1294xl?

    Regards
    Amit
  • Hi Amit,

    Yes, I have used this code, but the flash bootloader is called, upon reset , when the rom bootloader calls the secondary flash bootloader , that inturns check for crc and decides to load the application , based on the validity of CRC.

    Now, the question , is I want to call my flash bootloader not via h/w reset but from the application!

    Currently, I am using , rom api , ROM_UpdateUART();

    ROM_UpdateUART() passes control to ROM Bootloader.

    IS there any api by which I can call the flash bootloader, so that it can download the application and check the crc also ?


    Many Thanks,
    Sanchit Mehra
  • Hello Sanchit,

    Did you check the example boot_demo1 and 2. It make a SVC call to the boot loader in flash.

    Regards
    Amit
  • Thanks a lot Amit,
    That SVC Call worked out !

    Now , I have one more clarification....

    I want a to utilise timer in my bootloader code.

    That timer would toggle a gpio pin C port 7 , at 1 Hz frequency . This toggling is fine , but I would be needing timer functionality to measure that 1 Hz and can toggle on its each time out.

    Is timer implementation possible in bootlaoder code ? As I could see the code that there is many # defined in interrupt vector :

    .if ($$defined(USB_ENABLE_UPDATE) | (APP_START_ADDRESS != VTABLE_START_ADDRESS))
    .word IntDefaultHandler ;; Offset B8: GPIO Port F
    .word IntDefaultHandler ;; Offset BC: GPIO Port G
    .word IntDefaultHandler ;; Offset C0: GPIO Port H
    .word IntDefaultHandler ;; Offset C4: UART2 Rx and Tx
    .word IntDefaultHandler ;; Offset C8: SSI1 Rx and Tx
    .word IntDefaultHandler ;; Offset CC: Timer 3 subtimer A
    .word IntDefaultHandler ;; Offset D0: Timer 3 subtimer B



    .if ($$defined(USB_ENABLE_UPDATE) | (APP_START_ADDRESS != VTABLE_START_ADDRESS))
    .word IntDefaultHandler ;; Offset 8C: Timer 0 subtimer A
    .word IntDefaultHandler ;; Offset 90: Timer 0 subtimer B
    .word IntDefaultHandler ;; Offset 94: Timer 1 subtimer A
    .word IntDefaultHandler ;; Offset 98: Timer 1 subtimer B
    .word IntDefaultHandler ;; Offset 9C: Timer 2 subtimer A
    .word IntDefaultHandler ;; Offset A0: Timer 2 subtimer B


    can I use this vector interrupt when I have defined UART_ENABLE_UPDATE ?

    Many Thanks,
    Sanchit Mehra
  • Hello Sanchit,

    Yes, you can the interrupt table of the boot loader for additional interrupt. However it is not clear as to: The timer toggles Port C Pin 7 and then measures it?
  • Hello Amit,

    Yes, actually I am measuring a time interval of 1/2 seconds using  timer.

    when the timer timesout , I restart it again each and everytime .

    Now, On its each timeout, In its timeout event ISR , I toggle the gpio pin to achieve a LED blinking .

    Although, I tried

    changing the code from

    .if ($$defined(USB_ENABLE_UPDATE) | (APP_START_ADDRESS != VTABLE_START_ADDRESS))

    .word IntDefaultHandler ;; Offset B8: GPIO Port F

    .word IntDefaultHandler ;; Offset BC: GPIO Port G

    .word IntDefaultHandler ;; Offset C0: GPIO Port H

    .word IntDefaultHandler ;; Offset C4: UART2 Rx and Tx

    .word IntDefaultHandler ;; Offset C8: SSI1 Rx and Tx

    .word IntDefaultHandler ;; Offset CC: Timer 3 subtimer A

    .word IntDefaultHandler ;; Offset D0: Timer 3 subtimer B

    to

    .ref Timer3IntHandler

    .if (1))

    .word IntDefaultHandler ;; Offset B8: GPIO Port F

    .word IntDefaultHandler ;; Offset BC: GPIO Port G

    .word IntDefaultHandler ;; Offset C0: GPIO Port H

    .word IntDefaultHandler ;; Offset C4: UART2 Rx and Tx

    .word IntDefaultHandler ;; Offset C8: SSI1 Rx and Tx

    .word Timer3IntHandler;; Offset CC: Timer 3 subtimer A

    .word IntDefaultHandler ;; Offset D0: Timer 3 subtimer B

    but it doesnot seems call my timeout event handler .  I would debug it further ,

    But I would like to have an opinion about its declaration in the vector table ?

    Is this declaration of my timerinterrupt handler ok ?

    If not, can you pls help me out with , How to rightly declare it ?

    Many Thanks,

    Sanchit Mehra

  • Hello Sanchit,

    What are you trying to restart?
  • Hi Amit,

    Actually Timer gets restarts ( couting again ) after its timeout event.
    I want to blink led during the time flash bootloader is updating the flash.

    I toggle the led gpio pin in timer's timeout isr handler.

    Thanks,
    Sanchit Mehra
  • Hello Sanchit,

    Thanks for the clarification.

    1. Has the timer interrupt been enabled in the GPTMIM?
    > Check if the GPTMMIS register bit for timeout is getting set
    2. Has the timer interrupt been enabled in the NVIC?
    > Check the NVIC Pend registers for the interrupt bit corresponding to the timer
  • Hello Amit,

    Thanks for the suggestions ...

    I have one point to make .

    Before calling the boot loader from application, the interrupt vectors are disabled.
    So, will it be right to again enable the timer3 interrupt and handle it in the flash bootloader ?
    will it be possible ?

    Awaiting Reply,

    Thanks,
    Sanchit Mehra
  • Hello Sanchit,

    Yes, that should be OK. If you check the startup vector file, then some of the interrupt handlers are enabled.
  • Hello Amit,

    This is the part of my code of flash based uart bootloader:

    void
    Updater(void)
    {
    ...
    // Configure LED for blinking...
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
    // Configuration of PortC
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_7);
    ROM_GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, 0X00); // make the led switch off

    // Invoke the timer for led blinking ...
    unsigned int time = 18000000*1;
    // UARTprintf("\nblinking time : %d \n",time);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
    ROM_TimerClockSourceSet(TIMER3_BASE,TIMER_CLOCK_SYSTEM); // clock source
    ROM_TimerConfigure(TIMER3_BASE, TIMER_CFG_ONE_SHOT );
    ROM_TimerLoadSet(TIMER3_BASE, TIMER_A, time); // 1*100 ms
    ROM_IntEnable(INT_TIMER3A);
    ROM_TimerIntEnable(TIMER3_BASE, TIMER_TIMA_TIMEOUT);
    ROM_TimerEnable(TIMER3_BASE, TIMER_A);

    ROM_IntMasterEnable();

    ......

    Now, when the application calls the flash bootloader, then the updater() would get call, and can configure the GPIO PORT and the TIMER3A.
    On timer Timeout , I am handling the gpio for led toggle.
    But the issue is that my timeout event handler is not getting called !!

    This is my Vector table

    Vectors:
    .ref __STACK_TOP
    .word __STACK_TOP ;; Offset 00: Initial stack pointer
    .word ResetISR - 0x20000000 ;; Offset 04: Reset handler
    .word NmiSR - 0x20000000 ;; Offset 08: NMI handler
    .word FaultISR - 0x20000000 ;; Offset 0C: Hard fault handler
    .word IntDefaultHandler ;; Offset 10: MPU fault handler
    .word IntDefaultHandler ;; Offset 14: Bus fault handler
    .word IntDefaultHandler ;; Offset 18: Usage fault handler
    .word 0 ;; Offset 1C: Reserved
    .word 0 ;; Offset 20: Reserved
    .word 0 ;; Offset 24: Reserved
    .word 0 ;; Offset 28: Reserved
    .word UpdateHandler - 0x20000000 ;; Offset 2C: SVCall handler
    .word IntDefaultHandler ;; Offset 30: Debug monitor handler
    .word 0 ;; Offset 34: Reserved
    .word IntDefaultHandler ;; Offset 38: PendSV handler
    .if $$defined(UART_ENABLE_UPDATE)
    .ref SysTickIntHandler
    .word SysTickIntHandler ;; Offset 3C: SysTick handler
    .else
    .word IntDefaultHandler ;; Offset 3C: SysTick handler
    .endif
    .if $$defined(UART_ENABLE_UPDATE) & $$defined(UART_AUTOBAUD)
    .ref GPIOIntHandler
    .word GPIOIntHandler ;; Offset 40: GPIO port A handler
    .else
    .word IntDefaultHandler ;; Offset 40: GPIO port A handler
    .endif
    .ref Timer3IntHandler
    .word IntDefaultHandler ;; Offset 44: GPIO Port B
    .word IntDefaultHandler ;; Offset 48: GPIO Port C
    .word IntDefaultHandler ;; Offset 4C: GPIO Port D
    .word IntDefaultHandler ;; Offset 50: GPIO Port E
    .word IntDefaultHandler ;; Offset 54: UART0 Rx and Tx
    .word IntDefaultHandler ;; Offset 58: UART1 Rx and Tx
    .word IntDefaultHandler ;; Offset 5C: SSI0 Rx and Tx
    .word IntDefaultHandler;; Offset 60: I2C0 Master and Slave
    .word IntDefaultHandler;; Offset 64: PWM Fault
    .word IntDefaultHandler;; Offset 68: PWM Generator 0
    .word IntDefaultHandler;; Offset 6C: PWM Generator 1
    .word IntDefaultHandler;; Offset 70: PWM Generator 2
    .word IntDefaultHandler;; Offset 74: Quadrature Encoder 0
    .word IntDefaultHandler ;; Offset 78: ADC Sequence 0
    .word IntDefaultHandler;; Offset 7C: ADC Sequence 1
    .word IntDefaultHandler;; Offset 80: ADC Sequence 2
    .word IntDefaultHandler ;; Offset 84: ADC Sequence 3
    .word IntDefaultHandler;; Offset 88: Watchdog timer
    .word IntDefaultHandler;; Offset 8C: Timer 0 subtimer A
    .word IntDefaultHandler;; Offset 90: Timer 0 subtimer B
    .word IntDefaultHandler;; Offset 94: Timer 1 subtimer A
    .word IntDefaultHandler;; Offset 98: Timer 1 subtimer B
    .word IntDefaultHandler;; Offset 9C: Timer 2 subtimer A
    .word IntDefaultHandler;; Offset A0: Timer 2 subtimer B
    .word IntDefaultHandler;; Offset A4: Analog Comparator 0
    .word IntDefaultHandler;; Offset A8: Analog Comparator 1
    .word IntDefaultHandler;; Offset AC: Analog Comparator 2
    .word IntDefaultHandler;; Offset B0: System Control
    .word IntDefaultHandler;; Offset B4: FLASH Control
    .word IntDefaultHandler;; Offset B8: GPIO Port F
    .word IntDefaultHandler;; Offset BC: GPIO Port G
    .word IntDefaultHandler;; Offset C0: GPIO Port H
    .word IntDefaultHandler;; Offset C4: UART2 Rx and Tx
    .word IntDefaultHandler;; Offset C8: SSI1 Rx and Tx
    .ref Timer3IntHandler
    .word Timer3IntHandler ;; Offset CC: Timer 3 subtimer A
    .word IntDefaultHandler;; Offset D0: Timer 3 subtimer B
    .word IntDefaultHandler;; Offset D4: I2C1 Master and Slave
    .word IntDefaultHandler ;; Offset D8: Quadrature Encoder 1
    .word IntDefaultHandler;; Offset DC: CAN0
    .word IntDefaultHandler;; Offset E0: CAN1
    .word IntDefaultHandler;; Offset E4: CAN2
    .word IntDefaultHandler;; Offset E8: Ethernet
    .word IntDefaultHandler;; Offset EC: Hibernation module
    .if $$defined(USB_ENABLE_UPDATE)
    .ref USB0DeviceIntHandler
    .word USB0DeviceIntHandler ;; Offset F0: USB 0 Controller
    .else
    .word IntDefaultHandler;; Offset F0: USB 0 Controller
    .endif


    Please Suggest, if anything is left out for getting the timer3A timeout event.


    Thanks,
    Sanchit Mehra
  • Hello Sanchit

    ROM_TimerConfigure(TIMER3_BASE, TIMER_CFG_ONE_SHOT );

    The timer will be fired only once and then it shall stop. Are you sure that is what you want?
  • Hi Amit,

    Yes this is what I want, as in the timeout Interrupt handler
    Timer3IntHandler()
    {
    // again enable the one shot timer
    // and toggle the led gpio ...
    }


    One more query, how can I read the register values of MCU in bootlaoder mode ? I sthere any GUI utility by which I can read the registers' values in runtime ?

    Thanks,
    Sanchit Mehra
  • Hello Sanchit,

    You can connect the IDE to the device without downloading the code. The bootloader is executed after it copied to the SRAM, so the debug symbols may not work in CCS (I have seen that happening).
  • Hi Amit,

    Tried but not able to get the interrupt working in bootloader mode., when the bootloader is called from application.

    To get the interrupt mode working in bootloader, i also tried ethernet bootloader, the updateBootP is being called , but systick interrupt handler is getting called when the bootloader is alone flash and its waiting for update .

    But the systick interrupt of the same bootloader is not called, when bootloader is called from application via SVC call at 0x2c.

    This is my code in application when I call the flash bootloader from application.

    This is what I have done for uart , for uart update ...

    Void JumpToBootloader()
    {
    //ROM_IntMasterDisable();

    //
    // Enable the UART that will be used for the firmware update.
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);

    //
    // Configure the UART for 115200, 8-N-1.
    //
    ROM_UARTConfigSetExpClk(UART0_BASE, ui32SysClock, 115200,
    (UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE |
    UART_CONFIG_WLEN_8));

    UARTprintf("\n UART UPDATION START 2...... \n");
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    ROM_GPIOPinConfigure(GPIO_PA0_U0RX); // For BCMC Communication // Configure the UART0 RX
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    UARTConfigSetExpClk(UART0_BASE, ui32SysClock, 115200 ,
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE));
    UARTprintf("\n UART UPDATION START 3...... \n");
    //
    // Enable the UART operation.
    //
    ROM_UARTEnable(UART0_BASE);
    UARTprintf("\n UART UPDATION START 4...... \n");
    ROM_UARTFlowControlSet(UART0_BASE,UART_FLOWCONTROL_NONE);

    //
    // Disable all processor interrupts. Instead of disabling them one at a
    // time, a direct write to NVIC is done to disable all peripheral
    // interrupts.
    //

    HWREG(NVIC_DIS0) = 0xffffffff;
    HWREG(NVIC_DIS1) = 0xffffffff;
    HWREG(NVIC_DIS2) = 0xffffffff;
    HWREG(NVIC_DIS3) = 0xffffffff;
    HWREG(NVIC_DIS4) = 0xffffffff;
    UARTprintf("\n UART UPDATION START 5...... \n");
    //
    // Call the ROM UART boot loader.
    //
    //ROM_UpdateUART();

    //
    // Return control to the boot loader. This is a call to the SVC
    // handler in the boot loader.
    //
    (*((void (*)(void))(*(uint32_t *)0x2c)))();

    }

    Kindly Suggest,
    Sanchit Mehra
  • Hello Sanchit

    That is because the Interrupt have been disabled in the call for the bootloader

    HWREG(NVIC_DIS0) = 0xffffffff;
    HWREG(NVIC_DIS1) = 0xffffffff;
    HWREG(NVIC_DIS2) = 0xffffffff;
    HWREG(NVIC_DIS3) = 0xffffffff;
    HWREG(NVIC_DIS4) = 0xffffffff;
  • Yes, right as it was needed ,

    But again in bootloader , I am enabling the following

    ROM_IntMasterEnable() with the other enabling of systick timer also,
    I hope that should have been sufficient to enable the systick timer.

    What else should I enable to get my interrupts working ?

    Kindest Regards,
    Sanchit Mehra
  • Hello Sanchit

    And you have to enable the Interrupt in the NVIC by calling ROM_IntEnable
  • Hi Amit,

    Yes, for enabling timer3A  interrupt , I have used  the following

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
    ROM_TimerClockSourceSet(TIMER3_BASE,TIMER_CLOCK_SYSTEM); // clock source
    ROM_TimerConfigure(TIMER3_BASE, TIMER_CFG_ONE_SHOT );
    ROM_TimerLoadSet(TIMER3_BASE, TIMER_A, time); // 1*100 ms
    ROM_IntEnable(INT_TIMER3A);
    ROM_TimerIntEnable(TIMER3_BASE, TIMER_TIMA_TIMEOUT);
    ROM_TimerEnable(TIMER3_BASE, TIMER_A);

    ROM_IntMasterEnable();

    and for systick, I have used as following :

    ROM_SysTickPeriodSet( 36000000 );
    ROM_SysTickEnable();
    ROM_SysTickIntEnable();

    Moreover, I could not find the rom_IntEnable MACRO for systick in the under mentioned library file :

    //*****************************************************************************
    //
    // Macros to resolve the INT_PERIPH_CLASS name to a common INT_PERIPH name.
    //
    //*****************************************************************************
    #define INT_CONCAT(intname, class) INT_RESOLVE(intname, class)

    //*****************************************************************************
    //
    // The following are defines for the interrupt assignments.
    //
    //*****************************************************************************
    #define INT_ADC0SS0 INT_CONCAT(INT_ADC0SS0_, INT_DEVICE_CLASS)
    #define INT_ADC0SS1 INT_CONCAT(INT_ADC0SS1_, INT_DEVICE_CLASS)
    #define INT_ADC0SS2 INT_CONCAT(INT_ADC0SS2_, INT_DEVICE_CLASS)
    #define INT_ADC0SS3 INT_CONCAT(INT_ADC0SS3_, INT_DEVICE_CLASS)
    #define INT_ADC1SS0 INT_CONCAT(INT_ADC1SS0_, INT_DEVICE_CLASS)
    #define INT_ADC1SS1 INT_CONCAT(INT_ADC1SS1_, INT_DEVICE_CLASS)
    #define INT_ADC1SS2 INT_CONCAT(INT_ADC1SS2_, INT_DEVICE_CLASS)
    #define INT_ADC1SS3 INT_CONCAT(INT_ADC1SS3_, INT_DEVICE_CLASS)
    #define INT_AES0 INT_CONCAT(INT_AES0_, INT_DEVICE_CLASS)
    #define INT_CAN0 INT_CONCAT(INT_CAN0_, INT_DEVICE_CLASS)
    #define INT_CAN1 INT_CONCAT(INT_CAN1_, INT_DEVICE_CLASS)
    #define INT_COMP0 INT_CONCAT(INT_COMP0_, INT_DEVICE_CLASS)
    #define INT_COMP1 INT_CONCAT(INT_COMP1_, INT_DEVICE_CLASS)
    #define INT_COMP2 INT_CONCAT(INT_COMP2_, INT_DEVICE_CLASS)
    #define INT_DES0 INT_CONCAT(INT_DES0_, INT_DEVICE_CLASS)
    #define INT_EMAC0 INT_CONCAT(INT_EMAC0_, INT_DEVICE_CLASS)
    #define INT_EPI0 INT_CONCAT(INT_EPI0_, INT_DEVICE_CLASS)
    #define INT_FLASH INT_CONCAT(INT_FLASH_, INT_DEVICE_CLASS)
    #define INT_GPIOA INT_CONCAT(INT_GPIOA_, INT_DEVICE_CLASS)
    #define INT_GPIOB INT_CONCAT(INT_GPIOB_, INT_DEVICE_CLASS)
    #define INT_GPIOC INT_CONCAT(INT_GPIOC_, INT_DEVICE_CLASS)
    #define INT_GPIOD INT_CONCAT(INT_GPIOD_, INT_DEVICE_CLASS)
    #define INT_GPIOE INT_CONCAT(INT_GPIOE_, INT_DEVICE_CLASS)
    #define INT_GPIOF INT_CONCAT(INT_GPIOF_, INT_DEVICE_CLASS)
    #define INT_GPIOG INT_CONCAT(INT_GPIOG_, INT_DEVICE_CLASS)
    #define INT_GPIOH INT_CONCAT(INT_GPIOH_, INT_DEVICE_CLASS)
    #define INT_GPIOJ INT_CONCAT(INT_GPIOJ_, INT_DEVICE_CLASS)
    #define INT_GPIOK INT_CONCAT(INT_GPIOK_, INT_DEVICE_CLASS)
    #define INT_GPIOL INT_CONCAT(INT_GPIOL_, INT_DEVICE_CLASS)
    #define INT_GPIOM INT_CONCAT(INT_GPIOM_, INT_DEVICE_CLASS)
    #define INT_GPION INT_CONCAT(INT_GPION_, INT_DEVICE_CLASS)
    #define INT_GPIOP0 INT_CONCAT(INT_GPIOP0_, INT_DEVICE_CLASS)
    #define INT_GPIOP1 INT_CONCAT(INT_GPIOP1_, INT_DEVICE_CLASS)
    #define INT_GPIOP2 INT_CONCAT(INT_GPIOP2_, INT_DEVICE_CLASS)
    #define INT_GPIOP3 INT_CONCAT(INT_GPIOP3_, INT_DEVICE_CLASS)
    #define INT_GPIOP4 INT_CONCAT(INT_GPIOP4_, INT_DEVICE_CLASS)
    #define INT_GPIOP5 INT_CONCAT(INT_GPIOP5_, INT_DEVICE_CLASS)
    #define INT_GPIOP6 INT_CONCAT(INT_GPIOP6_, INT_DEVICE_CLASS)
    #define INT_GPIOP7 INT_CONCAT(INT_GPIOP7_, INT_DEVICE_CLASS)
    #define INT_GPIOQ0 INT_CONCAT(INT_GPIOQ0_, INT_DEVICE_CLASS)
    #define INT_GPIOQ1 INT_CONCAT(INT_GPIOQ1_, INT_DEVICE_CLASS)
    #define INT_GPIOQ2 INT_CONCAT(INT_GPIOQ2_, INT_DEVICE_CLASS)
    #define INT_GPIOQ3 INT_CONCAT(INT_GPIOQ3_, INT_DEVICE_CLASS)
    #define INT_GPIOQ4 INT_CONCAT(INT_GPIOQ4_, INT_DEVICE_CLASS)
    #define INT_GPIOQ5 INT_CONCAT(INT_GPIOQ5_, INT_DEVICE_CLASS)
    #define INT_GPIOQ6 INT_CONCAT(INT_GPIOQ6_, INT_DEVICE_CLASS)
    #define INT_GPIOQ7 INT_CONCAT(INT_GPIOQ7_, INT_DEVICE_CLASS)
    #define INT_GPIOR INT_CONCAT(INT_GPIOR_, INT_DEVICE_CLASS)
    #define INT_GPIOS INT_CONCAT(INT_GPIOS_, INT_DEVICE_CLASS)
    #define INT_GPIOT INT_CONCAT(INT_GPIOT_, INT_DEVICE_CLASS)
    #define INT_HIBERNATE INT_CONCAT(INT_HIBERNATE_, INT_DEVICE_CLASS)
    #define INT_I2C0 INT_CONCAT(INT_I2C0_, INT_DEVICE_CLASS)
    #define INT_I2C1 INT_CONCAT(INT_I2C1_, INT_DEVICE_CLASS)
    #define INT_I2C2 INT_CONCAT(INT_I2C2_, INT_DEVICE_CLASS)
    #define INT_I2C3 INT_CONCAT(INT_I2C3_, INT_DEVICE_CLASS)
    #define INT_I2C4 INT_CONCAT(INT_I2C4_, INT_DEVICE_CLASS)
    #define INT_I2C5 INT_CONCAT(INT_I2C5_, INT_DEVICE_CLASS)
    #define INT_I2C6 INT_CONCAT(INT_I2C6_, INT_DEVICE_CLASS)
    #define INT_I2C7 INT_CONCAT(INT_I2C7_, INT_DEVICE_CLASS)
    #define INT_I2C8 INT_CONCAT(INT_I2C8_, INT_DEVICE_CLASS)
    #define INT_I2C9 INT_CONCAT(INT_I2C9_, INT_DEVICE_CLASS)
    #define INT_LCD0 INT_CONCAT(INT_LCD0_, INT_DEVICE_CLASS)
    #define INT_ONEWIRE0 INT_CONCAT(INT_ONEWIRE0_, INT_DEVICE_CLASS)
    #define INT_PWM0_0 INT_CONCAT(INT_PWM0_0_, INT_DEVICE_CLASS)
    #define INT_PWM0_1 INT_CONCAT(INT_PWM0_1_, INT_DEVICE_CLASS)
    #define INT_PWM0_2 INT_CONCAT(INT_PWM0_2_, INT_DEVICE_CLASS)
    #define INT_PWM0_3 INT_CONCAT(INT_PWM0_3_, INT_DEVICE_CLASS)
    #define INT_PWM0_FAULT INT_CONCAT(INT_PWM0_FAULT_, INT_DEVICE_CLASS)
    #define INT_PWM1_0 INT_CONCAT(INT_PWM1_0_, INT_DEVICE_CLASS)
    #define INT_PWM1_1 INT_CONCAT(INT_PWM1_1_, INT_DEVICE_CLASS)
    #define INT_PWM1_2 INT_CONCAT(INT_PWM1_2_, INT_DEVICE_CLASS)
    #define INT_PWM1_3 INT_CONCAT(INT_PWM1_3_, INT_DEVICE_CLASS)
    #define INT_PWM1_FAULT INT_CONCAT(INT_PWM1_FAULT_, INT_DEVICE_CLASS)
    #define INT_QEI0 INT_CONCAT(INT_QEI0_, INT_DEVICE_CLASS)
    #define INT_QEI1 INT_CONCAT(INT_QEI1_, INT_DEVICE_CLASS)
    #define INT_SHA0 INT_CONCAT(INT_SHA0_, INT_DEVICE_CLASS)
    #define INT_SSI0 INT_CONCAT(INT_SSI0_, INT_DEVICE_CLASS)
    #define INT_SSI1 INT_CONCAT(INT_SSI1_, INT_DEVICE_CLASS)
    #define INT_SSI2 INT_CONCAT(INT_SSI2_, INT_DEVICE_CLASS)
    #define INT_SSI3 INT_CONCAT(INT_SSI3_, INT_DEVICE_CLASS)
    #define INT_SYSCTL INT_CONCAT(INT_SYSCTL_, INT_DEVICE_CLASS)
    #define INT_SYSEXC INT_CONCAT(INT_SYSEXC_, INT_DEVICE_CLASS)
    #define INT_TAMPER0 INT_CONCAT(INT_TAMPER0_, INT_DEVICE_CLASS)
    #define INT_TIMER0A INT_CONCAT(INT_TIMER0A_, INT_DEVICE_CLASS)
    #define INT_TIMER0B INT_CONCAT(INT_TIMER0B_, INT_DEVICE_CLASS)
    #define INT_TIMER1A INT_CONCAT(INT_TIMER1A_, INT_DEVICE_CLASS)
    #define INT_TIMER1B INT_CONCAT(INT_TIMER1B_, INT_DEVICE_CLASS)
    #define INT_TIMER2A INT_CONCAT(INT_TIMER2A_, INT_DEVICE_CLASS)
    #define INT_TIMER2B INT_CONCAT(INT_TIMER2B_, INT_DEVICE_CLASS)
    #define INT_TIMER3A INT_CONCAT(INT_TIMER3A_, INT_DEVICE_CLASS)
    #define INT_TIMER3B INT_CONCAT(INT_TIMER3B_, INT_DEVICE_CLASS)
    #define INT_TIMER4A INT_CONCAT(INT_TIMER4A_, INT_DEVICE_CLASS)
    #define INT_TIMER4B INT_CONCAT(INT_TIMER4B_, INT_DEVICE_CLASS)
    #define INT_TIMER5A INT_CONCAT(INT_TIMER5A_, INT_DEVICE_CLASS)
    #define INT_TIMER5B INT_CONCAT(INT_TIMER5B_, INT_DEVICE_CLASS)
    #define INT_TIMER6A INT_CONCAT(INT_TIMER6A_, INT_DEVICE_CLASS)
    #define INT_TIMER6B INT_CONCAT(INT_TIMER6B_, INT_DEVICE_CLASS)
    #define INT_TIMER7A INT_CONCAT(INT_TIMER7A_, INT_DEVICE_CLASS)
    #define INT_TIMER7B INT_CONCAT(INT_TIMER7B_, INT_DEVICE_CLASS)
    #define INT_UART0 INT_CONCAT(INT_UART0_, INT_DEVICE_CLASS)
    #define INT_UART1 INT_CONCAT(INT_UART1_, INT_DEVICE_CLASS)
    #define INT_UART2 INT_CONCAT(INT_UART2_, INT_DEVICE_CLASS)
    #define INT_UART3 INT_CONCAT(INT_UART3_, INT_DEVICE_CLASS)
    #define INT_UART4 INT_CONCAT(INT_UART4_, INT_DEVICE_CLASS)
    #define INT_UART5 INT_CONCAT(INT_UART5_, INT_DEVICE_CLASS)
    #define INT_UART6 INT_CONCAT(INT_UART6_, INT_DEVICE_CLASS)
    #define INT_UART7 INT_CONCAT(INT_UART7_, INT_DEVICE_CLASS)
    #define INT_UDMA INT_CONCAT(INT_UDMA_, INT_DEVICE_CLASS)
    #define INT_UDMAERR INT_CONCAT(INT_UDMAERR_, INT_DEVICE_CLASS)
    #define INT_USB0 INT_CONCAT(INT_USB0_, INT_DEVICE_CLASS)
    #define INT_WATCHDOG INT_CONCAT(INT_WATCHDOG_, INT_DEVICE_CLASS)
    #define INT_WTIMER0A INT_CONCAT(INT_WTIMER0A_, INT_DEVICE_CLASS)
    #define INT_WTIMER0B INT_CONCAT(INT_WTIMER0B_, INT_DEVICE_CLASS)
    #define INT_WTIMER1A INT_CONCAT(INT_WTIMER1A_, INT_DEVICE_CLASS)
    #define INT_WTIMER1B INT_CONCAT(INT_WTIMER1B_, INT_DEVICE_CLASS)
    #define INT_WTIMER2A INT_CONCAT(INT_WTIMER2A_, INT_DEVICE_CLASS)
    #define INT_WTIMER2B INT_CONCAT(INT_WTIMER2B_, INT_DEVICE_CLASS)
    #define INT_WTIMER3A INT_CONCAT(INT_WTIMER3A_, INT_DEVICE_CLASS)
    #define INT_WTIMER3B INT_CONCAT(INT_WTIMER3B_, INT_DEVICE_CLASS)
    #define INT_WTIMER4A INT_CONCAT(INT_WTIMER4A_, INT_DEVICE_CLASS)
    #define INT_WTIMER4B INT_CONCAT(INT_WTIMER4B_, INT_DEVICE_CLASS)
    #define INT_WTIMER5A INT_CONCAT(INT_WTIMER5A_, INT_DEVICE_CLASS)
    #define INT_WTIMER5B INT_CONCAT(INT_WTIMER5B_, INT_DEVICE_CLASS)

     

    Kindly let me know, if the above is correct and anyother api I would be missing,

    Thanks a lot,

    Sanchit Mehra