LIN-SCI 模块初始化代码 - LinSetupSCIBuffer
"void LinSetupSCIBuffer(void)\n{\n\t//Allow write to protected registers\n\tEALLOW; //允许对受保护的寄存器进行写操作\n\n\tLinaRegs.SCIGCR0.bit.RESET = 0; //Into reset //将SCI模块置于复位状态\n\tLinaRegs.SCIGCR0.bit.RESET = 1; //Out of reset //将SCI模块退出复位状态\n\n\tLinaRegs.SCIGCR1.bit.SWnRST = 0; //Into software reset //将SCI模块置于软件复位状态\n\n\t//SCI Configurations //SCI配置\n\tLinaRegs.SCIGCR1.bit.COMMMODE = 0; //Idle-Line Mode //空闲线模式\n\tLinaRegs.SCIGCR1.bit.TIMINGMODE = 1; //Asynchronous Timing //异步定时模式\n\tLinaRegs.SCIGCR1.bit.PARITYENA = 0; //No Parity Check //不进行奇偶校验\n\tLinaRegs.SCIGCR1.bit.PARITY = 0; //Odd Parity //奇校验\n\tLinaRegs.SCIGCR1.bit.STOP = 0; //One Stop Bit //一个停止位\n\tLinaRegs.SCIGCR1.bit.CLK_MASTER = 1; //Enable SCI Clock //使能SCI时钟\n\tLinaRegs.SCIGCR1.bit.LINMODE = 0; //SCI Mode 兼容SCI串口模式\n\tLinaRegs.SCIGCR1.bit.SLEEP = 0; //Ensure Out of Sleep //确保SCI模块处于非睡眠状态\n\tLinaRegs.SCIGCR1.bit.MBUFMODE = 1; //Buffered Mode //缓冲模式\n\tLinaRegs.SCIGCR1.bit.LOOPBACK = 0; //External Loopback 正常模式,非自测模式\n\tLinaRegs.SCIGCR1.bit.CONT = 1; //Continue on Suspend //在挂起状态下继续通信\n\tLinaRegs.SCIGCR1.bit.RXENA = 1; //Enable RX //使能接收\n\tLinaRegs.SCIGCR1.bit.TXENA = 1; //Enable TX //使能发送\n\n\t//Ensure IODFT is disabled //确保IODFT禁用\n\tLinaRegs.IODFTCTRL.bit.IODFTENA = 0x0;\n\n\t//Set transmission length //设置传输长度\n\tLinaRegs.SCIFORMAT.bit.CHAR = 7; //8个数据位\n\tLinaRegs.SCIFORMAT.bit.LENGTH = 0; // (LENGTH+1)个字节深度的BUFFER, 意味着28035的 LIN-SCI接收到(LENGTH+1) 个字节之后,进入中断服务函数\n\n\t// 当LinaRegs.BRSR.bit.M = 0 时 LinaRegs.BRSR.bit.SCI_LIN_PSL取值 194-->9600bps ; 97--> 19200bps\n\t// 当LinaRegs.BRSR.bit.M = 4 时 LinaRegs.BRSR.bit.SCI_LIN_PSL取值 15-->115200bps ;\n\t// P13页波特率计算 P67 波特率表格\n\tLinaRegs.BRSR.bit.SCI_LIN_PSL = 194;\n\tLinaRegs.BRSR.bit.M = 0;\n\n\t//Set interrupt priority //设置中断优先级\n\tLinaRegs.SCICLEARINTLVL.all = 0xFFFFFFFF; //Set Int level of all interrupts to LVL 0 //将所有中断的优先级设置为LVL 0\n\n\tLinaRegs.SCIGCR1.bit.SWnRST = 1; //bring out of software reset //将SCI模块退出软件复位状态\n\n\n\t//中断配置步骤-----1,开启模块中断使能,\n\tLinaRegs.SCISETINT.bit.SETRXINT = 1; //Enable RX interrupt //使能接收中断\n\n\t//中断配置步骤-----2,重映射中断服务函数\n\tPieVectTable.LIN0INTA = &Lina_Level0_ISR; //重映射LIN0中断服务函数\n\t// PieVectTable.LIN1INTA = &Lina_Level1_ISR;\n\n\t//Enable interrupts required for this example //使能所需的中断\n\tPieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block //使能PIE块\n\n\t//中断配置步骤-----3,连接CPU中断矩阵Y\n\t// IER |= M_INT9;// Enable CPU INT\n\n\t//中断配置步骤-----4,连接CPU中断矩阵X\n\tPieCtrlRegs.PIEIER9.bit.INTx3=1; // PIE Group 9, INT3 //连接CPU中断矩阵X\n\t// PieCtrlRegs.PIEIER9.bit.INTx4=1; // PIE Group 9, INT4\n\n\tEDIS; // This is needed to disable write to EALLOW protected registers //禁用对EALLOW受保护寄存器的写操作\n\n\twhile(LinaRegs.SCIFLR.bit.IDLE == 1); //Wait for SCI to be idle and ready for transmission //等待SCI处于空闲状态,准备发送\n\tLinARevCnt = 0;\n\tLinaCommStatus = 0;\n\tLinASendCnt = 0;\n\tLinASendDelay = 0;\n}\n
原文地址: https://www.cveoy.top/t/topic/psOU 著作权归作者所有。请勿转载和采集!