This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2800157:我们无法在 LIN 从驱动器(C2000 F280015x 控制卡)上获取 RX 中断

Guru**** 1492485 points
Other Parts Discussed in Thread: TLIN2029EVM, TMDSHSECDOCK, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1330736/tms320f2800157-we-are-unable-to-get-the-rx-interrupt-on-lin-slave-driver-c2000-f280015x-control-card

器件型号:TMS320F2800157
主题中讨论的其他器件:TLIN2029EVMTMDSHSECDOCKSysConfig

我们正在测试 LIN 从设备驱动程序、 当我们从独木舟传输数据时、无法在 F280015x 控制卡上获取 RX 中断。

请查看下面的图片( F280015x_ Control_Card_Switch_Configuration )包含控制卡及开关位置,

  • S2:一个开关被按下。
  • S1:A 位置2开关被按下。


请查找有关硬件连接的详细信息:


我们使用 LIN 收发器(TLIN2029EVM)在具有 C2000 F280015x 控制卡的 TMDSHSECDOCK 控制卡集线站[修订版 F]与 LIN 主站(我们将 Canoe 接口用于 LIN 主站)之间建立通信。

我们已将 LIN 收发器 RX 引脚连接至 TMDSHSECDOCK 控制卡集线站[Rev F] RX 引脚、即集线站上的引脚编号90 (GPIO35)和 Tx 引脚编号85 (GPIO32)以及 LIN 收发器 EN 引脚编号88 (GPIO37)

请查看以下 LIN 初始化 API 伪代码说明、以便在从模式下配置 LIN。  

void LINDrv_Init(void)
{
	/* Initialize LIN state to IDLE. */
	g_LIN_State = LIN_STATE_IDLE;
	
	/* Enable LIN peripheral Module Clock */
	SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_LINA);

    EALLOW;

    /* Set the Interrupt Handler */
    Interrupt_register(INT_LINA_0, &LINDrv_IntLevel0Handle);

    /* LIN Tx GPIO Configuration */
    GPIO_setPinConfig(GPIO_32_LINA_TX);
	
    /* Set the direction */
    GPIO_setDirectionMode(LIN_TX_GPIO_PIN,GPIO_DIR_MODE_OUT);

    /* Configure the Pin as PushPull */
    GPIO_setPadConfig(LIN_TX_GPIO_PIN,GPIO_PIN_TYPE_STD);

    /* LIN Rx GPIO Configuration */
    GPIO_setPinConfig(GPIO_35_LINA_RX);
    /* Set the direction */
    GPIO_setDirectionMode(LIN_RX_GPIO_PIN,GPIO_DIR_MODE_IN);

    /* Configure the Pin as PushPull */
    GPIO_setPadConfig(LIN_RX_GPIO_PIN,GPIO_PIN_TYPE_STD);

	/* Reset the Module */
	LIN_REG_SCIGCR0 |= LIN_SCIGCR0_RESET; 
	
	/* Reset the Software Reset Bit */
	LIN_REG_SCIGCR1 &= ~(LIN_SCIGCR1_SWNRST);
	
	/* Configure the LINRx and LINTx Pin */
	LIN_REG_SCIPIO0 |= (LIN_SCIPIO0_RXFUNC | LIN_SCIPIO0_TXFUNC);
	
    /* Select LIN Mode */
    LIN_REG_SCIGCR1 |= LIN_SCIGCR1_LINMODE;

	/* Configure the LIN Module in Slave mode */
	LIN_REG_SCIGCR1 |= (LIN_REG_SCIGCR1 & ~(LIN_SCIGCR1_CLK_MASTER));

	/* Disable the ID4/ID5 bits for length control*/
	LIN_REG_SCIGCR1 |= (LIN_REG_SCIGCR1 & ~(LIN_SCIGCR1_TIMINGMODE | LIN_SCIGCR1_COMMMODE));
	
	/* Debug mode */
	LIN_REG_SCIGCR1 |= (LIN_REG_SCIGCR1 & (~(LIN_SCIGCR1_CONT)));
	
	/* Configure the Parity */
	LIN_REG_SCIGCR1 |= LIN_SCIGCR1_PARITYENA;

    /* Configure the max Response Length */
    LIN_REG_SCIFORMAT |= ((((uint32_t)MAXLENGTH - (uint32_t)LIN_CONST_NO_ONE) << \
                                                    LIN_SCIFORMAT_LENGTH_S));

    /* Checksum Type Selection */
