//定义函数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;
}
LIN SCI 兼容模式初始化函数详解

原文地址: https://www.cveoy.top/t/topic/oKP6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录