主题中讨论的其他器件:AWR1843
您好!
为了通过 UART 从 AWR1843传输立方体数据、我遵循以下链接中的建议:
e2e.ti.com/.../iwr6843isk-ods-firmware-modification-pointers-to-send-a-part-of-1d-fft-data-over-to-the-serial-port
我在 MSS_main.c 中修改了函数静态 void MmwDemo_TransourceProcessedOutput、如下所示:
静态 void MmwDemo_TransourceProcessedOutput
(
UART_Handle uartHandle、
DPC_5.45V Detection_Execute *结果,
MmwDemo_output_message_stats * timingInfo
)
{
MmwDemo_output_message_header 标题;
/Mmw Demo_Gui S451el *pGuiMonSel;
Demo_Sub * subFrameCfg * subFrameCfg;
uint32_t tlvIdx = 0;
//uint32_t index;
uint32_t numPaddingBytes;
uint32_t packetLen;
uint8_t 边界填充[MMWDEMO_OUTPUT_MSG_SEGMENT_LEN];
MmwDemo_output_message_tl [MMWDEMO_OUTPUT_MSG_MAX];
int32_t 错误代码;
uint16_t * detMatrix =(uint16_t *) result -> detMatrix.data;
DPIF_PointCloudCartesian * objOut;
//cmplx16ImRe_t *azimuthStaticHeatMap;
DPIF_PointCloudSideInfo * objOutSideInfo;
DPC_S Detection_Stats *统计数据;
/*获取子帧配置*/
//subFrameCfg =&gMmwMssMCB.subFrameCfg[result->subFrameIdx];Ramin
/*获取 GUI 监视器配置*/
//pGuiMonSel =&subFrameCfg->guiMonSel;Ramin
/*清除消息标题*/
memset ((void *)&header、0、sizeof (MmwDemo_output_message_header);
/
发送已启用的数据、因为处理结果来自 DSP、
需要对缓冲指针进行地址转换
* /
{
detMatrix =(uint16_t *) SOC_translateAddress ((uint32_t) detMatrix、
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) detMatrix!= SOC_TRANSLATEADDR_INVALID);
objOut =(DPIF_PointCloudCartesian *) SOC_translateAddress ((uint32_t) Result->objOut、
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) objOut!= SOC_TRANSLATEADDR_INVALID);
objOutSideInfo =(DPIF_PointCloudSideInfo *) SOC_translateAddress ((uint32_t) Result->objOutSideInfo、
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) objOutSideInfo!= SOC_TRANSLATEADDR_INVALID);
stats =(DPC_Collection* Detection_Stats ) SOC_translateAddress( uint32_t ) result->stats,
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) stats!= SOC_TRANSLATEADDR_INVALID);
Result->radarCube.data =(void *) SOC_translateAddress (uint32_t) Result->radarCube.data,
SoC_Translate Addr_Dir_ ROM_OTHER_CPU,
错误代码(&ER);
DebugP_assert ((uint32_t) result->radarCube .data!= SOC_TRANSLATEADDR_INVALID);
}
////////////////
/*标题:*/
header.platform = 0xA1843;
header.magicWord[0]= 0x0102;
header.magicWord[1]= 0x0304;
header.magicWord[2]= 0x0506;
header.magicWord[3]= 0x0708;
header.numDetectedObj = result->numObjOut;
header.version = MMWAVE_SDK_VERSION_BUILD |
(MMWAVE_SDK_VERSION_BUGFIX << 8)|
(MMWAVE_SDK_VERSION_MINOR << 16)|
(MMWAVE_SDK_VERSION_MAJOR << 24);
packetLen = sizeof (MmwDemo_output_message_header);
// Ramin 添加
if (result->radarCube。data)
{
TL[tlvIdx].type = 2;
tl[tlvIdx].length = result->radarCube。dataSize;
packetLen += sizeof (MmwDemo_output_message_tl)+ tl[tlvIdx].length;
tlvIdx++;
}
header.numTLV = tlvIdx;
/*将数据包长度取整为 MMWDEMO_OUTPUT_MSG_SEGM_LEN 的倍数*/
header.totalPacketLen = MMWDEMO_OUTPUT_MSG_SEGM_LEN *
((packetLen +(MMWDEMO_OUTPUT_MSG_SEGM_LEN-1))/MMWDEMO_OUTPUT_MSG_SEGM_LEN);
header.timeCpuCycles = PMU_getCount (0);
header.frameNumber = stats->frameStartIntCounter;
header.subFrameNumber = Result->subFrameIdx;
UART_writePolling (uartHandle、
(uint8_t*)&HEADER,
sizeof (MmwDemo_output_message_header);
tlvIdx = 0;
// Ramin 添加
if (result->radarCube。data)
{
uart_writePolling (uartHandle、(uint8_t*)&Result->radarCube .data、Result->radarCube .dataSize);
}
/*发送填充字节*/
numPaddingBytes = MMWDEMO_OUTPUT_MSG_SEGM_LEN -(packetLen &(MMWDEMO_OUTPUT_MSG_SEGM_LEN-1));
if (numPaddingBytes<MMWDEMO_OUTPUT_MSG_SEGMENT_LEN)
{
UART_writePolling (uartHandle、
(uint8_t*)填充、
NumPaddingBytes);
}
}
但是在运行 I gut 后、以下错误:
Thschoclia Type_Task 发生异常。
任务句柄:0x80032c8。
任务堆栈基地址:0x8003328。
任务堆栈大小:0x1000。
R0 = 0x52088000 R8 = 0x0800d530
R1 = 0x0800d268 R9 = 0x0800b340
R2 = 0x00000008 R10 = 0x52080000
R3 = 0x00000001 R11=0x00000001
R4 = 0xFFF7e700 R12 = 0x00003394
R5 = 0x08001938 SP (R13)= 0x08003d38
R6 = 0x00000014 LR (R14)= 0x00016f71
R7 = 0x52080014 PC (R15)= 0x0001909c
PSR = 0x800c019f
DFSR = 0x0000000d IFSR = 0x00000000
DFAR = 0x52088000 IFAR = 0x00000000
{MODUL#43}:第205行:错误{id:0x1a0000、args:[0x1909c、0x16f71]}
xdc.runtime.Error.raise:正在终止执行
错误出现在以下行中:/uart_writePolling (uartHandle、(uint8_t*)&result->radarCube .data、result->radarCube .dataSize);
但是、当我将传输大小减小到8192 (pow (2、13)或更小、如下所示时、没有问题:
uart_writePolling (uartHandle、(uint8_t*)&Result->radarCube。data、pow (2、13);
我想 UART_writePolling 的最大传输存在限制、我不知道这一点。
我很高兴你能帮助我解决上述问题。