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.
工具与软件:
在中断模式下在 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 的以太网示例:
请参阅上面的链接以查找示例链接、从而下载并集成到工程中。
此外、您还可以在下面的常见问题解答中找到一些示例:
——
谢谢、此致、
Jagadish。