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 + -
显示快捷键?