毫米波雷达(AWR1864)-MSS中main函数解读
提示:本文所有资料在mmwave_sdk_3.2的文件夹中可以找到,这个资料非常关键,里面有具体的毫米波雷达的功能架构。
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
上次我已经用CSS成功调试了autoparking的代码,我这次主要目的是对MSS的main进行解读。
如何找到当初调试好的main函数?
可以在CSS设置的工作文件夹找到,地址是:
工作文件夹\pa_18xx_mss\mss_main.c
一、mmwave_sdk_module_documentation文档
这个文档十分关键,里面有毫米波雷达的功能架构图和驱动函数的介绍,阅读源码时需要非常频繁的查看。
文件地址
mmwave_sdk_3.2文件\mmwave_sdk_03_02_01_02\docs
点击该文档,可以在浏览器中查看。
由于我使用的雷达型号是AWR1864,所以点击xwr18xx mmw Demo。
二、雷达的基础知识
1.BSS MSS DSS
可以在上面所述的xwr18xx mmw Demo找到相关描述。
定义:
MSS:主子系统(Master Sub-System)里面包括了射频处理系统
DSS:数字信号处理子系统(DSP Sub-System)
BSS: 雷达前端(mmWave Front End)
三、系统执行流程
官方的系统执行流程图如下:
我在本文中主要讲述MSS中的main函数,即:
四、代码解读
1、找到main函数
因为连接雷达比较麻烦,所以我这里用vs code打开。
用快捷键Ctrl+F,输入main,找到第12个main字符出现处,即是Mss的main函数。
2、代码
1、变量定义(在注释里给出含义)
Task_Params taskParams;%任务参数
int32_t errCode;%错误代码
SOC_Cfg socCfg;%配置
2、ESM驱动
/* Initialize the ESM: Dont clear errors as TI RTOS does it */
ESM_init(0U);
这时候我需要打开一开始说的mmwave_sdk_module_documentation文档,在Drivers找到esm文档
文中描述:
功能:
ESM驱动程序提供API来配置和处理来自ESM H/W模块的错误。
使用ESM_init初始化ESM驱动程序。如果不调用此API,任何ESM API都无法使用。
注意:如果您使用TI RTOS,则ESM错误将在进入main之前清除,该标志可设置为0。对于任何其他RTO,请检查RTO实现的状态,或将此标志设置为1。
所以我们需要调用该函数:
源码中的0U的U表示无符号数的意思。
3、初始化全局变量
memset ((void*)&gMrrMSSMCB, 0, sizeof(Mrr_MSS_MCB));
4、初始化SOC配置
memset ((void *)&socCfg, 0, sizeof(SOC_Cfg));
5、填充SOC配置(配置系统时钟)
socCfg.clockCfg = SOC_SysClock_INIT
6、初始化SOC
gMrrMSSMCB.socHandle = SOC_init (&socCfg, &errCode);
if (gMrrMSSMCB.socHandle == NULL)
{
System_printf ("Error: SOC Module Initialization failed [Error code %d]\n", errCode);
return -1;
}
这时我需要找到SOC_init函数的定义
文档路径:
功能描述:
该功能用于初始化和设置SOC驱动程序。如果系统时钟配置已初始化,则该功能将解除BSS的锁定,并等待APLL校准完成。
在文档中可以找到:
if语句判断返回值是否为NULL,如果为NULL,则说明初始化失败。
7、判断是否为安全设备
if (SOC_isSecureDevice(gMrrMSSMCB.socHandle, &errCode))
{
/* Disable firewall for JTAG and LOGGER (UART) which is needed by the demo */
SOC_controlSecureFirewall(gMrrMSSMCB.socHandle,
(uint32_t)(SOC_SECURE_FIREWALL_JTAG | SOC_SECURE_FIREWALL_LOGGER),
SOC_SECURE_FIREWALL_DISABLE,
&errCode);
}
这里我们看到了两个函数:
1、SOC_isSecureDevice
设备安全则返回1,进入下一个语句
2、SOC_controlSecureFirewall
同样找到文档:
函数功能:此函数用于启用/禁用指定模块的安全防火墙。仅当设备是安全设备时,才应调用此函数。
8、初始化任务参数
Task_Params_init(&taskParams);
taskParams.priority = 3;%设置优先级
Task_create(MRR_MSS_initTask, &taskParams, NULL);%调用MRR_MSS_initTask函数
该函数片段位于该源码中
该函数主要功能则是初始化串口设置
9、启动设备
BIOS_start();
return 0;
总结
目的总结
这是我一开始截取的系统流程图的一部分,可以看到main源码主要进行了SOC的初始化,然后创立了一个任务,里面再进行驱动的初始化和调用。
研究方法
对源码的研究,就是寻找里面一些内置函数的文档,如果函数是在程序中定义而不是调用,则返回源码中寻找。
难点
源码十分繁杂,如果直接一行行去看,很容易在里面迷失,所以我们需要找到系统的架构图(在前文中已经贴了出来),在里面一点点找到线头,然后根据文档一一对应函数的功能,这样比较容易理解。
未来
接下来我会继续根据系统流程图一点点更新下去,主要看我是否有时间…