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:
不客气