LIN SCI 兼容模式初始化函数详解
//定义函数inv_CommSendDataFrame为类型LinSciCommSend
//定义函数inv_CommRevDataFrame为类型LinSciCommRev
LinSciCommSend inv_CommSendDataFrame;
LinSciCommRev inv_CommRevDataFrame;
//定义LinL0IntVect为Uint16型变量
//定义LinCrcCnt、LinSciASendCntCal、LinARevCnt、LinASendCnt、LinaCommStatus、LinASendDelay为Uint8型变量
//定义rdataA为8字节的数组
Uint16 LinL0IntVect;
Uint8 LinCrcCnt = 0;
Uint8 LinSciASendCntCal = 0;
Uint8 rdataA[8];
Uint8 LinARevCnt=0,LinASendCnt=0;
Uint8 LinaCommStatus;
Uint8 LinASendDelay = 0;
//定义LinSetupSCIBuffer函数,用于LIN初始化为SCI兼容模式,采用buffer机制,8字节深度(1-8字节),115200bps, 8N1,接收采用中断
void LinSetupSCIBuffer(void)
{
//允许写受保护的寄存器
EALLOW;
//进入复位状态
LinaRegs.SCIGCR0.bit.RESET = 0;
//退出复位状态
LinaRegs.SCIGCR0.bit.RESET = 1;
//进入软件复位状态
LinaRegs.SCIGCR1.bit.SWnRST = 0;
//SCI的配置
LinaRegs.SCIGCR1.bit.COMMMODE = 0; //空闲线模式
LinaRegs.SCIGCR1.bit.TIMINGMODE = 1; //异步计时
LinaRegs.SCIGCR1.bit.PARITYENA = 0; //无奇偶校验
LinaRegs.SCIGCR1.bit.PARITY = 0; //奇校验
LinaRegs.SCIGCR1.bit.STOP = 0; //一个停止位
LinaRegs.SCIGCR1.bit.CLK_MASTER = 1; //使能SCI时钟
LinaRegs.SCIGCR1.bit.LINMODE = 0; //SCI模式,兼容SCI串口模式
LinaRegs.SCIGCR1.bit.SLEEP = 0; //确保未进入睡眠状态
LinaRegs.SCIGCR1.bit.MBUFMODE = 1; //缓冲模式
LinaRegs.SCIGCR1.bit.LOOPBACK = 0; //正常模式,非自测模式
LinaRegs.SCIGCR1.bit.CONT = 1; //在挂起时继续传输
LinaRegs.SCIGCR1.bit.RXENA = 1; //使能RX
LinaRegs.SCIGCR1.bit.TXENA = 1; //使能TX
//确保IODFT已禁用
LinaRegs.IODFTCTRL.bit.IODFTENA = 0x0;
//设置传输长度
LinaRegs.SCIFORMAT.bit.CHAR = 7; //8个数据位
LinaRegs.SCIFORMAT.bit.LENGTH = 0; //(LENGTH+1)个字节深度的BUFFER, 意味着28035的LIN-SCI接收到(LENGTH+1)个字节之后,进入中断服务函数
//当LinaRegs.BRSR.bit.M = 0 时,LinaRegs.BRSR.bit.SCI_LIN_PSL取值194-->9600bps,97-->19200bps
//当LinaRegs.BRSR.bit.M = 4 时,LinaRegs.BRSR.bit.SCI_LIN_PSL取值15-->115200bps
//参考P13页波特率计算,P67页波特率表格
LinaRegs.BRSR.bit.SCI_LIN_PSL = 194;
LinaRegs.BRSR.bit.M = 0;
//设置中断优先级
LinaRegs.SCICLEARINTLVL.all = 0xFFFFFFFF; //将所有中断的优先级设置为LVL 0
//使能中断
LinaRegs.SCIGCR1.bit.SWnRST = 1;
//中断配置步骤-----1,开启模块中断使能
LinaRegs.SCISETINT.bit.SETRXINT = 1;
//中断配置步骤-----2,重映射中断服务函数
PieVectTable.LIN0INTA = &Lina_Level0_ISR;
//使能中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
//中断配置步骤-----3,连接CPU中断矩阵Y
// IER |= M_INT9;
//中断配置步骤-----4,连接CPU中断矩阵X
PieCtrlRegs.PIEIER9.bit.INTx3=1;
//禁止写受保护的寄存器
EDIS;
//等待SCI处于空闲状态,准备传输
while(LinaRegs.SCIFLR.bit.IDLE == 1);
//初始化接收计数器
LinARevCnt = 0;
//初始化通讯状态
LinaCommStatus = 0;
//初始化发送计数器
LinASendCnt = 0;
//初始化发送延时
LinASendDelay = 0;
}
原文地址: https://www.cveoy.top/t/topic/oKP6 著作权归作者所有。请勿转载和采集!