#if(LIN_CHECKSUM_TYPE == LIN_ENHANCEMENT_CHECKSUM_TYPE)
    {
        /* Configure the Enhancement type checksum */
        LIN_REG_SCIGCR1 |= LIN_SCIGCR1_CTYPE;
    }
#else
    {
        /* Configure the Classic type checksum */
        LIN_REG_SCIGCR1 |= (LIN_REG_SCIGCR1 & (~(LIN_SCIGCR1_CTYPE)));
    }
#endif
    /* Trigger Checksum Compare */
    LIN_REG_SCIGCR2 |= LIN_SCIGCR2_CC;

    /* Send CheckSum */
    LIN_REG_SCIGCR2 |= LIN_SCIGCR2_SC;

    /* Disable Auto BaudRate */
    LIN_REG_SCIGCR1 |= (LIN_REG_SCIGCR1 & (~LIN_SCIGCR1_ADAPT));

	/* Select Multi-buffer */
	LIN_REG_SCIGCR1 |= LIN_SCIGCR1_MBUFMODE;


	/* Disable LOOP-BACK Mode */
	LIN_REG_SCIGCR1 |= (LIN_REG_SCIGCR1 &~(LIN_SCIGCR1_LOOPBACK));

	/* Disable External Loop back mode */
	LIN_REG_IODFTCTRL &= ~(LIN_IODFTCTRL_IODFTENA_M |LIN_IODFTCTRL_LPBENA |
	                       LIN_IODFTCTRL_RXPENA);

	/* Synch break and synch delimiter additional bits */
	LIN_REG_COMP |= (LIN_SYNCH_BREAK_LEN | ((LIN_SYNCH_DELIMITER_LEN - 1U) << LIN_COMP_SDEL_S));

	/* Configure the BaudRate */
	LINDrv_SetBuadRate();

	/* Configure message filtering */
#if(LIN_HGENCTRL_TYPE == LIN_CONST_NO_ONE)
    {
	    /* Configure the Slave ID for message filtering */
	    LIN_REG_SCIGCR1 |= LIN_SCIGCR1_HGENCTRL;

	    /* Configure the Filter Compare Slave task ID byte*/
	    LIN_REG_ID |= (uint32_t)LIN_SLAVETASKIDBYTE << LIN_CONST_NO_EIGHT;

	    /* Configure the Rx Filter Mask */
	    LIN_REG_MASK |= ((uint32_t)LIN_RXMESSAGEID_FILTERMASK << LIN_CONST_NO_SIXTEEN);

	    /* Configure the Tx Filter Mask */
	    LIN_REG_MASK |= (uint32_t)LIN_TXMESSAGEID_FILTERMASK;
    }
#else
    {
        /* Configure the ID for message filtering */
        LIN_REG_SCIGCR1 |= (LIN_REG_SCIGCR1 & (~(LIN_SCIGCR1_HGENCTRL)));

        /* Configure the Filter Compare ID byte*/
        LIN_REG_ID |= (uint32_t)LIN_SLAVETASKIDBYTE;

        /* Configure the Rx Filter Mask */
        LIN_REG_MASK |= ((uint32_t)LIN_RXMSGID_FILTERMSK_ZERO << LIN_CONST_NO_SIXTEEN);

        /* Configure the Tx Filter Mask */
        LIN_REG_MASK |= (uint32_t)LIN_TXMSGID_FILTERMSK_ZERO;
    }
