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.
您好!
为了通过 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 的最大传输存在限制、我不知道这一点。
我很高兴你能帮助我解决上述问题。
您好!
您在运行什么演示? 配置是否只有一帧?
如果有多个帧、则在下一个帧开始之前没有足够的时间完成 UART 传输
谢谢!
塞萨尔
您好!
谢谢你的答复。 我在中运行开箱即用演示
C:Out_Of_Box_Demo
我已将配置更改为一帧和1000ms 帧周期、如下所示:
FlushCfg
dfeDataOutputMode 1
通道配置15 5 0
adcCfg 2 1
adcbufCfg -1 0 1 1 1
低功耗0 0 0
profileCfg 0 77 7 3 39 0 0 100 1 256 7200 0 30
线性调频脉冲配置0 0 0 0 0 0 0 0 1
线性调频脉冲配置1 1 0 0 0 0 4
frameCfg 0 1 32 1 1000 1 0
guiMonitor -1 1 1 0 1
cfarCfg -1 0 2 8 4 3 0 15.0
cfarCfg -1 1 0 4 2 3 1 15.0
multiObjBeamForming -1 1 0.5
calibDcRangeSig -1 0 -5 8 256
离合器拆卸-1 0
compRangeBiasAndRxChanPhase 0.0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0
measureRangeBiasAndRxChanPhase 0 1. 0.2
aoaFovCfg -1 -90 90 -90 90
cfarFovCfg -1 0 0.25 8.64
cfarFovCfg -1 1 -10.59 10.59
已扩展 MaxVelocity -1 0
CQRxSatMonitor 0 3 11 121 0
CQSigImgMonitor 0 127 8
类比监视器0 0
lvdsStreamCfg -1 0 0 0 0
calibData 0 0 0
sensorStart
如您所见、是帧中具有32次迭代的循环。 未知的问题甚至是 、当迭代被减少时、我也会收到一个错误、例如1。
提前感谢您的帮助
此致
Ramin
您好!
有关 uart_writePolling()的一些附加信息,请参阅
谢谢!
塞萨尔
谢谢你的答复。 关于对你建议的胎面的解释和执行一些测试,因为我在 UART_writePolling()中找到了大小 的意思是缓冲区的大小而不是数据的长度。 此外、我发现 radarCube .data 不是 我想 通过 UART 输出的正确变量。
我想 为一帧中的所有接收器和线性调频脉冲发送1D 距离 FFT 输出。 它应该像多维数据集(范围 Bean 的数量、num Tx * num Rx、num chirps *循环数量)
如果您能确认是否 正确理解 UART_writePolling ()的功能 ,以及 1D Range FFT 对应的地址和变量名称,我们将不胜感激。
祝 你度过一个美好的周末
此致
Ramin
您好!
1D 距离 FFT 的地址与雷达立方体的地址
有关 UART 驱动程序的更多信息、我建议您查看相关文档、
C:\ti\mmwave_sdk_03_06_00_00-LTS \packages\ti\drivers\uart\docs\doxygen\html\index.html
谢谢!
塞萨尔
您好!
我只是看了 Doxygen。 该示例与我在 main.c 中所做的相似。 由于我是一名固件调试新手、因此非常感谢您更详细地进行说明。
您好!
请查看本视频并告诉我们、如果您有任何具体问题
谢谢!
塞萨尔
您好!
问题是、我如何修改以下命令来解决错误
uart_writePolling (uartHandle、(uint8_t*)&Result->radarCube。data、sizeof (Result->radarCube));
在解释共同的 doxigen 我找不到在上述命令和 doxigen 上提到的格式的任何区别。
我还无法解决此问题。