C8051F530 LIN SLAVE 回傳問題
您好:
問題:我在實驗LIN SLAVE端接收傳送資料,碰到SLAVE無法回傳給MASTER。
MCU:C8051F530
LIN BUS Protocol:
Master端(傳送):0x3c 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08
Slave端(回傳) : 0x3d 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18
動作描述:
1. Master端傳送資料給Slave端
2. Slave端接收到完整資料
3. Slave端比對接收資料無誤,回傳資料給Master端(附上的程式監視不到回傳的資料)
請問Slave端回傳資料給Master端程式流程那裡出問題?
期待您的回信,謝謝!
程式內容如下:只附上LIN中斷內容,其餘主程式是複製silabs的example code
unsigned char buf[8];
INTERRUPT (LIN0_ISR, INTERRUPT_LIN)
{
static U8 ID, status;
U8 i, ctrl;
LINADDR = LIN0ST;
status = LINDATA;
if (status & LININTREQ) // If LIN interrupt request
{
if(status & DTREQ) // If ID field received
{
LINADDR = LIN0ID;
ID = LINDATA;
switch(ID)
{
case 0x3c :
LINADDR = LIN0CTRL;
LINDATA &= ~TXRX; // Select to receive data
LINADDR = LIN0SIZE;
LINDATA = (LINDATA & 0xF0) | 0x08; //receive 8 data byte
break;
default :
break;
}
}
else if(status & DONE) // If reception or transmission completed
{
LINADDR = LIN0CTRL;
ctrl = LINDATA;
// If in recieve mode and ID is correct
if ((ctrl & TXRX) == 0)
{
switch(ID) {
case 0x3c :
// Reception complete from Master
for(i = 0; i < 8; i++) {
LINADDR = i;
buf = LINDATA;
}
// 準備回傳
if((buf[0] == 0x01) &&
(buf[1] == 0x02) &&
(buf[2] == 0x03) &&
(buf[3] == 0x04) &&
(buf[4] == 0x05) &&
(buf[5] == 0x06) &&
(buf[6] == 0x07) &&
(buf[7] == 0x08)) {
LINADDR = LIN0CTRL;
LINDATA |= TXRX; // Select to transmit data
LINADDR = LIN0ID;
LINDATA = 0x3d; // LIN ID
LINADDR = LIN0SIZE;
LINDATA = (LINDATA & 0xF0) | 0x08; // Transmitting 8 byte
LINADDR = LIN0DT1;
LINDATA = 0x11;
LINADDR = LIN0DT2;
LINDATA = 0x12;
LINADDR = LIN0DT3;
LINDATA = 0x13;
LINADDR = LIN0DT4;
LINDATA = 0x14;
LINADDR = LIN0DT5;
LINDATA = 0x15;
LINADDR = LIN0DT6;
LINDATA = 0x16;
LINADDR = LIN0DT7;
LINDATA = 0x17;
LINADDR = LIN0DT8;
LINDATA = 0x18; }
break;
default :
break;
}
}
}
}
LINADDR = LIN0CTRL;
LINDATA |= DTACK; // Acknowledge data
LINADDR = LIN0CTRL;
LINDATA |= 0x0C; // Reset interrupt request, error flag
}