【TI毫米波雷达笔记】UART串口外设配置及驱动(以IWR6843AOP为例)

news2025/1/14 18:40:44

【TI毫米波雷达笔记】UART串口外设初始化配置及驱动(以IWR6843AOP为例)

最基本的工程建立好以后
需要给SOC进行初始化配置

int main (void)
{
    //刷一下内存
    memset ((void *)L3_RAM_Buf, 0, sizeof(L3_RAM_Buf));

    int32_t         errCode;    //存放SOC初始化错误代码
    SOC_Cfg         socCfg;     //SOC配置结构体
    Task_Params     taskParams; //任务参数
    SOC_Handle      socHandle;

    ESM_init(0U);               //与安全等有关,可略过

    /* Initialize the SOC configuration: */
    /* 初始化SOC配置结构体 */
    memset ((void *)&socCfg, 0, sizeof(SOC_Cfg));
    memset((void *)&MMWave_Global_Params,0,sizeof(MMWave_Global));

    /* 配置SOC配置结构体 */
    /* Populate the SOC configuration: */
    socCfg.clockCfg = SOC_SysClock_INIT;
    socCfg.mpuCfg = SOC_MPUCfg_CONFIG;

    /* require to UNHALT the DSS if this core is available in selected device */
    socCfg.dssCfg = SOC_DSSCfg_UNHALT;

    /* Initialize the SOC Module: This is done as soon as the application is started
     * to ensure that the MPU is correctly configured. */

    /* SOC初始化,必须在系统运行后尽快调用该初始化函数 */
    socHandle = SOC_init (&socCfg, &errCode);

    if (socHandle == NULL)
    {
        System_printf ("Error: SOC Module Initialization failed [Error code %d]\n", errCode);
        return -1;
    }

    /* Wait for BSS powerup */
    if (SOC_waitBSSPowerUp(socHandle, &errCode) < 0)
    {
        /* Debug Message: */
        System_printf ("Debug: SOC_waitBSSPowerUp failed with Error [%d]\n", errCode);
        return 0;
    }

    /* Check if the SOC is a secure device */
    if (SOC_isSecureDevice(socHandle, &errCode))
    {
        /* Disable firewall for JTAG and LOGGER (UART) which is needed by all unit tests */
        SOC_controlSecureFirewall(socHandle,
                                  (uint32_t)(SOC_SECURE_FIREWALL_JTAG | SOC_SECURE_FIREWALL_LOGGER),
                                  SOC_SECURE_FIREWALL_DISABLE,
                                  &errCode);
    }

    MMWave_Global_Params.handle.socHandle = socHandle;

    /* Debug Message: */
    System_printf ("Debug: Launching the MMW HWA Demo\n");

    /* Initialize the Task Parameters. */
    /* 创建一个任务用于测试 */
    Task_Params_init(&taskParams);
    //taskParams.priority = 3;      //优先级3
    MMWave_Global_Params.task.init = Task_create(MMWave_InitTask, &taskParams, NULL);
    /* Start BIOS */
    BIOS_start();
    return 0;
}

最是基础配置模板

包含了时钟 MPC DSS BSS上电等等

初始化后 调用GPIO和UART初始化

 GPIO_init();                //GPIO初始化
 UART_init();                //串口初始化

同时进行引脚复用配置:

void Init_Pinmux(void)
{
    /* 串口引脚初始化 */
    /* 共有两个串口,分别为UART-1和UART-3,序号为0和2 */
    /* Setup the PINMUX to bring out the MSS UART-1 */

    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINN5_PADBE, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
    Pinmux_Set_FuncSel(SOC_XWR68XX_PINN5_PADBE, SOC_XWR68XX_PINN5_PADBE_MSS_UARTA_TX);
    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINN4_PADBD, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
    Pinmux_Set_FuncSel(SOC_XWR68XX_PINN4_PADBD, SOC_XWR68XX_PINN4_PADBD_MSS_UARTA_RX);

    // 这一块用不上
    /* Setup the PINMUX to bring out the MSS UART-3 */
//    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINF14_PADAJ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
//    Pinmux_Set_FuncSel(SOC_XWR68XX_PINF14_PADAJ, SOC_XWR68XX_PINF14_PADAJ_MSS_UARTB_TX);

    /**********************************************************************
     * Setup the PINMUX:
     * - for QSPI Flash
     **********************************************************************/
    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINR12_PADAP, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
    Pinmux_Set_FuncSel(SOC_XWR68XX_PINR12_PADAP, SOC_XWR68XX_PINR12_PADAP_QSPI_CLK);

    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINP11_PADAQ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
    Pinmux_Set_FuncSel(SOC_XWR68XX_PINP11_PADAQ, SOC_XWR68XX_PINP11_PADAQ_QSPI_CSN);

    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINR13_PADAL, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
    Pinmux_Set_FuncSel(SOC_XWR68XX_PINR13_PADAL, SOC_XWR68XX_PINR13_PADAL_QSPI_D0);

    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINN12_PADAM, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
    Pinmux_Set_FuncSel(SOC_XWR68XX_PINN12_PADAM, SOC_XWR68XX_PINN12_PADAM_QSPI_D1);

    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINR14_PADAN, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
    Pinmux_Set_FuncSel(SOC_XWR68XX_PINR14_PADAN, SOC_XWR68XX_PINR14_PADAN_QSPI_D2);

    Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINP12_PADAO, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
    Pinmux_Set_FuncSel(SOC_XWR68XX_PINP12_PADAO, SOC_XWR68XX_PINP12_PADAO_QSPI_D3);
}