#endif

	/* Enable the Transmit */
	LIN_REG_SCIGCR1 |= LIN_SCIGCR1_TXENA;
	
	/* Enable the Receive */
	LIN_REG_SCIGCR1 |= LIN_SCIGCR1_RXENA;
	
    /* Reset the Software Reset Bit */
    LIN_REG_SCIGCR1 |= (LIN_SCIGCR1_SWNRST);

    EDIS;

	/* Enable Interrupt - Bit Error Interrupt, Physical Bus Error interrupt,
	 *                    Checksum Error Interrupt,  Sync Frame Error Interrupt,
	 *                    No Response Error Interrupt, Frame Error Interrupt,
	 *                    Over run Interrupt,  Parity Error Interrupt,
	                      ID Interrupt ,Timeout after Wake-up Signal Interrupt,
	                      Timeout after Three Wake-up Signal Interrupt  */
	LIN_REG_SCISETINT = ( LIN_SCISETINT_SETBEINT | LIN_SCISETINT_SETPBEINT | \
	                       LIN_SCISETINT_SETCEINT | LIN_SCISETINT_SETISFEINT | \
	                       LIN_SCISETINT_SETNREINT | LIN_SCISETINT_SETFEINT | \
	                       LIN_SCISETINT_SETOEINT | LIN_SCISETINT_SETPEINT | \
	                       LIN_SCISETINT_SETIDINT | LIN_SCISETINT_SETTIMEOUTINT |
	                       LIN_SCISETINT_SETTOA3WUSINT | LIN_SCISETINT_SETTOAWUSINT);

	/* Set Interrupt Level 0 */
	 LIN_REG_SCICLEARINTLVL = ( LIN_SCISETINT_SETBEINT | LIN_SCISETINT_SETPBEINT | \
                             LIN_SCISETINT_SETCEINT | LIN_SCISETINT_SETISFEINT | \
                             LIN_SCISETINT_SETNREINT | LIN_SCISETINT_SETFEINT | \
                             LIN_SCISETINT_SETOEINT | LIN_SCISETINT_SETPEINT | \
                             LIN_SCISETINT_SETIDINT | LIN_SCISETINT_SETTIMEOUTINT |
                             LIN_SCISETINT_SETTOA3WUSINT | LIN_SCISETINT_SETTOAWUSINT);

    /* Enable Global Interrupt */
    LIN_REG_GLB_INT_EN |= LIN_GLB_INT_EN_GLBINT0_EN << LIN_LINE0_INTERRUPT;

    /* Clear the Global Interrupt Status */
    LIN_REG_GLB_INT_FLG |= LIN_GLB_INT_CLR_INT0_FLG_CLR << LIN_LINE0_INTERRUPT;

    /* Enable Interrupts */
    Interrupt_enable(INT_LINA_0);

    /* No Error */
    g_LIN_ErrVal = LIN_NOERR;
}

如果需要更改扩展坞或控制卡上的任何配置引脚、请告知我们。

提前感谢。

此致、

