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.

RTI interrupt generation problem

Other Parts Discussed in Thread: HALCOGEN

Hi,

I m new to "RM46  " so not able to get RTI interrupt working.

I just enabled GIO and RTI drivers in Halcogen and configured RTI as directed below and generated code.

*********************************************************************************************************************************

/** @example example_rtiBlinky.c
*   This is an example which descibes the steps to create an example application which
*   toggles the High End Timer (HET) pin 1 based on an RTI timer compare 0 tick of one second.
*
*   @b Step @b 1:
*
*   Create a new project.
*
*   Navigate: -> File -> New -> Project
*
*   @image html example_createProject.jpg "Figure: Create a new Project"
*
*   @b Step @b 2:
*
*   Configure driver code generation:
*   - Enable RTI driver
*   - Enable GIO driver
*   - Disable others
*
*   Navigate: -> TMS570LSxx /RM4 -> Enable Drivers
*
*   @image html example_rtiBlinky_enableDrivers.jpg "Figure: Driver Configuration"
*
*   @b Step @b 3:
*
*   Configure Vectored Interrupt Module Channels:
*   - Map VIM Channel 2 to RTI Compare 0 interrupt
*   - Enable VIM Channel 2
*   - Map VIM Channel 2 to IRQ
*
*   Navigate: -> TMS570LSxx /RM4 -> VIM Channel 0-31
*
*   @image html example_rtiBlinky_vimChannelView.jpg "Figure: VIM Channel Configuration"
*
*   @b Step @b 4:
*
*   Configure RTI compare 0 period to 1000 ms:
*   - Enter 1000.000 to Compare 0 Period edit box
*
*   Navigate: -> RTI -> RTI1 Compare
*
*   @image html example_rtiBlinky_rti1CompareView.jpg "Figure: RTI Compare Configuration"
*
*   @b Step @b 5:
*
*   Generate code
*
*   Navigate: -> File -> Generate Code
*
*   @image html generateCode.jpg "Figure: Generate Code"
*
*   @b Step @b 6:
*
*   Copy source code below into your application.
*
*   The example file example_rtiBlicky.c can also be found in the examples folder: ../HALCoGen/examples
*
*   @note HALCoGen generates an enpty main function in sys_main.c,
*         please make sure that you link in the right main function or copy the source into the user code sections of this file.
*
*/

here is my code:


#include "sys_common.h"
#include "system.h"
#include "sys_core.h"
/* USER CODE BEGIN (1) */
/* USER CODE END */
#include "rti.h"
#include "het.h"
#include "gio.h"

/** @fn void main(void)
*   @brief Application main function
*   @note This function is empty by default.
*
*   This function is called after startup.
*   The user can use this function to implement the application.
*/

/* USER CODE BEGIN (2) */
/* USER CODE END */

void main(void)
{
/* USER CODE BEGIN (3) */
    /* Initialize RTI driver */
        run_LED_StartUp();
        
    rtiInit();

    /* Set high end timer GIO port hetPort pin direction to all output */
    gioSetDirection(hetPORT1, 0xFFFFFFFF);

    /* Enable RTI Compare 0 interrupt notification */
    rtiEnableNotification(rtiNOTIFICATION_COMPARE0);

    /* Enable IRQ - Clear I flag in CPS register */
    /* Note: This is usually done by the OS or in an svc dispatcher */
    _enable_interrupt_();

    /* Start RTI Counter Block 0 */
    rtiStartCounter(rtiCOUNTER_BLOCK0);         
         
    /* Run forever */
    while(1)
        {
        
        }
/* USER CODE END */
}



/* USER CODE BEGIN (4) */
/* Note-You need to remove rtiNotification from notification.c to avoid redefinition */
void rtiNotification(uint32 notification)
{
/*  enter user code between the USER CODE BEGIN and USER CODE END. */
    /* Toggle HET pin 0 */
    gioSetPort(hetPORT1, gioGetPort(hetPORT1) ^ 0x00000001);
}
/* USER CODE END */

please help.

Neha

  • Neha,

    I don't see anything obviously wrong - it looks like you followed the instructions correctly.
    But I'm sure it's something simple.

    What I would do next is:

     1) Double-check all of the instructions in the comments to make sure I didn't miss anything.

         If you post screen shots of your various tabs of HalCoGen we can also check this quickly for you.

    2) If nothing is missing two easy tests to do are:

          a) put a breakpoint inside the "rtiNotificaiton()' function to see if it ever gets called.

          b) manually write to the GIO data output register in the HET to see if the LED toggles on your board (maybe it's a board setting or something simple like that...).  

    Which board are you using to run this code on?

  • Hi,

    Thanks for your reply.

    I am using Hercules Saefty MCU development kit for RM46, with default settings.

    Not very sure which port pins i am using for LED toggle on this board as I am not able to fing its port name and pin number .

    I am trying to debug with J-Link debugger and putting break point inside the "rtiNotificaiton()' function to check if it ever gets called, but its not happening that is what I am not getting. have successfully ported the code in IAR and able to debug also any way attaching screenshots for my  halcogen settings.

    Please help.

    thank you.

  • counter is not getiing started that is what i observed.

  • Neha,

    Hi, do you see the RTI not starting when you have stepped over the line of code that is:

        /* Start RTI Counter Block 0 */
        rtiStartCounter(rtiCOUNTER_BLOCK0);

    The rtiStartCounter() function call should be writing to the GCTRL register of the RTI to start the counter counting.
    Are you seeing the write to GCTRL fail?   If you use the debugger to write to GCTRL manually do you see the counter counting?   Also there is button in HalCoGen 'Enable/Disable' continue on suspend.  Would need to check the TRM to see which way this bit works but in one setting if you just sit in the debugger halted and refresh the memory window you would not see the counter count;  but in the other mode the counter would continue counting when the CPU has halted.  If you are in the mode when it stops on suspend, you would need to issue a run and then a halt in the debugger to make the RTI counter count - even after it is enabled.  So you may try doing a run then a halt to see if the counter value has changed.

    If you confirm that the counter is indeed not counting, and the issue appears to be the write to GCTRL failing, then we need to check the CPU mode (CPSR register) when it is trying to start the counter to make sure it has privilege.  
    We may also need to make sure you didn't lock out accesses to the RTI registers by programming the MPU.

    If write occurs but the counter still does not start then we need to check the clock settings for the RTI to make sure it's getting the right clock.  It looks like it should be based on the screenshoot but this is still probably the next step.

    If all else fails then if you post a register file dump of the RTI control registers we can see if we spot something.

  • 5672.RK_timer.zip

    Hi,

    thanks for your reply.

    Attaching my project file and let you know I am using IAR.

    thaks and regards,

    Neha.

  • Hi Neha,

    Is this the same issue that Jean-Marc answered in this thread?  http://e2e.ti.com/support/microcontrollers/hercules/f/312/t/363583.aspx

    If it's related but not the same - would you please help me understand what issues are still open to resolve?

  • thanks to TI support team.