AnsweredAssumed Answered

Problem with software interrupt on ADSP-21469 EZ-Kit

Question asked by a.st on Apr 23, 2013
Latest reply on Apr 25, 2013 by MaheshN

Hallo,

I am working on a Code for the ADSP-21469 EZ-Kit with Audio Extension Board. My Code is pretty much based on the talkthrough example. In addition there are UART and pushbutton functionality added. The code for this was taken from the post example. the software can switch between three different matixes. the input signals can be routet freely to the outputs through the matrix. This works well so far. In addition to the physical inputs and outputs I added an interface for an algorithm. The algorithm shall later on work with Blocks of three samples. Therefore I added a counter to the "SPORT1_ISR_process_samples_.asm". When this counter reaches two it is reseted, and bit 18 in the IRPTL register is set:

 

/* this section increments the counter or resets it to zero */

    r0 = dm(_counter);         // counter value is loaded to r0

    r4 = 2;                    // TODO: check if a push is neccesary

    COMP(r0, r4);              // r0 is compared to r4 = 2

    if NE jump cntinc;

    r3 = 0;

    r0 = r3;                   // sets r0 to zero

    dm(_counter) = r0;         // r0 is written back to counter

    BIT SET IRPTL (1<<18);     // trigger software interrupt at Sig_P15   

    nop;

    jump cntend;   

    cntinc: r0 = r0 +1;        // r0 is incremented only if countervalue is less than 2

    dm(_counter) = r0;         // r0 is written back to counter

    cntend:                                

   

P15I was configured to be an Software interrupt in the main function before:


int temp;

temp=*pPICR2;

    temp&=~(P15I0|P15I1|P15I2|P15I3|P15I4);    // Clear Programmable Interrupt 15 Register

    temp|=P15I0|P15I1|P15I2|P15I3|P15I4;    // Set Programmable Interrupt 15 Register --> Software Interrupt

    *pPICR2=temp;

 

The interrupt service routine looks as follows:

 

void test_ISR(int sig_int)

{

   

// Loopback for testing

    int i;

    for (i =0; i < AUDIO_BLOCK_SIZE; ++i)

        {

            output_ch2[i]=input_ch0[i];

            output_ch3[i]=input_ch1[i];

        }

}

 

After that I used interrupt(SIG_P15,test_ISR). When I now start the program the audio routing works as expectet. But neither the UART nor the pushbuttons work anymore. Without interrupt(SIG_P15,test_ISR) they work as expected and I can switch between different matrixes. With P15 activated only audio works. Can anybody help me to find the mistake in my usage of software interrupts? You find the code I used attached to this post.

 

Thanks in advance,

 

Alex

Attachments

Outcomes