f53x_linsnooper_main.c

来自「8051试验程序 基础教材」· C语言 代码 · 共 805 行 · 第 1/3 页

C
805
字号

            if ( STATUS_FLAG == 0xFF )
            {
                STATUS_FLAG = 0x00;             // Clear Status flag
                UART_Send_Word( "Status: ", 8 );
                UART_Send_Word( "Listening...", 12 );
                UART_Send_CRLF();
            }
        }

   }                                            // end of Main loop
}


//----------------------------------------------------------------------------
// CPU_Initialize
//----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
// Description  :   This function initializes the processor
// Note:
//----------------------------------------------------------------------------
void CPU_Initialize(void)
{
    OSCICN = 0x87;                     // Internal Osc. 1:1 divider
//  OSCIFIN = 0x27;                    // Internal Fine Oscillator Calibration
    OSCICL = 0x58;                     // Internal Oscillator Calibration

    PCA0MD = 0x0;                      // WDT disabled

    /* Setting Crossbar to skip all I/O by default */
    P0SKIP = 0xFF;
    P1SKIP = 0xFF;

    P0MDIN = 0xFF;                     // P0 digital
    P1MDIN = 0xFF;                     // P1 digital

    P1MDOUT |= LED;                    // Configure LED pin as output
    P1MDOUT |= T0DEBUG;                // Configure T0DEBUG pin as output
    P1MDOUT |= T1DEBUG;                // Configure T1DEBUG pin as output

    /* UART */
    P0MDOUT |= 0x08;                   // UART TX as output (P0.3)
    P0SKIP  &= ~0x18;                  // Crossbar for UART
    XBR0 |= 0x01;                      // Enable UART0

    /* LIN */
    P0MDOUT |= 0x01;                   // LIN TX as output (P0.0)
    P0SKIP  &= ~0x03;                           // Crossbar for LIN
    XBR0 |= 0x04;                      // Enable LIN

    /* Crossbar enable */
    XBR1    |= 0x40;                   // Enable XBAR, weak pull-ups enabled
}


//-----------------------------------------------------------------------------
// void Display_Flash_Data
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
// Description  : This procedure displayes stored data in Flash Memory
// Notes:
//-----------------------------------------------------------------------------
void Display_Flash_Data(void)
{
    unsigned char i;

    for (i=0; i<64; i++)
    {
        UART_Send_DEC( i, 1 );
        UART_Send_Byte( '.' );
        UART_Send_Byte( Flash_Read ( i )+0x30 );
        UART_Send_Byte( '.' );
        UART_Send_Byte( Flash_Read ( i+66 ) );
        UART_Send_CRLF();
    }
    UART_Send_CRLF();
}


//-----------------------------------------------------------------------------
// void Display_Identifier
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
// Description  : This procedure displayes received identifier via LIN
// Notes:
//-----------------------------------------------------------------------------
void Display_Identifier(void)
{
    UART_Send_CRLF();
    UART_Send_Word( "  ID: ", 6 );
    UART_Send_DEC( LIN_IDENTIFIER, 1 );
    UART_Send_SPACE();
    UART_Send_Byte('(');
    UART_Send_HEX( LIN_IDENTIFIER, 1 );
    UART_Send_Byte(')');

    UART_Send_SPACE();

    if ( !( (LIN_DATA[2] == 0xF2) && ((LIN_DATA[1] & 0xF0) == 0x00) ) )
    {
        if ( LIN_IDENTIFIER < 60 )
            UART_Send_Word( "Signal-carrying frame", 21 );
        else if ( LIN_IDENTIFIER < 62 )
            UART_Send_Word( "Diagnostic frame", 16 );
        else if ( LIN_IDENTIFIER < 63 )
            UART_Send_Word( "User-defined frame", 18 );
        else
            UART_Send_Word( "Reserved type of frame", 22 );
    }
    UART_Send_CRLF();
}


