TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS570LC4357: LIN master与slave通信

Part Number:TMS570LC4357Other Parts Discussed in Thread:HALCOGEN,

本人想要测试lin的master和slave之间的通信:

lin1配置为master,lin2配置为slave,其余配置相同,lin1的tx与lin2的rx对接,lin1的rx与lin2的tx对接,在lin2接受到ID后,lin2发送数据作为responce,请问这样是否可以测试master与slave之间的通信?若不能应该怎样进行连线测试该模式?

Ben Qin:

你好,我认为这样连线是可以的。

,

li xx:

f感谢回复!

但是这样连接后,由master发送帧头,slave产生id中断后,发送数据做为帧头的应答,slave的FLG reg的BE、NRE,TIMEOUT置位,且lin1的rx端没有接受到数据。这个是什么原因导致的呢?

,

Ben Qin:

你的程序有参考这个例程吗?

C:\ti\Hercules\HALCoGen\v04.07.01\examples\TMS570LC43x

可以确定软件上的配置是没问题的吗?

li xx said:由master发送帧头,slave产生id中断后,发送数据做为帧头的应答,

你是说master发送的slave可以,slave发送到master不行是吗?

,

li xx:

例程里面是自发自收的例子,例程功能测试正常;

初始化代码:

void linInit(void){ linREG1->GCR0 = 1U; linREG1->GCR1 = 0U; linREG1->GCR1 = 0x40U; linREG1->GCR1|= 0x03000C40U | (uint32)((uint32)1U << 12U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)1U << 5U);  //master mode linREG1->MBRSR = (uint32)3370U; linREG1->BRS = (uint32)233U; linREG1->MASK = ((uint32)((uint32)0xFFU << 16U) | (uint32)0xFFU); linREG1->COMP = ((uint32)((uint32)(1U – 1U) << 8U) | ((uint32)13U – 13U)); linREG1->FORMAT = ((linREG1->FORMAT & 0xFFF8FFFFU) | (uint32)(((uint32)4U – 1U) << 16U));

linREG1->PIO0 = ((uint32)4U | (uint32)2U | (uint32)0U); linREG1->PIO3 = ((uint32)4U | (uint32)0U | (uint32)0U); linREG1->PIO1 = ((uint32)0U | (uint32)0U | (uint32)0U); linREG1->PIO6 = ((uint32)0U | (uint32)0U | (uint32)0U); linREG1->PIO7 = ((uint32)0U | (uint32)0U | (uint32)0U); linREG1->PIO8 = ((uint32)4U | (uint32)2U | (uint32)1U);

linREG1->SETINTLVL = ((uint32)0x00000000U; linREG1->SETINT = (uint32)0x00000200U; linREG1->GCR1 |= 0x00000080U;

linREG2->GCR0 = 1U; linREG2->GCR1 = 0U; linREG2->GCR1 = 0x40U; linREG2->GCR1 |= 0x03000C40U | (uint32)((uint32)1U << 12U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 5U);  //salve mode linREG2->MBRSR = (uint32)3370U; linREG2->BRS = (uint32)233U; linREG2->MASK = ((uint32)((uint32)0xFFU << 16U) | (uint32)0xFFU); linREG2->COMP = ((uint32)((uint32)(1U – 1U) << 8U) | ((uint32)13U – 13U)); linREG2->FORMAT = ((linREG2->FORMAT & 0xFFF8FFFFU) | (uint32)(((uint32)8U – 1U) << 16U));

linREG2->PIO0 = ((uint32)4U | (uint32)2U | (uint32)0U); linREG2->PIO3 = ((uint32)0U | (uint32)0U | (uint32)0U); linREG2->PIO1 = ((uint32)0U | (uint32)0U | (uint32)0U); linREG2->PIO6 = ((uint32)0U | (uint32)0U | (uint32)0U); linREG2->PIO7 = ((uint32)0U | (uint32)0U | (uint32)0U); linREG2->PIO8 = ((uint32)4U | (uint32)2U | (uint32)1U);

linREG2->SETINTLVL = ((uint32)0x00000000U; linREG2->SETINT = ((uint32)0x00002000U;   // enable id int & rev IDint  linREG2->GCR1 |= 0x00000080U;}

测试代码

linInit(); while((!(linIsTxReady(linREG1))) || (linREG1->FLR & 0x8U == 0x8U)); linSendHeader(linREG1,0x3);  //  master send frame header 

salve接受到ID后,在中断函数中发送数据:

master发送的ID,slave 可以接受到,但是slave端数据发送不出去,示波器抓slave TX端,无数据波形输出;

master自回环和自发自收测试通过。

现在有一个疑问是:该开发板是否已经集成了收发器? 若无收发器,该测试方式肯定是有问题的。若需要收发器,应该适配那个型号的 收发器呢?

,

Ben Qin:

slave是否能自发自收?你的master和slave板子的具体型号是什么?是TI官方板还是自制板?

,

li xx:

开发版是tms570lc4357 官方板,测试过两个官方开发板对接,也测试过一个开发板的lin1和lin2 对接,分别测试master和slave端,自发自收都正常 。

,

Ben Qin:

参考下下面这篇帖子看是否有帮助:

(+) TMS570LC4357: LIN master mode – Arm-based microcontrollers forum – Arm-based microcontrollers – TI E2E support forums

,

li xx:

好的,感谢

,

Ben Qin:

不客气

赞(0)
未经允许不得转载:TI中文支持网 » TMS570LC4357: LIN master与slave通信
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1