迪内什·雷迪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dinesh:

    以下是一些检查/尝试的内容:

    1.以此确保、您是否调用 EINT;以便在代码中的其他位置全局启用中断? 要使任何中断正常工作、就需要包含此函数。

    2.在没有从模式并且没有连接到任何其他设备的情况下尝试。 看看 TX 引脚是否可以作为主器件传输消息报头。 如果在确定 TX 引脚范围时看到标头字段、则至少已正确配置所选的 LIN 模块并且硬件输出良好。

    3、接下来通过在 C2000器件接收数据时获取其 RX 引脚的示波器捕获、查看器件的 RX 引脚是否正在从主器件接收有效数据。 请确保我们可以使用捕获通过数据确定位的宽度、从而确保波特率正确。

    此致、

    德拉尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Delaney:

    感谢您的回复、请查看我们根据您的建议尝试过的以下要点、

    1. 是的, 我们的工作区已启用 EINT。 请查看以下图片,以供参考。

    2.我们尝试了 LIN 作为主模式,并 将数据发送到 Tx 引脚,但 TX 引脚上仍然没有数据(已通过逻辑分析仪验证)。

    3.我们用示波器检查并观察到1V,请找到下图供您参考。

    注意:我们尝试了使用 LIN 示例、但 Tx 和 Rx 引脚中仍然没有数据

    您能否说明 code composer "SYSCFG"和 TMDSHSECDOCK (F2800157SPN_Schematic)的 LIN Tx 和 Rx 引脚的确切配置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dinesh:

    以下控制卡集线站引脚应用于收发器与集线站的物理连接。

    LINA_RX = GPIO35 = TMDSHSECDOCK 引脚90  

    LINA_TX = GPIO37 = TMDSHSECDOCK 引脚88

    SysConfig 选择应如下所示:

    要在 CSS SysConfig 中查看集线站(标记为(标题))的接头引脚、请点击右上角的三个点[更多视图]>>首选项和操作>>开关>>板、然后从下拉列表中选择正在使用的板。

    此致、

    德拉尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Delaney:

    我们已 根据您的建议尝试了 SysConfig 中的外设和引脚配置、但在配置时收到以下错误。

    这是我们选择开关板设置的方式、请找到以下快照供您参考、让我知道它是否纠正。

    谢谢。

    Dinesh Reddy。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dinesh:

    您可以尝试以下操作吗:

    1.以文本形式打开.syscfg 文件(右键点击.syscfg 文件>> Open with >> Generic Text Editor)

    2.删除所有$ASSIGN 行,如下所示。

    3.保存并关闭 SysConfig 文本文件、然后关闭 SysConfig GUI。

    4.重新打开 SysConfig GUI 并再次尝试选择引脚。

    如果这样不能解决问题、请共享您的 SysConfig 文本文件、我可以来看一下。

    此致、

    德拉尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Delaney:

    我们尝试根据您的建议仍然得到相同的错误。

    注意:我无法在此主题中上传 SYSCFG 文件。 请告知我们发送文件的替代方法。

    谢谢。

    迪内什·雷迪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dinesh:

    您正在使用什么版本的 SysConfig 安装?

    此致、

    德拉尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Delaney:

    我们已安装版本1.19.0.3426、请找到以下快照以供参考。

    谢谢。

    Dinesh Reddy。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dinesh:

    我能够使用 CCS 中相同的 SysConfig 版本和配置复制此问题。 在选择板时、SysConfig 生成的代码似乎存在问题。  我会咨询其他专家、了解为什么会发生这种情况、并看看是否需要在最后修复。

    不过、当未选择板时、会生成不同的代码(如下所示)、并且不会导致相同的构建错误。 您能否尝试使用 GPIO35和 GPIO37配置 SysConfig 不带 选择 F280015控制卡、看看是否收到相同的构建错误? 集线站引脚90和88无论如何都可以正常工作、只是它们不会显示在 GUI 中。

    此致、

    德拉尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dinesh:

    在与其他专家交谈后,我相信我找到了原因。 将板添加到 SysConfig 时、需要取消选中"Lock Resource Allocation"以避免这些构建错误。

    请告诉我、这是否可以为您解决该问题、或者您还有其他问题。

    此致、

    德拉尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../SysCfgFile.txte2e.ti.com/.../workspace_5F00_v12-_2D00_-lin_5F00_ex1_5F00_loopback_5F00_interrupts_5F00_c2000.syscfg-_2D00_-Code-Composer-Studio-2024_2D00_03_2D00_11-11_2D00_30_2D00_51.mp4

    尊敬的 Delaney:

    禁用"Lock Resource Allocation"未解决错误。 我已经附上了 SYSCFG 文件和一个屏幕记录、显示试图在"lin_ex1_loopback_interrupts"工作区中取消选中以供参考。

    谢谢。

    Dinesh Reddy。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dinesh:

    很抱歉没有解决这个问题。 你能否尝试执行本 线程中的步骤 、从项目属性中删除当前器件、然后尝试添加板? 如果 仍在工程属性中设置了旧器件、则可能会覆盖 SysConfig 中的电路板设置。 这可能是您看到生成错误的原因。

    此致、

    德拉尼