Thread 中讨论的其他器件:HALCOGEN、 EK-TM4C1294XL
尊敬的所有人:
我将 TMS57004用作主器件、将 TM4C1294XL 用作从器件。我正在尝试在两者之间建立 UART 通信。我已将波特率设置为115200Hz、将停止位设置为1。我已启用时钟极性和时钟相位。我已进行以下连接。
主器件:
PD1-Tx
PD0-Rx
PD2-FSS
PD3 - CLK
从属方:
PQ2-Tx
PQ3-Rx
PQ1-FSS
PQ0- CLK
主器件代码
/**@示例 Example_sci_uart_960.c
*此示例代码配置 SCI 并传输一组字符。
* UART 接收器可用于接收此数据。
* scilin 驱动程序文件应使用解压缩设置生成。
*
*执行:
*将微控制器的 SCI 端口连接到的 COM 端口
*装有 MS Windows 的个人计算机。 配置 MS Windows
* Hytermenal 作为 COM 端口、具有以下端口设置:
*每秒位数:9600、
*数据位:8.
*奇偶校验:无
*停止位:2.
*
*
*
*@b Step @b 1:
*
*创建新项目。
*
*导航:->文件->新建->项目
*
*@image html example_createProject.JPG "图:创建新项目"
*
*@b Step @b 2:
*
*导航:-> TMS570LSxx /RM4x ->启用驱动程序
*
*配置驱动程序代码生成:
*-启用 SCILIN 驱动程序
*-禁用其他
*
*@image html sci_enabledriver.JPG "图:SCI 使能驱动程序"
*
*@b Step @b 3:
*
*配置 SCI:
*
*导航:-> TMS570LSxx /RM4x -> SCI
*
*@image html sci_uart.JPG "图:SCI 全局设置"
*
*
*@image html sci_uart1.JPG "图:SCI 数据格式"
*
*
*@b Step @b 4:
*
*单击生成代码图标。
*导航:->文件->生成代码
*
*@image html generateCode.JPG "图:单击"生成代码"
*
*@b Step @b 5:
*
*将下面的源代码复制到 sys_main.c (或)中,用此文件替换 sys_main.c。
*
*示例文件也可以在示例文件夹中找到:./HALCoGen/examples
*
*@注意 HALCoGen 在 sys_main.c 中生成一个空的主函数、
*
*
*
/*
*版权所有(C) 2009-2015 Texas Instruments Incorporated - www.ti.com
*
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
*源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
*二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随提供的文档和/或其他材料
*分发。
*
*德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者提供
*"按原样"以及任何明示或暗示的保证、包括但不包括
*仅限于对适销性和适用性的暗示保证
*一项特定目的不予承认。 在任何情况下、版权均不得
*所有者或贡献者应对任何直接、间接、偶然或
*特殊、惩戒性或后果性损害、包括但不包括
*仅限于采购替代货物或服务;丧失使用、
*数据或利润;或任何原因造成的业务中断
*责任理论、无论是合同责任、严格责任还是侵权行为
*包括因使用而以任何方式产生的疏忽或其他原因
*、即使被告知可能会发生此类损坏。
*
*
/*用户代码开始(0)*/
/*用户代码结束*/
/*包含文件*/
#include "sys_common.h"
#include "system.h"
/*用户代码开始(1)*/
#include "sci.h"
#define SIZE1 10.
uint8 text1[TMSIZEE1]={'H'、'E'、'R'、'C'、'U'、'L'、'E'、'S'、'、'、'};
#define SIZE2 18.
uint8 text2[TM'、'I'、'C'、'R'、'O'、'C'、'O'、'N'、'T'、'R'、'O'、'L'、'L'、'E'、'R'、'S'、'、'、'、'、'、'};
#define SIZE3 19.
uint8 text3[T'、'E'、'X'、'A'、'S'、'、'I'、'N'、'T'、'R'、'U'、'M'、'N'、'T'、'N'、'N'、'N'、'N'、'\n'、'、'、'r';}
void sciDisplayText (sciBASE-t * sci、uint8 *文本、uint32长度);
空等待(uint32时间);
#define UART scilinREG
/*用户代码结束*/
/**@fn void main (void)
*@应用程序主函数简介
*
*
/*用户代码开始(2)*/
/*用户代码结束*/
void main (void)
{
/*用户代码开始(3)*/
sciInit();/*初始化 sci/sci-lin */
/*偶校验,2个停止位*/
while (1)/*持续播放*/
{
sciDisplayText (UART、&text1[0]、TIZE1);//发送文本代码1
sciDisplayText (UART、&text2[0]、TIZE2);//发送文本代码2
sciDisplayText (UART、&text3[0]、TIZE3);//发送文本代码3 *
等待(200);
};
/*用户代码结束*/
}
/*用户代码开始(4)*/
void sciDisplayText (sciBASE-t * sci、uint8 *文本、uint32长度)
{
while (length---)(while (l
{
while ((UART->FLR & 0x4)== 4);//等待忙*/
sciSendByte (UART、* text++);/*发送文本*/
};
}
空等待(UINT32时间)
{
时间--;
}
/*用户代码结束*/
从器件的代码
//
//
// uart_echo.c -从中的 UART 读取数据并向其中写入数据的示例
//中断驱动方式。
//
//版权所有(c) 2013-2016 Texas Instruments Incorporated。 保留所有权利。
//软件许可协议
//
//德州仪器(TI)仅提供和使用此软件
//专门用于 TI 的微控制器产品。 该软件归其所有
// TI 和/或其供应商、受适用版权保护
//法律。 您不能将此软件与"病毒"开源软件结合使用
//软件,以便形成一个更大的程序。
//
//此软件按“原样”提供,且存在所有故障。
//不作任何明示、暗示或法定的保证,包括但
//不限于对适销性和适用性的暗示保证
//此软件的特定用途。 TI 不得以任何方式进行
//情况,对特殊、偶然或从属事件负责
//任何原因造成的损害。
//
//这是 EK-TM4C1294XL 固件包版本2.1.3.156的一部分。
//
//
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
//
//
//! \addtogroup example_list
//!
UART 回波(UART_ECHO)
//!
//! 此示例应用利用 UART 来回显文本。 第一个 UART
//! (连接到评估板上的 USB 调试虚拟串行端口)
//! 将配置为115、200波特、8-n-1模式。 接收到的所有字符
//! UART 被发送回 UART。
//
//
//
//
//系统时钟速率,单位为 Hz。
//
//
uint32_t g_ui32SysClock;
//
//
//驱动程序库遇到错误时调用的错误例程。
//
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)
{
}
#endif
//
//
// UART 中断处理程序。
//
//
无效
UARTIntHandler (空)
{
uint32_t ui32Status;
//
//获取中断状态。
//
ui32Status = ROM_UARTIntStatus (UART0_BASE、TRUE);
//
//清除已发出的中断。
//
ROM_UARTIntClear (UART0_BASE、ui32Status);
//
//在接收 FIFO 中有字符时循环。
//
while (ROM_UARTCharsAvail (UART0_BASE))
{
//
//从 UART 读取下一个字符并将其写回 UART。
//
ROM_UARTCharPutNonBlocking (UART0_BASE、
ROM_UARTCharGetNonBlocking (UART0_BASE);
//
//闪烁 LED 以显示字符传输正在发生。
//
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);
//
//延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
//
SysCtlDelay (g_ui32SysClock /(1000 * 3));
//
//关闭 LED
//
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);
}
}
//
//
//向 UART 发送字符串。
//
//
无效
UARTSend (const uint8_t * pui8缓冲器、uint32_t ui32计数)
{
//
//循环,同时有更多字符要发送。
//
while (ui32Count---)
{
//
//将下一个字符写入 UART。
//
ROM_UARTCharPutNonBlocking (UART0_BASE、* pui8Buffer++);
}
}
//
//
//此示例演示了如何将一串数据发送到 UART。
//
//
内部
main (空)
{
//
//将时钟设置为直接从频率为120MHz 的晶体运行。
//
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
//
//启用用于板载 LED 的 GPIO 端口。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
//
//为 LED (PN0)启用 GPIO 引脚。
//
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0);
//
//启用此示例使用的外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
//
//启用处理器中断。
//
ROM_IntMasterEnable();
//
//将 GPIO A0和 A1设置为 UART 引脚。
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//
//将 UART 配置为115、200、8-N-1操作。
//
ROM_UARTConfigSetExpClk (UART0_BASE、g_ui32SysClock、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//
//启用 UART 中断。
//
ROM_IntEnable (INT_UART0);
ROM_UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT);
//
//提示输入文本。
//
//UARTSend ((uint8_t *)"\033[2JEnter 文本:"、16);
//
//循环通过 UART 永久回显数据。
//
while (1)
{
}
}
传输完成时、我正在使用中断来启用从机。是否需要除前面提到的连接以外的任何其他连接来启用中断?
帮助我解决此问题。
此致、
Silpa