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.

TMS570LS1224: Problem with System Software Interrupt

Part Number: TMS570LS1224
Other Parts Discussed in Thread: HALCOGEN

Hi

Im working with the SSI. I call it from the GIO notification. Since the GIO is on channel 9 (high priority) and the SSI is channel 23 or 2x something, the interrupt process I have on GIO notification finishes and then the SSI starts. 

Just before the SSI is called, I use  gioDisableNotification(gioPORTB,2); to avoid having interrupts inside the SSI (is the core of the algorithm). Then, I start running the code from SSI and everything works perfect. 

The last step is to use gioEnableNotification(gioPORTB,2); in order to reactivate the interrupt. For what I saw, it didn't change anything. And what happens is this:

After reactivating the interrupt, it reaches the "}" and goes to RTI COUNTER STOP function, returns to "}" from the SSI and then goes to the init and restart everything BUT the gio notification never arrives...

Am I missing something when using SSI??

Thanks!!

  • Hello,

    Can you post your code of the function?

    After reactivating the interrupt, it reaches the "}" and goes to RTI COUNTER STOP function, returns to "}"

    which function?

    Regards,

    QJ

  • Hi

    I already solve the problem. I will post the parts from the code that have relation to the SSI. This is the end of the gio notification interrupt

    if(m_count>5149)
            {
            
                m_count=0;
                done_muscle_data=1;
                if(inicialization_done==1)// && done_muscle_data==1)
                {
    
     
                    ss_interrupt=data1;
                    systemREG1->SSISR1 = (0x7500 | (0xFF & data1 ));
    
     
                }
            }   //if(m_count>999)*/
        sampling_muscle=0;

    And here is the SSI routine 

    if(ss_interrupt==data1)
        {
            
            //gioDisableNotification(gioPORTB,2);
            //_disable_IRQ();
            //Do FIR filter to the signal
            //linREG->PIO3=(uint32)2;    //LIN_RX
            FIR_520();
    
    
            //check if the received signal was just a pulse
            //signal_pulse();
            time_signal();
    
            if(fir_done==1 )//&& muscle_data_prom>1.8 && signal_time>20 ) // && arm_pulse==0)
            { //doing FFT here with the data obtained from SPI
        
                }
    
                
                
    
    
    
    
                
    
            }//if(muscle_data_prom>1.0 && fir_done==1)
    
    
        }//signal processing
    
        
    
        //gioEnableNotification(gioPORTB,2);
        done_processing=1;}

    I just added uint32 offset = systemREG1->SSIVEC at the beginning of the interrupt and problem solved. 

    You MUST do that exactly. If you just write systemREG1->SSIVEC it wont work. You MUST assign the value to a variable. 

    The problem with SSI is that YOU write all the routine. BUT on the other interrupts, you only writhe what you want to do. And HALCOGEN does all the flags and activation related things 

  • Hi
    Im having the same problem as before, even reading the register but I have no idea why. I cannot upload the code here but I could send it to you directly...

    The problem is that once the interrupt ends, it goes again to the rti.c file to the counters. There are two cases:
    1) Disabling the interrupts so I don't have any interrupt inside the System Interrupt
    2) Not disabling the interrupts

    In the first case, after reaching the }, the code goes to the RTI codes. But in the second, the first time it reaches } it continues normally and the second time, it goes to RTI codes...

    Any idea of this??

    Regards