Lin通讯设置-F28035

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EALLOW;
LinaRegs.SCICLEARINT.bit.CLRTXINT =1;//关中断
EDIS;
}
}
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
}
//LinaRegs.IODFTCTRL.bit.IODFTENA = 0x0;
//设置数据格式
LinaRegs.SCIFORMAT.bit.CHAR = 7;//Eight bits
LinaRegs.SCຫໍສະໝຸດ FORMAT.bit.LENGTH = 0; //ONE bytes
//设置波特率
LinaRegs.BRSR.bit.SCI_LIN_PSL = 96;//19.2 kbps for SYSCLKOUT = 60 MHz
{
if(TransmitBytes>OutputPointer)
{
if(OutputPointer==0)
{
OutputPointer++;
}
LinaRegs.SCITD =OutputBuffer[OutputPointer];
OutputPointer++;
EALLOW;
LinaRegs.SCICLEARINT.bit.CLRTXINT =1;//关中断
LinaRegs.SCIGCR1.bit.TIMINGMODE = 1;//Asynchronous Timing(异步)
LinaRegs.SCIGCR1.bit.PARITYENA = 0;//No Parity Check(无校验)
LinaRegs.SCIGCR1.bit.PARITY = 0;//Odd Parity(奇校验)
GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 3;
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 2;
2、对应LIN配置
EALLOW;
LinaRegs.SCIGCR0.bit.RESET = 0;//Into reset(复位)
LinaRegs.SCIGCR1.bit.SLEEP = 0;//Ensure Out of Sleep
LinaRegs.SCIGCR1.bit.MBUFMODE = 0;//Buffered Mode(缓存模式)
//LinaRegs.SCIGCR1.bit.LOOPBACK = 1;//Internal Loopback
LinaRegs.BRSR.bit.M = 11;
//中断使能
LinaRegs.SCISETINT.bit.SETRXINT = 1; //Enable RX interrupt
LinaRegs.SCISETINT.bit.SETTXINT = 1;
//设置中断线
LinaRegs.SCISETINTLVL.bit.SETRXINTOVO =0;//接收在LEVEL0
EDIS;
EALLOW;
LinaRegs.SCISETINT.bit.SETTXINT = 1;//开中断
EDIS;
while(LinaRegs.SCIFLR.bit.TXEMPTY == 0);
while(LinaRegs.SCIFLR.bit.TXRDY == 0);
}
else
{
OutputPointer =0;
一、设置对应的Lin配置
本例以F28035芯片的GPIO9和GPIO11为实例
1、配置IO功能
GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 3;
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 2;
LinaRegs.SCISETINTLVL.bit.SETTXINTLVL =1;//发送在LEVEL1
LinaRegs.SCIGCR1.bit.SWnRST = 1; //bring out of software reset
//Disable write to protected registers
}
}
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
}
//发送中断程序(中断线1)
void LIN1INTA_ISR (void)//LIN
{
Uint16 LinL1IntVect;
LinL1IntVect =LinaRegs.SCIINTVECT1.all;
if(LinL1IntVect == 12)
{//接收到数据
if(InputPointer_test<=35)
{
temp =(LinaRegs.SCIRD&0x00ff);
InputBuffer[InputPointer_test]=temp;
InputPointer_test++;
}
else
{
InputPointer_test=0;
temp=LinaRegs.SCIRD;
三、源代码
//接收中断程序(中断线0)
interrupt void LIN0INTA_ISR(void) // LIN
{
Uint16 LinL0IntVect,temp;
LinL0IntVect =LinaRegs.SCIINTVECT0.all;
if(LinL0IntVect ==11)//值为11时代表有数据接收到
LinaRegs.SCIGCR1.bit.STOP = 1;//TWO Stop Bit(2个停止位)
LinaRegs.SCIGCR1.bit.CLK_MASTER = 1;//Enable SCI Clock(SCI时钟)
LinaRegs.SCIGCR1.bit.LINMODE = 0;//SCI Mode(SCI模式)
LinaRegs.SCIGCR0.bit.RESET = 1;//Out of reset(关复位)
LinaRegs.SCIGCR1.bit.SWnRST = 0;//Into software reset(LIN准备好)
//LIN配置
MMODE = 0;//Idle-Line Mode
EDIS;
3、使能LIN-SIC时钟
DSP2803x_SysCtrl.c文件中的函数InitPeripheralClocks()添加:
SysCtrlRegs.PCLKCR0.bit.LINAENCLK = 1;使能LIN时钟
二、开启对应的中断程序
可以在DSP28035芯片资料tms320f28035.pdf的vector table mapping中查找到对应的中断号。故在DSP2803x_PieVect.c源文件程序中对于的const struct PIE_VECT_TABLE PieVectTableInit中的Group 9 PIE Vectors中添加LIN0INTA_ISR、LIN1INTA_ISR。
//LinaRegs.SCIGCR1.bit.CONT = 1;//Continue on Suspend
LinaRegs.SCIGCR1.bit.RXENA = 1;//Enable RX(使能接收)
LinaRegs.SCIGCR1.bit.TXENA = 1;//Enable TX(使能发送)
//Ensure IODFT is disabled
相关文档
最新文档