我这里只用了一个串口 引脚为:
SOC_XWR68XX_PINN4_PADBDSOC_XWR68XX_PINN4_PADBD
在手册上可以查到:
在这里插入图片描述

之后就是UART串口配置以及串口测试:

void Init_UART(void)
{
    UART_Params uart0_params;
    UART_Params_init(&uart0_params);

    uart0_params.baudRate = 115200;                   //波特率115200*8
    uart0_params.clockFrequency = MSS_SYS_VCLK;      //系统时钟频率200MHz
    uart0_params.dataLength = UART_LEN_8;             //8bit字长
    uart0_params.isPinMuxDone = 1;                    //已经完成引脚复用初始化
    uart0_params.parityType = UART_PAR_NONE;          //无校验位
    uart0_params.readDataMode = UART_DATA_BINARY;     //按位方式读取数据
    uart0_params.readEcho = UART_ECHO_OFF;            //关闭回显
    uart0_params.readReturnMode = UART_RETURN_FULL;   //完整读取
    uart0_params.stopBits = UART_STOP_ONE;            //1停止位
    uart0_params.writeDataMode = UART_DATA_BINARY;    //按位方式写入(发送)数据

    MMWave_Global_Params.handle.uart0_handle = UART_open(0, &uart0_params);             //打开串口

    if(MMWave_Global_Params.handle.uart0_handle == NULL)
    {
        System_printf("UART0 open fail\n!");
        return;
    }

    System_printf("UART0 open success\n!");
    uint8_t buf[]="[INFO] UART0 Test\n";

    UART_write(MMWave_Global_Params.handle.uart0_handle, buf, sizeof(buf));
}


在串口终端上面可以看到串口输出
在这里插入图片描述
串口回环:

