工具/软件:
void linaInit (void)
{
LIN_BAUD_CALC (19200、&P_VALUE、&M_VALUE、&U_VALUE);
EALLOW;
CpuSysRegs.PCLKCR19.bit.LIN_A = 1;
LinaRegs.SCIGCR0.bit.reset = 1;// h/w 复位
// LinaRegs.SCIGCR0.bit.reset = 0;
LinaRegs.SCIGCR1.bit.SWnRST = 0;// SCI 설정 전 리셋 상태 진입 μ s
// SCI 모드 설정
LinaRegs.SCIGCR1.bit.LINMODE = 0;// 0:SCI 模式启用、1:LIN 模式启用
// 1h (R/W)= SCI 兼容模式:使能 SCI 模块的时钟。
LinaRegs.SCIGCR1.bit.CLK_Master = 1;
LinaRegs.SCIGCR1.bit.TIMINGMODE = 1;//타이밍 모드 μ s
//통신 모드 설정
LinaRegs.SCIGCR1.bit.COMMMODE = 0;// Idle-line 모드
LinaRegs.SCIGCR1.bit.PARITYENA = 1;//패리티 사용 μ s
LinaRegs.SCIGCR1.bit.barity = 0;//偶校验
LinaRegs.SCIGCR1.bit.stop = 0;// 1 个停止位
LinaRegs.SCIGCR1.bit.TXENA = 1;//송신 활성화 μ s
LinaRegs.SCIGCR1.bit.RXENA = 1;//수신 활성화 μ s
LinaRegs.SCIGCR1.bit.cont = 1;//디버깅 중에도 동작 μ s
//문자 길이 설정(8 位)
LinaRegs.SCIFORMAT.bit.char = 7;// 8 位 (0부터 시작 μ s)
LinaRegs.SCIFORMAT.bit.length = 1;// 1 个字符
설정 波特率 24비트 분주기(μ s)
LinaRegs.brSR.bit.SCI_LIN_PSL = P_Value 和 0xFFFF;
LinaRegs.brSR.bit.SCI_LIN_PSh =(P_VALUE >> 16) 和 0xFF;
LinaRegs.brSR.bit.M = M_value;//소수 분주기 미사용 μ s
LinaRegs.brSR.bit.U = U_value;//초소수 분주기 미사용 μ s
LinaRegs.SCIPIO0.bit.RXFUNC = 1;// LINRX 기능 SCI RX→
LinaRegs.SCIPIO0.bit.TXFUNC = 1;// LINTX→SCI TX 기능 μ s
LinaRegs.SCISETINT.bit.SETRXINT = 1;RX 인터럽트 활성화
// 0h (R/W)=인터럽트 레벨이 INT0 라인에 매핑됩니다。
LinaRegs.SCISETINTLVL.bit.SETRXINTOVO = 0;RX 인터럽트 우선순위 0
인터럽트 벡터 등록 μ s
PieVectTable.Lina_0_INT =&LINRxIsr;PIE 그룹 6、INTx5
PieCtrlRegs.PIEIER6.bit.INTx5 = 1;인터럽트 활성화 μ s
IER |= M_INT6;
LinaRegs.SCIGCR0.bit.reset = 1;
LinaRegs.SCIGCR1.bit.SWnRST = 1;SCI 설정 전 리셋 상태 진입
GpioCtrlRegs.GPAGMUX2.bit.GPIO22 = 2;LIN_TX 작업에 대한 GPIO 구성“9、b1001“
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1;
GpioCtrlRegs.GPAGMUX2.bit.GPIO23 = 2;LIN_RX 작업을 위해 GPIO 구성“9、b1001“
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1;//
GpioCtrlRegs.GPADIR.bit.GPIO23 = 0;RX 입력
GpioCtrlRegs.GPADIR.bit.GPIO22 = 1;TX 출력
EDIS;
}
__interrupt 무효
LINRxIsr (void)
{
linRxCnt++;
if (aiTpTest===Lina) DO1_T;
linRxData = LinaRegs.SCIRD.bit.RD;수신 데이터 읽기 μ s
如果 (LinaRegs.SCIFLR.bit.OE) LinaRegs.SCICLEARINT.bit.CLROEINT = 1;
如果 (LinaRegs.SCIFLR.bit.FE) LinaRegs.SCICLEARINT.bit.CLRFEINT = 1;(LinaRegs.SCIFLR.bit.PE) LinaRegs.SCICLEARINT.bit.CLRPEINT = 1인 μ s
경우;
LinaRegs.SCICLEARINT.bit.CLRRXINT = 1;//인터럽트 플래그 클리어 μ s
PIE 인터럽트 确认
PieCtrlRegs.PIEACK.ALL = PIEACK_group6;
}