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.

[参考译文] TMDX570LC43HDK:在 UART2和 UART3之间建立通信时面临问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1414444/tmdx570lc43hdk-problem-facing-while-establishing-communication-between-uart2-and-uart3

器件型号:TMDX570LC43HDK
主题中讨论的其他器件:TMS570LC4357HALCOGEN

工具与软件:

在中断模式下在 SCI3和 SCI2外设之间建立通信时、我遇到了问题。 配置正确、因为代码在 TMS570LC4357评估板中正常工作。 请帮助我解决此问题。 通过观察原理图、我必须知道 相应的微控制器引脚和 IO 引脚之间没有电阻器、电容器或 IC。 下面是我的代码:

/**@文件 HL_sys_main.c
*@简要应用程序主文件
*@日期2018年12月11日
*@版本04.07.01
*
*此文件包含一个空的 main 函数,
*可用于应用程序。
*/

/*
*版权所有(C) 2009-2018德州仪器(TI)公司- www.ti.com
*
*
*以源代码和二进制形式重新分发和使用,无论有无
*修改,只要满足以下条件即可
*已满足:
*
*源代码的再分发必须保留上述版权
*通知,本条件列表及以下免责声明。
*
*二进制形式的再分发必须复制上述版权
*通知,本条件列表和以下免责声明在
*随附的文档和/或其他材料
*分发。
*
*既不是德州仪器(TI)公司的名称、也不是公司的名称
*其贡献者可用于认可或推广衍生产品
*未经事先书面许可使用本软件。
*
*本软件由版权所有者和贡献者提供
"按现状"和"按可得到"的基础提供
本站明确声明不作出任何种类的所有明示或暗示的保证
*不得使用特定目的。 在任何情况下均不得享有版权
*所有者或贡献者对任何直接的、间接的、附带的、
*特殊、示例性或后果性损害(包括但不包括
*仅限于采购替代商品或服务;不能使用,
*数据,或利润;或业务中断)然而造成和任何
*责任理论,无论是合同,严格的责任,或侵权
*(包括疏忽或其他)以任何方式产生的使用
*本软件,即使被告知此类损坏的可能性。
*
*/


/*用户代码 begin (0)*/
/*用户代码结束*/

/*包含文件*/

#include "HL_sys_common.h"


/*用户代码 begin (1)*/
#include "HL_sys_core.h"
#include "HL_system.h"
#include "HL_sci.h"
#include "HL_Gio.h"

#define UART1 (sciREG1)
#define UART2 (sciREG2)
#define UART3 (sciREG3)
#define UART4 (sciREG4)
/*用户代码结束*/

/**@fn void main (void)
*@简要应用程序主函数
*@注意此函数默认为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实现应用程序。
*/

/*用户代码 begin (2)*/
uint8 u8uart1_temp = 0u;
uint8 u8uart1_buf[120]={0U};
uint8 u8uart1_buf_size = 0u;

uint8 u8uart2_temp = 0u;
uint8 u8uart2_buf[120]={0U};
uint8 u8uart2_buf_size = 0u;

uint8 u8uart3_temp = 0u;
uint8 u8uart3_buf[120]={0U};
uint8 u8uart3_buf_size = 0u;

uint8 u8uart4_temp = 0u;
uint8 u8uart4_buf[120]={0U};
uint8 u8uart4_buf_size = 0u;

void sciDisplayText (scibase_t * sci、uint8 *文本、uint32长度);
void main (void);

/*用户代码结束*/

void main (void)

/*用户代码 begin (3)*/
sciInit();
gioInit ();
_enable_irq();
_enable_interrupt_();

sciEnableNotification ((sciBASE-t *) UART1、(UINT32) SCI_RX_INT);
sciReceive ((scibase_t *) UART1、(uint8*)&u8uart1_temp);

sciEnableNotification ((sciBASE-t *) UART2、(UINT32) SCI_RX_INT);
sciReceive ((scibase_t *) UART2、1U、(uint8*)&u8uart2_temp);

