我正在研究 mpc 5777c 的 LIN
通信。我正在寻找 mpc 5777c 的 LIN 示例代码,但找不到。我可以获得此代码的帮助吗?我想传输和接收多个数据,但它不起作用。这是代码。
#define esci_c
#include "..\typedefs_mpc.h"
#include "..\proto_mpc.h"
void esci_init(void)
{
LIN_EN = 1;
SIU.PCR[LIN_TXD_pin].R = 0x400; // 为主要功能配置焊盘:LIN_TXD
SIU.PCR[LIN_RXD_pin].R = 0x400; // 为主要功能配置焊盘:LIN_RXD
eSCI_B.CR2.R = 0x2000; // 模块已启用(默认设置)
eSCI_B.LCR1.R = 0x0000; // LIN 模块停用
eSCI_B.BRR.B.SBR = 625;
eSCI_B.LCR1.B.LIN = 1; // LIN 模块激活
eSCI_B.CR2.B.BRCL = 1;
eSCI_B.CR2.B.BESTP = 1;
eSCI_B.CR2.B.BSTP = 1;
eSCI_B.CR1.B.TE = 1; // 启用发送
eSCI_B.CR1.B.RE = 1; // 启用 Rx
//发送中断激活
eSCI_B.CR1.B.RIE = 1;
}
uint8_t lin_data = 0x2;
uint8_t receivedID;
//帧传输
void LIN_SendFrame(uint8_t 标头、uint8_t* 数据、uint8_t 长度)
{
//eSCI_B.LRR.R = 标题;
uint8_tj=0;/* 虚拟变量 */
对于(j=0;j<长度;j++)
{
如果(eSCI_B.IFSR2.B.TXRDY == 1)
{
eSCI_B.IFSR2.R = 0x4000;/* 清除 TXRDY 标志 */
eSCI_B.LTR.R = *(数据+j); /* 发送 8 位数据 */
}
}
}
#define MY_ID 0x15
uint8_t test_lin = 0;
// 帧接收
void LIN_ReceiveFrame(uint8_t* 标头,uint8_t* 数据,uint8_t 长度)
{
uint8_tj=0;/* 虚拟变量 */
如果(eSCI_B.IFSR2.B.RXRDY == 1)
{
eSCI_B.IFSR2.B.RXRDY = 0x8000; /* 清除 RXRDY 标志 */
*header = eSCI_B.LRR.R;
如果 (*header == MY_ID)
{
test_lin = 1;
对于(j=0;j<长度;j++)
{
eSCI_B.IFSR2.B.RXRDY = 0x8000; /* 清除 RXRDY 标志 */
*(数据 + j) = eSCI_B.LRR.R; /* 读取数据字节*/
}
}
}
}
void LIN_IRQHandler(void) {
如果 (eSCI_B.IFSR2.B.OVFL)
{
eSCI_B.IFSR2.B.OVFL = 0;
}
如果 (eSCI_B.IFSR2.B.RXRDY)
{
uint8_t receivedID = eSCI_B.LRR.R;
如果(receivedID == MY_ID)
{
uint8_t receivedData = eSCI_B.LRR.R;
}
eSCI_B.IFSR2.B.RXRDY = 0;
}
如果 (eSCI_B.IFSR2.B.TXRDY)
{
eSCI_B.IFSR2.B.TXRDY = 0;
}
}
uint8_t txHeader = 0x01;
uint8_t txData[] = {0x15, 0x22, 0x33,0x44};
LIN_SendFrame(txHeader, txData, 4);
LIN_ReceiveFrame(&rxHeader, rxData, 4);