I am trying to integrate the SafeTI Diagnostics Library into my application, but am having some serious problems.
The Self Tests as a whole are running, but I get unmasked interrupts whilst the SRAM tests are running.
The demo application has an example for the VIC and data abort interrupts, but I cannot understand how this is supposed to work in a Funcational Safety related application.
The 'exception_handlers.c' file from the demo application contains a manual prototype of a function that actually exists in a private SafeTI Diagnostics Library module:
boolean SL_FLAG_GET(sint32 flag_id); /* avoid compiler warning */
This appears to be a hack to avoid the physically including a SafeTI Diagnostics Library private header file, do I interpret this correctly?
Are the exception handlers part of the application or the SafeTI Diagnostics Library?
The demo application just masks the exceptions, how does the Self Test ensure that the exceptions were actially raised?
There seems be an implementation of a fault injection test callback logging, but it does not do anything with the logged results, it's part of the application and it includes the private API of the SafeTI Diagnostics Library.
The demo application exceptions handlers themselves contain a masking mechanism to stop the propagation of exceptions that are generated during Self Test. It is this mechanism that is using the private interface from the SafeTI Diagnostics Library.
/* * DAbort due to access to illegal transaction to L2 Memory? * 0x00000008 indicates that it is an external abort caused by read and is AXI decode error * 0xFFF80000 is the protected location accessed to create the L2 interconnect error trap AXI decode error */ if((TRUE == SL_FLAG_GET(L2INTERCONNECT_UNPRIVELEGED_ACCESS)) && ((0x00000008u == (0x0000008u & _SL_Get_DataFault_Status())) && (0xFFF7A400U == _SL_Get_DataFault_Address()))) { maskDAbort = TRUE; }
The above code snippet is from the demo application. My application is for a Functional Safety related product and I need to be able to justify the above code. The implementation of the whole masking mechanism requires a detailed knowledge of items such as the memory address that was used to generate errors and number of exceptions raised, but I cannot find this anywhere in the SafeTI Diagnostics Library API or the Safety Manual.
Also, the above code snippet uses '_SL_Get_DataFault_Address' , which is described in the SafeTI Diagnostics Library API as 'NOTE: for future enhancements. Do not use these APIs'.
How do I implement the masking mechanism without accessing the private API from the SafeTI Diagnostics Library?
How do I implement the masking mechanism without detailed information concerning the diagnostic tests in the SafeTI Diagnostics Library?
Can someone please help me, I don't know how to continue with my integration as don't understand what it trying to be achieved here, I can't find the associated information the SafeTI Diagnostics Library documentation and it seems to be that there a large back-end part of the Self Test library that needs to be implemented in the application.