毫米波雷达(AWR1864)-MSS中main函数解读

毫米波雷达(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的初始化,然后创立了一个任务,里面再进行驱动的初始化和调用。

研究方法

对源码的研究,就是寻找里面一些内置函数的文档,如果函数是在程序中定义而不是调用,则返回源码中寻找。

难点

源码十分繁杂,如果直接一行行去看,很容易在里面迷失,所以我们需要找到系统的架构图(在前文中已经贴了出来),在里面一点点找到线头,然后根据文档一一对应函数的功能,这样比较容易理解。

未来

接下来我会继续根据系统流程图一点点更新下去,主要看我是否有时间…

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RDZhang666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值