3.2.14 DIAG_GPIO

The DIAG_GPIO module is designed to verify the correct functionality of the GPIO memories through a set of C function calls.

The DIAG_GPIO software test API is mapped to the following safety mechanisms:

Table 3-15. 
FunctionDiagnostic MechanismUse CaseElapsed Time (μs)~
DIAG_GPIO_InputComparison()IO_PORTS_INPUT_COMPARISONPOST / OnDemand 15.03
DIAG_GPIO_InputOutputDirection() IO_PORTS_DIRECTIONPOST / OnDemand18.02
DIAG_GPIO_OutputDriveStrength() IO_PORTS_OUTPUT_DRIVEPOST / OnDemand16.18
DIAG_GPIO_OutputMonitoring()IO_PORTS_OUTPUT_MONITORPOST / OnDemand14.43
DIAG_GPIO_PeripheralMux()IO_PORTS_PERIPHERAL_MUXPOST / OnDemand41.43
DIAG_GPIO_PullUpPullDown()IO_PORTS_PULLUP_PULLDOWNPOST20.29
DIAG_GPIO_SFRReset()SFR_RESET_STATEPOST80
DIAG_GPIO_SFRWriteRead()SFR_WRITE_READPOST / OnDemand95

Configuring the Diagnostic

DIAG_GPIO does not require additional configuration.

Using the Diagnostic

#include "definitions.h"

DIAG_TEST_STATUS DIAG_GPIO_Post ( void )
{
    DIAG_TEST_STATUS result[NO_OF_GPIO_POST_TESTS];
    DIAG_TEST_STATUS gpio_test_status = DIAG_TEST_FAILED;
    int i;
    
    NVMCTRL_REGS->NVMCTRL_CTRLB = NVMCTRL_CTRLB_RWS(3);
    
    result[0] = DIAG_GPIO_InputOutputDirection(PORTB, PIN0, DIAG_PIN_DIR_INPUT);
    result[1] = DIAG_GPIO_InputOutputDirection(PORTA, PIN14, DIAG_PIN_DIR_OUTPUT);
    result[2] = DIAG_GPIO_InputComparison(PORTA, PIN22, PORTB, PIN1, PORT_PIN_HIGH);
    result[3] = DIAG_GPIO_OutputMonitoring(PORTA, PIN8, PORTB, PIN0, PORT_PIN_HIGH);
    result[4] = DIAG_GPIO_OutputMonitoring(PORTA, PIN8, PORTB, PIN0, PORT_PIN_LOW);   
    result[5] = DIAG_GPIO_PeripheralMux(PORTA, PIN8, PORTB, PIN0);

    // DO ADDITIONAL TESTS POST HERE
    
    for(i=0; i<NO_OF_GPIO_POST_TESTS; i++)
    {
        if (result[i] != DIAG_TEST_PASSED)
        {
            gpio_test_status = result[i];
            break;
        }        
        else
        {
            gpio_test_status = DIAG_TEST_PASSED;
        }
    }
    
    return gpio_test_status;
}