Other Parts Discussed in Thread: SYSBIOS
Hello,
I am working on a project which has to manage several right access memories.
To guarantee that, I am developing some software test to be runned at DSP start-up to check that these mechanism are working correctly.
For this I have many scenarios such:
-
Writing in a L2 SRAM address which writes are forbidden
-
Writing in a MSM address which write are forbidden
-
And others scenarios like that (not useful to describe here)
To perform that, I have branch following events to the event 3:
-
110 : MDMAERREVT - MDMA bus error event
-
113 : L1P_ED - Single bit error detected during DMA read
-
117 : L2_ED2 - Uncorrected bit error detected
-
119 : SYS_CMPA - DSP memory protection fault
-
124 : L2_CMPA - DSP memory protection fault
-
126 : EMC_CMPA - DSP memory protection fault
By setting Register EvtMask3 to 0xAF5DBFFF.
Then I have configured event 3 to branch to interrupt 15 by setting IntMux3 register to 0x03000000 (interrupt 12, 13 and 14 are not activated).
I have also activated the interrupt 15 by setting :
-
IER register bit 15 to 1 (to enable interrupt 15)
-
CSR register bit GIE to 1 (to enable global interrupt)
After this DSP initialization I perform the scenarios described below i.e:
-
Write in L2 SRAM address which writes are forbidden by the MPU
-
Write in a MSM address which write are forbidden by the MPU
And I check that Interrupt 15 routine is called.
It works correctly for both but … only for the first test.
So, If I perform a write on L2 SRAM forbidden address then Interrupt 15 is called but if after I perform a second test to write in MSM forbidden address then interrupt 15 is never called.
My first analysis was to check if my MSM test was correctly done but after verification there is no problem on it. And to verify that I have inverted both test i.e :
-
First perform the MSM forbidden write
-
Secondly, perform the L2 forbidden write
And with the scenario, the interrupt 15 was correctly called for the MSM test but not for the second one (i.e the L2 SRAM test which was working previously).
So, it seems that when my interrupt 15 routine is called, then interrupt 15 could never be generated anymore.
I suppose that my routine does not perform correctly the interrupt acknowledge but I don’t see the problem.
For information, my interrupt 15 routine performs following:
-
Clear interrupt 15 flag by setting ICR register bit 15 to 1
-
Clear corresponding event flag by setting bit EC126 to 1 in EVTCLR3 register (if event 126 is raised) or by setting bit EC124 to 1 in EVTCLR3 register (if event 124 is raised)
Please could you tell me if I have to do something else to acknowledge the interrupt 15 to explain why this one is always called only one time?
Thanks by advance