while(1)
{
     //不断读取收到的数据,并通过串口发送出去
     //该函数会使进程进入挂起等待状态,不会使其他任务无法执行
     //可以发现打印任务也可以执行
     UART_read(handle, &dat, 1);
     UART_write(handle, &dat, 1);
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卷积神经网络——中篇【深度学习】【PyTorch】【d2l】

文章目录 5、卷积神经网络5.5、经典卷积神经网络&#xff08;LeNet&#xff09;5.5.1、理论部分5.5.2、代码实现 5.6、深度卷积神经网络&#xff08;AlexNet&#xff09;5.6.1、理论部分5.6.2、代码实现 5.7、使用块的网络&#xff08;VGG&#xff09;5.7.1、理论部分5.7.2、代…

计网第四章(网络层)(二)

目录 IPV4地址编址 第一历史阶段&#xff08;分类编址&#xff09;&#xff1a; A类地址&#xff1a; B类地址&#xff1a; C类地址&#xff1a; D类地址&#xff08;多播地址&#xff09;&#xff1a; E类地址&#xff08;保留地址&#xff09;&#xff1a; 第二历史阶…

懵了,面试官问我Redis怎么测,我哪知道!

有些测试朋友来问我&#xff0c;redis要怎么测试&#xff1f;首先我们需要知道&#xff0c;redis是什么&#xff1f;它能做什么&#xff1f; redis是一个key-value类型的高速存储数据库。 redis常被用做&#xff1a;缓存、队列、发布订阅等。 所以&#xff0c;“redis要怎么测…

数据通信——OSPF基础

一&#xff0c;实验背景 公司盈利了&#xff0c;老总打算扩展公司规模&#xff0c;也发现了RIP协议的缺点带来的影响。身为工程师&#xff0c;老总让你替换更好的网络&#xff0c;顺带为拓展出的新部门进行新的网络部署&#xff0c;甚至买来很多设备。 此时你要用OSPF协议解决问…

推荐系统在线峰会来了,冷启动、推荐工程、模型训练…你都能找到答案

回顾推荐系统的发展历程&#xff0c;从 30 余年前的协同过滤算法起步&#xff0c;经历了深度学习的浪潮&#xff0c;到如今热火朝天的大模型&#xff0c;推荐系统一次又一次地焕发出新的活力。随着大模型的到来&#xff0c;推荐系统正处于变革的前夜&#xff0c;原有的系统模块…

计算机竞赛 基于大数据的时间序列股价预测分析与可视化 - lstm

文章目录 1 前言2 时间序列的由来2.1 四种模型的名称&#xff1a; 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &…

最新Python浪漫520表白代码?

前言 520是每年的5月20日&#xff0c;因数字“520”与“我爱你”发音相似而被许多年轻人用作表达爱意的节日。这个节日起源于中国互联网文化&#xff0c;逐渐传递到其他国家和地区。在这一天&#xff0c;情侣们通常会互送礼物、发表情、或者举行浪漫的活动来庆祝爱情。快来领取…

Unity ProBuilder SetUVs 不起作用

ProBuilder SetUVs 不起作用 &#x1f41f; 需要设置face.manulUV true public static void Set01UV(this ProBuilderMesh mesh){foreach (var face in mesh.faces){face.manualUV true;//设置为手动uv}var vertices mesh.GetVertices().Select(v > v.position).ToArray(…

计算机竞赛 基于图像识别的跌倒检测算法

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于图像识别的跌倒检测算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…

大数据平台安全主要是指什么安全?如何保障?

大数据时代已经来临&#xff0c;各种数据充斥着我们的生活与工作。随着数据的多样性以及复杂性以及大量性&#xff0c;大数据平台诞生了。但对于大数据平台大家都不是很了解&#xff0c;有人问大数据平台安全主要是指什么安全&#xff1f;如何保障&#xff1f; 大数据平台安全…

9.阿里Sentinel哨兵

1.Sentinel Sentinel&#xff08;哨兵&#xff09;是由阿里开源的一款流量控制和熔断降级框架&#xff0c;用于保护分布式系统中的应用免受流量涌入、超载和故障的影响。它可以作为微服务架构中的一部分&#xff0c;用于保护服务不被异常流量冲垮&#xff0c;从而提高系统的稳定…

angular15 数据切换报错

解决方案 1.涉及的属性不要公用&#xff0c;只能有一个标签调用 2.settimeout setTimeout(() > { xxx //导致报错的赋值代码 }, 0);

全新红娘交友系统定制版源码/相亲交友小程序源码

全新红娘交友系统定制版源码&#xff0c;相亲交友小程序源码。定制版红娘交友平台小程序源码&#xff0c;很牛逼的东西&#xff0c;虽然是小程序&#xff0c;但是有700多M大&#xff0c;功能超级强大&#xff0c;还带聊天等功能。 下载地址&#xff1a;https://bbs.csdn.net/t…

Drools的KieSession(有状态会话)的获取,领导就说一句话,员工加班都做不完!

使用Drools规则引擎的代码&#xff0c;最简单的主要有以下几部分&#xff1a; //这一部分的连接&#xff1a;“万恶”之源的KieServices&#xff0c;获取代码就一行&#xff0c;表面代码越少里面东西就越多&#xff0c;本以为就是个简单的工厂方法&#xff0c;没想到里面弯弯绕…

Windows下编译NextCloud desktop 3.9.1

首先从官方下载源码&#xff1a; https://github.com/nextcloud/desktop&#x1f4bb; Desktop sync client for Nextcloud. Contribute to nextcloud/desktop development by creating an account on GitHub.https://github.com/nextcloud/desktop 我选择的是3.9.1的稳定版本…

工控机引领移动机器人的智能化革命!

随着制造业数字化转型的加速&#xff0c;工业4.0时代的到来&#xff0c;工业互联网逐步成为中国推进新型工业化进程的核心驱动力量。而工控机作为工业互联网领域的重要组成部分&#xff0c;已经在越来越多行业得到广泛应用。据中商情报网数据显示&#xff0c;2022年我国工业自动…

Linux CentOS7系统,抓取http协议的数据包

使用 tcpdump 命令 1.首先确认是否安装 [rootlocalhost ~]# which tcpdump /usr/bin/which: no tcpdump in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) [rootlocalhost ~]#我这里没有安装 1.1 安装 tcpdump yum install tcpdump 安装成功如下&#xf…

【Linux】进程间通信原理与Reactor模式

一、用户进程缓冲区和内核缓冲区 缓冲区的目的&#xff0c;是为了减少频繁的系统IO调用。大家都知道&#xff0c;系统调用需要保存之前的进程数据和状态等信息&#xff0c;而结束调用之后回来还需要恢复之前的信息&#xff0c;为了减少这种损耗时间、也损耗性能的系统调用&…

有趣的无限缓存OOM现象

作者&#xff1a;邹阿涛涛涛涛涛涛 想必大家都知道OOM是啥吧&#xff0c;我就不扯花里胡哨的了&#xff0c;直接进入正题。先说一个背景故事&#xff0c;我司app扫码框架用的zxing&#xff0c;在很长一段时间以前&#xff0c;做过一系列的扫码优化&#xff0c;稍微列一下跟今天…

学习ts(九)混入

对象混入 使用Object.assign()进行对象混入&#xff0c;最后的people会被识别为三种类型的联合类型 类混入 使用implement并非extnds实现混入。 属性在混入类里面定义&#xff0c;分别在类中占位&#xff0c;方法分别在类中定义&#xff0c;在混合类中占位。这告诉编译器这…