sciEnableNotification ((sciBASE-t *) UART3、(UINT32) SCI_RX_INT);
sciReceive ((scibase_t *) UART3、(uint8*)&u8uart3_temp);

sciEnableNotification ((sciBASE-t *) UART4、(UINT32) SCI_RX_INT);
sciReceive ((scibase_t *) UART4、1U、(uint8*)&u8uart4_temp);


while (1)

if (u8uart1_buf_size!= 0u)

sciDisplayText ((scibase_t*)(UART1)、&u8uart1_buf[0]、u8uart1_buf_size);
u8uart1_buf_size= 0u;

uint8 arr[3]={0x01u、0x02u、0x03u};

sciDisplayText ((scibase_t*)(UART2)、&arr[3]、1U);
sciDisplayText ((scibase_t*)(UART3)、&arr[2]、1U);

}
设计

}


if (u8uart2_buf_size!= 0u)

sciDisplayText ((scibase_t*)(UART1)、&u8uart2_buf[0]、u8uart2_buf_size);
u8uart2_buf_size= 0u;
}
设计

}


if (u8uart3_buf_size!= 0u)

sciDisplayText ((scibase_t*)(UART1)、&u8uart3_buf[0]、u8uart3_buf_size);
u8uart3_buf_size= 0u;

}
设计

}

if (u8uart4_buf_size!= 0u)

sciDisplayText ((scibase_t*)(UART4)、&u8uart4_buf[0]、u8uart4_buf_size);
u8uart4_buf_size= 0u;
}
设计

}
}

/*用户代码结束*/


}


/*用户代码 begin (4)*/
void sciNotification (scibase_t * sci、uint32标志)

if ((sci =(scibase_t *) UART1))

if (u8uart1_buf_size == 120u)/*检查缓冲区是否有足够的空间来接收数据。 如果不是、则将字节偏移重新初始化为零*/

u8uart1_buf_size = 0u;
}
设计

}

sciReceive ((scibase_t *) UART1、(UINT32) 1U、(uint8 *)&u8uart1_temp);/*通过中断通过 UART 外设3接收数据*/

u8uart1_buf[u8uart1_buf_size]= u8uart1_temp;/*将接收到的数据加载到缓冲区*/

u8uart1_buf_size++;/*递增字节偏移数据以加载下一个数据*/
}
else if ((sci =(scibase_t *) UART2))

if (u8uart2_buf_size == 120u)/*检查缓冲区是否有足够的空间来接收数据。 如果不是、则将字节偏移重新初始化为零*/

u8uart2_buf_size = 0u;
}
设计

}

sciReceive ((scibase_t *) UART2、(UINT32) 1U、(uint8 *)&u8uart2_temp);/*通过中断通过 UART 外设3接收数据*/

u8uart2_buf[u8uart2_buf_size]= u8uart2_temp;/*将接收到的数据加载到缓冲区*/

u8uart2_buf_size++;/*递增字节偏移数据以加载下一个数据*/
}
else if ((sci =(scibase_t *) UART3))

if (u8uart3_buf_size == 120u)/*检查缓冲区是否有足够的空间来接收数据。 如果不是、则将字节偏移重新初始化为零*/

u8uart3_buf_size = 0u;
}
设计

}

sciReceive ((scibase_t *) UART3、(UINT32) 1U、(uint8 *)&u8uart3_temp);/*通过中断通过 UART 外设3接收数据*/

u8uart3_buf[u8uart3_buf_size]= u8uart3_temp;/*将接收到的数据加载到缓冲区*/

u8uart3_buf_size++;/*递增字节偏移数据以加载下一个数据*/
}
else if ((sci =(scibase_t *) UART4)

if (u8uart4_buf_size == 120u)/*检查缓冲区是否有足够的空间来接收数据。 如果不是、则将字节偏移重新初始化为零*/

u8uart4_buf_size = 0u;
}
设计

}

sciReceive ((scibase_t *) UART4、(UINT32) 1U、(uint8 *)&u8uart4_temp);/*通过中断通过 UART 外设4接收数据*/