//-----------------------------------------------------------------------------
// void Display_Received_Data
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
// Description  : This procedure displayes received data via LIN
// Notes:
//-----------------------------------------------------------------------------
void Display_Received_Data(void)
{
    unsigned char i;
    unsigned char temp;

    UART_Send_Word( "Data: ", 6 );
    if (LIN_IDENTIFIER < 60)
        temp = Flash_Read ( LIN_IDENTIFIER );
    else
        temp = LINLENGTH;
    for ( i=0; i<temp; i++ )
    {
        UART_Send_HEX( LIN_DATA[i], 1 );
        UART_Send_SPACE();
    }
    UART_Send_CRLF();

    if ( (LIN_IDENTIFIER == 0x3C) & (Flash_Read ( LIN_IDENTIFIER ) == 8) )       // Master request frame
    {
        UART_Send_Word( "       NAD  PCI  ", 17 );
        temp = LIN_DATA[1] >> 4;
        if ( temp == 0x00 )
            UART_Send_Word( "SID  D1   D2   D3   D4   D5", 27 );
        else if ( temp == 0x01 )
            UART_Send_Word( "LEN  SID  D1   D2   D3   D4", 27 );
        else
            UART_Send_Word( " D1  D2   D3   D4   D5   D6", 28 );
    }
    else if ( LIN_IDENTIFIER == 0x3D & (Flash_Read ( LIN_IDENTIFIER ) == 8) )  // Slave response frame
    {
        UART_Send_Word( "       NAD  PCI ", 16 );
        temp = LIN_DATA[1] >> 4;
        if (temp == 0x00)
            UART_Send_Word( "RSID  D1   D2   D3   D4   D5", 28 );
        else if ( temp == 0x01 )
            UART_Send_Word( " LEN RSID  D1   D2   D3   D4", 28 );
        else
            UART_Send_Word( " D1   D2   D3   D4   D5   D6", 28 );
    }
    else if ( (LIN_DATA[2] == 0xF2) && ((LIN_DATA[1] & 0xF0) == 0x00) )
        UART_Send_Word( "       NAD PCI  RSID  D1   D2   D3   D4   D5", 44 );
    else
    {
        if (LIN_IDENTIFIER < 64)
            temp = Flash_Read ( LIN_IDENTIFIER );
        else
            temp = LINLENGTH;
        UART_Send_Word( "       ", 7 );
        for ( i=0; i<temp; i++)
        {
            UART_Send_Word( "D", 1 );
            UART_Send_DEC( i+1, 0 );
            UART_Send_Word( "   ", 3 );
        }
    }
    UART_Send_CRLF();
}


//-----------------------------------------------------------------------------
// void Display_Sniffer_Status
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
// Description  : This procedure displayes information about Sniffer Status
// Notes:
//-----------------------------------------------------------------------------
void Display_Sniffer_Status()
{
    UART_Send_CRLF();
    UART_Send_Word( "Status: ", 8 );

    switch( LIN_STATUS )
    {
        case    LIN_MSG_TRANSMITTED_OK: // Transmission completed OK
                    UART_Send_Word( "Data transmitted", 16 );
                    break;

        case    SLEEPMODE:                  // Lin in Sleep mode by timeout
                    UART_Send_Word( "Sleep", 5 );
                    break;

        case    AWAKEN:                       // Part has been awaken
                    UART_Send_Word( "Awaken", 6 );
                    break;

        case    BITERROR:                   // Bit error detected
                    UART_Send_Word( "Bit Error", 9 );
                    break;

        case    CHKERROR:                   // Checksum Error
                    UART_Send_Word( "Checksum Error", 14 );
                    break;

        case    TIMEOUTERROR:               // Timeout detected in communication
                    UART_Send_Word( "Timeout Error", 13 );
                    break;

        case    PARITYERROR:                // Parity error in the ID detected
                    UART_Send_Word( "Parity error in the ID", 22 );
                    break;

        case    SYNCERROR:                  // Error in synch-break detected
                    UART_Send_Word( "Error in synch-break", 20 );
                    break;

        default:                                // not supposed to reach this....
                    UART_Send_Word( "Not supported LIN State", 23 );
                    break;
    }
    UART_Send_Word( " (ID: ", 6 );
    UART_Send_DEC( LIN_IDENTIFIER, 1 );
    UART_Send_Word( ")", 1 );

    UART_Send_CRLF();
}


//-----------------------------------------------------------------------------
// void Analize_Received_Data
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
// Description  : This procedure analizes and displayes received data via LIN
// Notes:
//-----------------------------------------------------------------------------
void Analize_Received_Data(void)
{
    unsigned char i;
    unsigned int length;

    if ( LIN_IDENTIFIER == 0x3C )       // Master request frame
    {
        UART_Send_CRLF();
        UART_Send_Word( "Master request frame:", 21 );
        UART_Send_CRLF();
    }

    if ( LIN_IDENTIFIER == 0x3D || LIN_DATA[2] == 0xF2 )    // Slave response

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?