主题中讨论的其他器件: OMAPL138、 INA219、 TPS65070
工具/软件:TI-RTOS
您好!
我必须扩展 OMAP-L138 SOC 的 C674xDSP 上的现有项目。
我的工作是在某些情况下使用片上 UART2、而不是始终使用。
UART 的激活必须在运行时完成-因此我无法通过配置工具使用 UART 通道的静态创建。
可能在系统启动后很长时间内必须创建和删除片上 UART2。
因此、我尝试从这里修改 UART 示例
...\pspdrivers_01_30_01\packages/ti\pspiom\examples\evmOMAPL138\UART\
但使用 UART 器件的动态创建而不是示例的静态创建。
我的问题是、函数 DEV_createDevice()永远不会返回 SYS_OK、但始终返回0x07 (SYS_EMODE)。
因此,用于打开 Rx 和 Tx 通道的 GIO_CREATE ()的下一步函数调用也将失败。
SOC 的 GPP 正在运行 QNX、但 GPP 未触摸 UART2。
DSP 项目使用以下软件包:
DSPBIOS 5.41.03.17
PSP 驱动程序01.30.01
OMAP-L138 DSP 封装1.00.00.08
EDMA3lld 封装01.11.00.03
是否有人审查我的代码擦除并能告诉我参数或创建序列中有什么错误?
感谢大家!
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "ti/pspiom/uart/uart.h"
#include "ti/sdo/EDMA3/drv/EDMA3_drv.h"
#include "ti/pspiom/platforms/evmOMAPL138/uart_evmInit.h"
/*
*内部参考
*
static void genericUartTest (void);
/*
*外部基准
*
extern log_Obj 跟踪;
extern EDMA3_DRV_Handle hEdma[];/* EDMA 句柄(在 EDMA 模式下需要)*
extern EDMA3_DRV_result edma3init();
typedef 结构 uart2debug_t
{
int dev_createDevice_Result;
EDMA3_DRV_RESULT edmaResult;
gio_handle gio_create_uart2rx_result;
gio_handle gio_create_uart2tx_result;
}uart2debug_t;
uart2debug_t uart2debug;
/*
* UART0器件参数。 以在 uart0_DEV_init 函数中填充、该函数
在创建驱动程序之前调用*
*
UART_Params uart2Params =
{
True、 /* cacheEnable */
True、 /* FIFO 使能 */
UART_OpMode_DMAINTERRUPT、 /* opMode *
false, /* loopbackEnabled */
UART_波特 率_115_2K、 /*波特率 *
UART_NumStopBits _1、 /* stopbits */
UART_Charlen_8、 /* charLen */
UART_Parity、 /*奇偶 校验*
UART_RxTrigLate_1、 /* rxThreshold */
{ /* fc */
UART_FcType_NONE、
UART_FcParam_none
}、
0、 /* edmaRxTC */
0、 /* edmaTxTC */
9、 /* hwiNumber *
0xFFFFFFFF、 /* polledModeTimeout *
1、 /* softTxFifoThreshold *
false, /*禁用 PSC 控制 */
驱动程序使用的 UART_pllDomain_0 /* PLL 域 *
};/* uart2Params */
/*
*正在启动消息打印字符串
*注意:只有在 DMA 模式下工作时才需要缓冲区信号。
*
#pragma DATA_ALIGN (uart2TestStringStart、128);
静态 int8 uart2TestStringStart[128];
/* Tx 内存缓冲器*/
#pragma DATA_ALIGN (Uart2_TxBuffer、128);
静态 Int8 Uart2_TxBuffer[1024];
输入通道的/* UART 句柄*/
gio_handle hUart2_in;
输出通道的/* UART 句柄*/
gio_handle hUart2_out;
/**
*\brief 初始化函数。
* 此函数用于初始化 UART 驱动程序以及所需的驱动程序
用于 创建器件的*参数。
*
*\param 无
*
*\返回 无
*
空 USER_uart2_init ()
{
uart2debug.edmaResult = 0;
if (NULL =hEdma[0])
{/*此分支从未通过... *
uart2debug.edmaResult = edma3init();
if (EDMA3_DRV_Sok!= uart2debug.edmaResult)
{
/*报告 EDMA 错误*/
log_printf (&trace,"\r\nEDMA3:edma3init()失败\r\n");
}
其他
{
log_printf (&trace,"\r\nEDMA3:edma3init()传递了\r\n");
}
}
其他
{/*此分支始终通过... *
log_printf (&trace、"\r\n EDMA3:edma3init()不需要\r\n");
}
// uart_init();
uart2Params = UART_Params;
uart2Params.hwiNumber = 9;
uart2Params.opMode = UART_OpMode_DMAINTERRUPT;
uart2Params.rxThreshold = UART_RxTrigLf_1;
uart2Params.softTxFifoThreshold = 1;
UART_INIT();
/*在 PSC 模块中启用 EDMA */
PWRM_setDependency (PWRM_rsrc_EDMA3_CC_0);
PWRM_setDependency (PWRM_rsrc_EDMA3_TC_0);
PWRM_setDependency (PWRM_rsrc_EDMA3_TC_1);
PWRM_setDependency (PWRM_rsrc_EDMA3_TC_2);
}/* USER_uart2_init()*/
DEV_Attrs uart2devattrs =
{
2、 /*.devid = UART2 */
uart2Params、 /*.params */
DEV_IOMTYPE、 /*.type */
空 /*.devp */
};/* uart2devatttrs */
静态空 UART_createdev (空)
{
memset (uart2debug、0x00、sizeof (uart2debug));
uart2debug.dev_createDevice_result =
DEV_createDevice ("/UART2"、&UART_IOMFXNS、(Fxn) USER_uart2_init、&uart2devatttres);
if (SYS_OK!= uart2debug.dev_createDevice_result)
{/* function dev_createDevice()在此处返回0x07 (可能是 SYS_EMODE?):*/
log_printf (&trace、"DEV_createDevice() failed\n");
}
其他
{/*此分支从未通过... *
log_printf (&trace、"dev_createDevice()完成了\n");
}
// if (SYS_OK = uart2debug.dev_createDevice_result)
{
Gio_Attrs gioAttrs = GIO_ATTRS;
int32 echoStatus = Tsk0;
UART_ChanParams 通道参数 ={NULL};
/*初始化通道属性。 *
gioAttrs.nPackets = 2;
chanParams.hEdma = hEdma[0];
/*初始化 pinmux 和 EVM 相关配置 */
configureUart();
/*初始化 UART 当前用于显示字符串 */
uart2debug.gio_create_uart2tx_result = hUart2_out = GIO_create ("/UART2"、IO_output、NULL、 &chanParams、&gioAttrs);
uart2debug.gio_create_uart2rx_result = hUart2_in = gio_create ("/UART2"、io_input、 &echoStatus、&TskchanParams、&gioAttrs);
if (NULL == hUart2_IN)
{/*函数 GIO_CREATE ()始终在此处返回 NULL:*
log_printf (&trace、"GIO_createDevice (Rx) failed\n");
}
其他
{/*此分支从未通过... *
log_printf (&trace、"gio_createDevice (Rx) Done (完成)\n");
}
if (NULL == hUart2_OUT)
{/*函数 GIO_CREATE ()始终在此处返回 NULL:*
log_printf (&trace、"GIO_createDevice (Tx) failed\n");
}
其他
{/*此分支从未通过... *
log_printf (&trace、"gio_createDevice (Tx) Done (GIO_createDevice (Tx)完成)");
}
if ((NULL!= hUart_in)&&(NULL!= hUart_out))
{
/*运行 UART 示例应用程序*/
genericUartTest();
/*退出 */
SYS_EXIT (0);
}
ShowmemCmdapd (THDUART2HPIMSGQDEV_ID_、(farp_t)(&uart2debug)、sizeof (uart2debug)、dchar2word ('L'、'D'));
返回;
}
}/* UART_createDEV ()*/
/**
*\brief 常规读写测试
*
* 调用此函数以测试通用 UART 测试。在此函数中
* 测试了基本的读/写功能。
*
*\param 无
*
*\返回 无
*
静态空 genericUartTest (空)
{
ptr buf =空;
INT STATUS = 0;
size_t len = 0;
INT8 * str =空;
log_printf (&trace、"正在启动 UART 示例应用\n\r");
STR ="UART 演示启动: 输入大小为1000字节的文件";
/*复制到起始字符串到缓存对齐缓冲 区*/
len = strlen (str);
memcpy (uartTestStringStart、str、len);
buf = uartTestStringStart;
状态= GIO_Submit (hUart2_out、IOM_WRITE、buf、&len、NULL);
if (!((status =IOM 完成)||(status =IOM 挂起))
{
log_printf (&trace、"\r\n UART 测试字符串的 GIO_WRITE 错误\n"\});
}
buf = UART_TxBuffer;
Len = 1000u;
状态= GIO_Submit (hUart2_IN、IOM_Read、buf、&len、NULL);
如果(!((status =IOM 已完成)||(status =IOM 挂起)))
{
log_printf (&trace、"\r\n 读取1000个字节时、GIO_Read 出错\n"\});
}
buf = UART_TxBuffer;
Len = 1000u;
状态= GIO_Submit (hUart2_out、IOM 写入、buf、len、NULL);
如果(!((status =IOM 已完成)||(status =IOM 挂起)))
{
log_printf (&trace、"\r\n 写入1000字节时、GIO_WRITE 出错\n"\});
}
log_printf (&trace、"UART 示例应用程序已完成\n\r ");
}/* genericUartTest */