主题中讨论的其他器件:TMS570LC4357、 HALCOGEN
工具与软件:
在中断模式下在 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++;
};
}
/*用户代码结束*/