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

Problem in Interrupt Enable process

since working with RTX, to enable interrupt should be operated by os_enable_isr(), and directly setting bit in IE is no useful......but, the problem is why it failed to call os_enable_isr(4) to enable serial port0 interrupt.......anybody can give me some advice on it. thanks in advance.

  • According to the result of trace, it failed when to check a base-address add the specified interrupt number, the address(in Code address) return 0, then it return fail information.......why did it return fail? what should I put in the address? any other way to enable interrupt except the RTX function os_enabled_interrupt()?

  • Did you create an interrupt function?

    Keil Support

  • Yes, of course.

    Now I can get a very simple example with interrupt and RTX-51 tasks to work well now. But my original program still can work, but the two programs are in the same proccess on interrupt.

    Thanks very much

  • Can anybody give me some information about it? Thanks in advance.

  • I got this working in RTX51. It was pretty straight-forward.

    1. Create the interrupt service routine as you would in a standard Keil C51 program. This is the int0 function in the following example.

    2. Create some code that enables the interrupt source. The statements EX0 = 1; and IT0 = 1; in the startup task do this.

    3. Call the os_enable_isr function and pass the interrupt number. This is also done in the startup task.

    For example:

    #include <rtx51.h>
    #include <reg51.h>
    #include <stdio.h>
    
    #define STARTUP_TASK 0
    
    //-----------------------------------------------
    //-----------------------------------------------
    void int0 (void) interrupt 0
    {
    static unsigned int i;
    
    i++;
    }
    
    //-----------------------------------------------
    //-----------------------------------------------
    void task0 (void) _task_ STARTUP_TASK
    {
    os_set_slice (1000);        /* Set for OSC Frequency / 10,000 */
    
    EX0 = 1;                    /* Enable External Int 0 */
    IT0 = 1;                    /* Edge-triggered */
    
    os_enable_isr (0);          /* Enable interrupt #0 */
    
    
    while (1)
      {
      os_wait (K_TMO, 100, NULL);
      }
    }
    //-----------------------------------------------
    //-----------------------------------------------
    void main (void)
    {
    os_start_system (STARTUP_TASK);
    }
    
    

    You may download this complete uVision2 application from the following URL:

    http://www.keil.com/download/docs/rtx51_ints.zip.asp

    Keil Support

  • Thanks very much.
    I've got it work now.