u8uart4_buf[u8uart4_buf_size]= u8uart4_temp;/*将接收到的数据加载到缓冲区*/

u8uart4_buf_size++;/*递增字节偏移数据以加载下一个数据*/
}
设计

}

}

void sciDisplayText (scibase_t *sci、uint8 * text、uint32 length)/*发送 UART 数据的函数*/

while (length --)

while ((sci->Flr 和0x4u)=4U);/*等待直至占线*/
sciSendByte (sci、* text);/*发送文本*/
text++;
};
}

/*用户代码结束*/

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

    尊敬的 Uday Kiran:

    我验证了您的代码、代码的以下部分会让我感到困惑:

    请查看下面突出显示的 buf_size 变量、只有当 buf_size 变量不等于零时才发送数据、对吧?

    在哪里为该变量分配一些值? 函数中、对吧?

    但是、如何在不发送单个字节的情况下进入接收处理程序呢? 那么、这意味着这个  buf_size 变量值将始终为零、不会传输任何数据、也不会接收到正确的数据?

    所以、请您说明一下使用单变量 buf_size 来控制发送和接收、到底要做什么?

    ——
    谢谢、此致、
    Jagadish。

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

    您好,先生,感谢您关注我的问题。 我实际上使用 UART1触发 UART2和 UART3的发送和接收数据。 我将通过扩展坞灯将数据发送到 UART1 (直接连接到 USB)。 当我通过 USB 发送数据时、会调用中断并由 UART1接收数据(使 UART1_buf_size 为零)。 它将触发从 UART2到 aUART3和从 UART3到 UART2的 Tx 数据(位于超级 while 循环中)。 我使用 UART1控制 Tx。

    实际上、代码在 TMSLC4357评估板中运行良好。 但它在开发板中无法正常工作。 您能帮助我找出原因吗?

    谢谢。此致、

    Uday Kiran。

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

    尊敬的 Uday Kiran:

    您是否正在将 HDK 板上的 UART2和 UART3短路并尝试进行测试? 我是指 SCI2TX 与 SCI3RX、反之亦然?

    您能告诉我您要短路的引脚编号吗?

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Uday Kiran:

    我发现、HDK 板中的 UART2信号未按照原理图端接至任何连接器:

    P4和 T5是数据表中的 UART2信号:

    在 HDK 中、它们不会连接到下面所示的任何位置:

    我想它们为引脚提供了错误的名称、但这些是 UART2引脚。 可以看到、它们是未连接的。 那么如何将这些引脚与 UART3引脚连接?

    ——
    谢谢、此致、
    Jagadish。

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

    通过在 halcogen 中的引脚复用,我们可以解决这一问题。 这就是我将 P4和 T5连接到 UART3引脚的方法。

    谢谢。此致。

    Uday Kiran。

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

    尊敬的 Uday Kiran:

    根据数据表、这些引脚仅在 P4和 T5时可用

    现在、如果这些引脚未端接至 HDK 板上的任何连接器、如何将这些引脚与 UART3引脚连接?

    例如、P4和 T5上提供 UART2引脚

    W3和 N2上均提供 UART3引脚

    现在、如果 P4和 T5未端接至 HDK 板中的任何连接器、如何将 P4和 T5与 N2和 W3连接?

    ——
    谢谢、此致、
    Jagadish。

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

    好的、先生、

    谢谢你。

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

    我很乐意为您提供帮助!

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

    先生、您能指导我如何将以太网外设用于同一个控制器吗? 我是第一次使用以太网。 我很困惑、不知道使用哪个 API。

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

    大家好、Uday Kiran。

    我们有基于 LwIP 的以太网示例:

    6.1.项目0—Hercules 安全 MCU 文档

    请参阅上面的链接以查找示例链接、从而下载并集成到工程中。

    此外、您还可以在下面的常见问题解答中找到一些示例:

    (+)[常见问题解答] TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

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

    谢谢先生。