毫米波雷达(AWR1864)-MSS和DSS的信息交流


前言

上一期我们讲述了MSS的main函数的源码,这一期我来解读一下MSS和DSS信息交流的代码


一、代码位置及Semaphore文档位置

打开mss_main.c的文件,搜索Semaphore,大概位置如下:在这里插入图片描述
这里发现Semaphore在mmWave SDK Module Documentation无法找到相关定义,于是我打算找到这个的头文件
在这里插入图片描述
我这里的方法是直接在电脑里用everything软件搜索Semaphore.h,找到类似的地址
在这里插入图片描述
这里能发现这个地址和头文件引用的地址十分相像,所以接下来我们大概率可以在这个地方附件找到相关文档。
接下来,我们就在目录中往上寻找,找到docs,点击进去,能发现一个官方文档
在这里插入图片描述
地址为:mmwave_sdk_3.2所在地址\bios_6_73_01_01\docs\Bios_APIs.html

点击进入,进行一定的索引,就能找到Semaphore相关文档。
在这里插入图片描述
成功找到。
接下来要用到的mailbox文档就在mmWave SDK Module Documentation中
在这里插入图片描述

二、代码解释

1.创建一个二进制Semaphore来处理信箱中断

    /* Create a binary semaphore which is used to handle mailbox interrupt. */
    Semaphore_Params_init(&semParams);
    semParams.mode             = Semaphore_Mode_BINARY;
    gMrrMSSMCB.mboxSemHandle = Semaphore_create(0, &semParams, NULL);

Semaphore_Params_init

函数介绍索引如下:
在这里插入图片描述
代码介绍:

Void Semaphore_Params_init(Semaphore_Params *params);
// Initialize this config-params structure with supplier-specified defaults before instance creation

Semaphore_Mode_BINARY

在这里插入图片描述
功能:These enumerations specify the type of semaphore.,指定信号量的类型为二进制

Semaphore_create(0, &semParams, NULL)

在这里插入图片描述
参数含义:

count:初始化信号量的计数值
params:每个实例配置参数,当为NULL时选择默认值
eb:错误处理块,当NULL时选择默认策略

所以这里设定初始化时的计数值为0,错误处理块为默认值。

2.Mailbox

    /* Setup the default mailbox configuration */
    Mailbox_Config_init(&mboxCfg);

    /* Setup the configuration: */
    mboxCfg.chType       = MAILBOX_CHTYPE_MULTI;
    mboxCfg.chId         = MAILBOX_CH_ID_0;
    mboxCfg.writeMode    = MAILBOX_MODE_BLOCKING;
    mboxCfg.readMode     = MAILBOX_MODE_CALLBACK;
    mboxCfg.readCallback = &MmwDemo_mboxCallback;

Mailbox初始化

在这里插入图片描述

功能:函数将Mailbox_Config结构初始化为其默认值。

初始化Mailbox虚拟通道

  /* Initialization of Mailbox Virtual Channel  */
    gMrrMSSMCB.peerMailbox = Mailbox_open(MAILBOX_TYPE_DSS, &mboxCfg, &errCode);
    if (gMrrMSSMCB.peerMailbox == NULL)
    {
        /* Error: Unable to open the mailbox */
        System_printf("Error: Unable to open the Mailbox to the DSS [Error code %d]\n", errCode);
        return;
    }

找文档流程与上文类似,接下来不再赘述。主要进行代码功能的解释。
在这里插入图片描述
功能:函数初始化邮箱驱动程序的实例。

注意:在MSS<->BSS之间,只能打开驱动程序的一个实例。
如果Mailbox为空,则会进行初始化失败的报错。

创建任务进行Mailbox信息处理

    /* Create task to handle mailbox messges */
    Task_Params_init(&taskParams);
    taskParams.stackSize = 16*1024;
    Task_create(MmwDemo_mboxReadTask, &taskParams, NULL);

该文档与一开始的Semaphore位于同一区域,都属于头文件调用,具体文档这里不再贴出来了。
在这里插入图片描述
功能:读取Mailbox里的数据

注册侦听器

   /* Register Chirp Available Listener */
    memset ((void*)&listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));
    listenerCfg.systemInterrupt   = SOC_XWR18XX_MSS_CHIRP_AVAIL_IRQ;
    listenerCfg.listenerFxn       = MRR_MSS_chirpIntCallback;
    listenerCfg.arg               = 0;
    gMrrMSSMCB.chirpIntHandle = SOC_registerSysIntListener (gMrrMSSMCB.socHandle, &listenerCfg, &errCode);
    if (gMrrMSSMCB.chirpIntHandle == NULL)
    {
        System_printf ("Error: Unable to register the Chirp Available Listener [Error code %d]\n", errCode);
        return;
    }
    /* Register Frame Start Listener */
    memset ((void*)&listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));
    listenerCfg.systemInterrupt   = SOC_XWR18XX_MSS_FRAME_START_INT;
    listenerCfg.listenerFxn       = MRR_MSS_frameStartIntCallback;
    listenerCfg.arg               = 0;
    gMrrMSSMCB.frameStartIntHandle = SOC_registerSysIntListener (gMrrMSSMCB.socHandle, &listenerCfg, &errCode);

    if (gMrrMSSMCB.frameStartIntHandle == NULL)
    {
        System_printf("Error: Unable to register the Frame start Listener [Error code %d]\n", errCode);
        return ;
    }

主要函数SOC_registerSysIntListener
相关文档位于
在这里插入图片描述
在这里插入图片描述

功能:该函数用于注册系统中断的侦听器。可以将多个侦听器连接到一个系统中断,一旦触发中断,SOC模块将确保调用已注册的侦听器。
返回值:


Success	- Handle to the System Interrupt Listener
Error	- NULL

要是返回值为NULL,则报错。
listenerCfg的结构体定义文档
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
里面可以看到结构体变量的定义。

总结

这次主要的问题是找不到Semaphore文档的位置,所以毫无头绪,只能靠代码来猜测含义,不过这也体现了Ti定义的完善性,许多代码哪怕不看文档也能猜测出大概的含义。不过要是需要深究代码的功能,则需要详细的文档。
寻找文档的方法:
首先先去mmWave SDK Module Documentation文档中寻找,一般的驱动程序文档在里面都找的到,如果找不到,则通过Ctrl+F找到头文件,然后通过头文件的位置,往上级目录里找,找到类似于docs的文件夹,大概率文档就在这个文件夹里面。
不得不说,Ti公司的文档写的十分详细,在索引的时候一级接着一级,环环相扣,逻辑清晰。
接下来的更新还是看时间,最近有亿点忙。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RDZhang666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值