KEAZ128中MSCAN的同步时钟初始化失败已解决

news2025/2/27 12:22:42

文章目录

  • 运行环境:
  • MSCAN初始化成功代码
  • 初始化流程图
  • 初始化失败分析
  • 初始化异常原因

运行环境:

MSCAN初始化代码(采用24MHz总线时钟当时不行,于是直接采用了外部晶振时钟16MHz)

MSCAN初始化成功代码

void CAN_Init(uint_8 mode,uint_8 open_filter,uint_32 acc_id)
{
    uint_8 i;
		//对CAN_EN和CAN_STB置高,进入正常模式
	  gpio_init(CAN_EN, GPIO_OUTPUT, TURN_ON);
	  gpio_init(CAN_STB, GPIO_OUTPUT, TURN_ON);
		gpio_init(CONTROL, GPIO_OUTPUT, TURN_OFF);

    MSCAN_MemMapPtr p = (MSCAN_MemMapPtr) MSCAN_BASE_PTR;

	  //MSCAN模块时钟门控制;SIM_SCGC的MSCAN位=1:使能总线给MSCAN时钟;
    //SIM_SCGC的MSCAN位=0:禁止总线给MSCAN时钟
    SIM_SCGC |=(uint_32)(SIM_SCGC_MSCAN_MASK);
    //MSCAN的引脚复用选择CAN_TX为PTC7,CAN_RX为PTC6
    SIM_PINSEL1 &= (uint_32)~(uint_32)(SIM_PINSEL1_MSCANPS_MASK);

	  MSCAN->CANCTL0 |= MSCAN_CANCTL0_INITRQ_MASK;  //MSCAN初始化请求
	
		while(!(MSCAN->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK)){;} //等待初始化模式确认
		MSCAN->CANCTL1 =0x80; //使能MSCAN 选择OSC时钟  

    if(open_filter)         //开启接收过滤器,只接收标示符为acc_id的帧
    {
        // 使用2个32位接收过滤器
        p->CANIDAC &= ~MSCAN_CANIDAC_IDAM_MASK;

        // 第1个32位滤波器
        // 设置接受寄存器的值
        p->CANIDAR_BANK_1[0]=acc_id>>3;
        p->CANIDAR_BANK_1[1]=acc_id<<5;
        p->CANIDAR_BANK_1[2]=0xFF;
        p->CANIDAR_BANK_1[3]=0xFF;
        // 设置屏蔽寄存器的值
        p->CANIDMR_BANK_1[0]=0x00;
        p->CANIDMR_BANK_1[1]=0x1F;
        p->CANIDMR_BANK_1[2]=0xFF;
        p->CANIDMR_BANK_1[3]=0xFF;

        // 第2个32位滤波器
        // 设置接受寄存器的值
        p->CANIDAR_BANK_2[0]=acc_id>>3;
        p->CANIDAR_BANK_2[1]=acc_id<<5;
        p->CANIDAR_BANK_2[2]=0xFF;
        p->CANIDAR_BANK_2[3]=0xFF;
        // 设置屏蔽寄存器的值
        p->CANIDMR_BANK_2[0]=0x00;
        p->CANIDMR_BANK_2[1]=0x1F;
        p->CANIDMR_BANK_2[2]=0xFF;
        p->CANIDMR_BANK_2[3]=0xFF;
    }
    else//关闭过滤器
    {
        for (i = 0; i < 16; i++)
        {

            if(i <=3)			//i>=0 && 
                p->CANIDAR_BANK_1[i] = 0xFF;
            else if(i>=4 && i <=7)
                p->CANIDMR_BANK_1[i-4] = 0xFF;
            else if(i>=8 && i <=11)
                p->CANIDAR_BANK_2[i-8] = 0xFF;
            else
                p->CANIDMR_BANK_2[i-12]= 0xFF;
        }
    }

    //配置时钟
    p->CANCTL1 &= ~MSCAN_CANCTL1_CLKSRC_MASK;    // 采用晶振时钟(16MHz)作为模块时钟
    p->CANBTR0 |= MSCAN_CANBTR0_SJW(2);
    p->CANBTR1 &= ~MSCAN_CANBTR1_SAMP_MASK;     // 位时间采样次数为1
    // MSCAN传输波特率 = 模块时钟 / [(1 + TSEG1 + TSEG2) * 分频因子]
    //                = 16000K/[(1+4+11)*2]=500Kbps
		//500K   BRP=1   TSEG1=15   TSEG2=2
    p->CANBTR0 |= MSCAN_CANBTR0_BRP(1);        // 模块时钟2分频
    p->CANBTR1 |= MSCAN_CANBTR1_TSEG2(3);      // TSEG2:3+1=4 Tq
    p->CANBTR1 |= MSCAN_CANBTR1_TSEG1(10);     // TSEG1:10+1=11 Tq

    //配置工作模式
		if(mode == LOOP_MODE)
		{
		 MSCAN->CANCTL1 |= MSCAN_CANCTL1_LOOPB_MASK;
		}
		else
		{
		 MSCAN->CANCTL1 &= ~MSCAN_CANCTL1_LOOPB_MASK;
		}
    p->CANCTL1 &= ~MSCAN_CANCTL1_LISTEN_MASK;   // 禁止侦听模式,即开启正常模式

    //退出初始化模式
    p->CANCTL0 &= ~MSCAN_CANCTL0_INITRQ_MASK;   //退出初始化模式,进入正常模式
		
    //等待应答初始化模式
    while ((p->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) == 1);

    //等待总线通信时钟同步
    while ((p->CANCTL0 & MSCAN_CANCTL0_SYNCH_MASK) == 0);
		
		    //设置中断方式
    p->CANTIER = 0x00;                          //禁止发送中断
    p->CANRIER = 0x01;                          //开启接收满中断
    //设置嵌套向量中断控制寄存器值,使能CAN接收中断
    NVIC_Init(MSCAN_RX_IRQn,2);
		gpio_set(CONTROL,GPIO_HIGH);
}

初始化流程图

在这里插入图片描述

初始化失败分析

任何正在进行的传输或接收都将中止,与CAN总线的同步将丢失。该模块通过设置INITAK = 1来指示进入初始化模式。

初始化异常原因

导致我们初始化时钟域请求失败的原因可能有:
1.CAN芯片是否存在且正常供电(同网上要有外联CANH-CANL节点)
2.CAN芯片是否损坏
3.保证电源电压至少为CAN芯片最低工作电压

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

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

相关文章

泛域名和多域名https哪个性价比高

Sectigo已经成立了二十几年&#xff0c;随着互联网的快速发展&#xff0c;Sectigo旗下的https证书种类也逐渐增多&#xff0c;例如&#xff0c;代码签名证书、IP证书&#xff0c;但是Sectigo最多的是各种域名https证书——单域名https证书、多域名https证书和泛域名https证书。…

【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》

【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第二部分流加密与CPA多重加密 CPA安全加密方案CPA安全实验、预言机访问&#xff08;oracle access&#xff09; 操作模式伪随机函数PR…

uni-app的学习【第二节】

四 路由配置及页面跳转 (1)路由配置 uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由) (2)路由跳转 uni-app有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳…

LeetCode 232.用栈实现队列(详解) (๑•̌.•๑)

题目描述&#xff1a; 解题思路&#xff1a; 创建两个栈&#xff0c;一个用于入数据&#xff0c;一个用于出数据。分别是pushST和popST; 1.如果是入数据就直接入进pushST 2.如果是出数据&#xff0c;先检查popST中有无数据&#xff0c;如果有数据&#xff0c;就直接出。如果没…

从生活入手学编程(1):Edge浏览器设置自动刷新专业教程

一、前言 我们都知道&#xff0c;Edge浏览器运行时的速度卡的实在是感人…… 于是今天&#xff0c;我就突发奇想&#xff0c;来看一看怎么刷新并且还能保留页面内容。 二、探索 首先&#xff0c;我在此提醒您&#xff0c;在使用这种方法时要非常小心。因为更改网页源代…

MySQL 图书管理系统

1.需求分析 1.1项目需求分析简介 1.1.1信息需求分析 (1) 图书信息&#xff1a;包括书籍编号&#xff0c;书籍名称&#xff0c;出版社&#xff0c;作者&#xff0c;库存量&#xff0c;出版日期&#xff0c;价格&#xff0c;库存&#xff0c;剩余量&#xff0c;类别等&#xf…

【占用网络】SurroundOcc:基于环视相机实现3D语义占用预测 ICCV 2023

前言 本文分享“占用网络”方案中&#xff0c;来自ICCV 2023的SurroundOcc&#xff0c;它基于环视相机实现3D语义占用预测。 使用空间交叉注意力将多相机图像信息提升到3D体素特征&#xff0c;即3D体素Query到2D图像中查询融合特征的思想。 然后使用3D卷积逐步对体素特征进行…

做科技类的展台3d模型用什么材质比较好---模大狮模型网

对于科技类展台3D模型&#xff0c;以下是几种常用的材质选择&#xff1a; 金属材质&#xff1a;金属材质常用于科技展台的现代感设计&#xff0c;如不锈钢、铝合金或镀铬材质。金属材质可以赋予展台一个科技感和高档感&#xff0c;同时还可以反射光线&#xff0c;增加模型的真实…

全网独家:基于openEuler-20.03-LTS-SP4底包构建opengaussV5.0.1LTS的单机极简版数据库容器

本文尝试基于openEuler-20.03-LTS-SP4底包构建opengaussV5.0.1LTS的单机版极简版数据库容器。 一、软件包源 1、openEuler-20.03-LTS容器底包 openEuler-20.03-LTS-SP4 下载链接 sha256:24d8f51c1f3a79eb975c4e498cadd9055bfd708d66c15935ec46664d0f975a7b openEuler-dock…

java.net.ConnectException: Connection refused: connect已解决

&#x1f95a;今日鸡汤&#x1f95a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 —— 《枫》 遇见问题莫着急&#xff0c;着急也没用~&#x1f636;‍&#x1f32b;️ 目录 &#x1f9c2;1.令人发麻的问题 &am…

【前端素材】bootstrap5实现美食餐饮网站RegFood

一、需求分析 美食餐饮网站是指专门提供关于美食和餐饮的信息、服务和资源的在线平台。这类网站通常提供以下功能&#xff1a; 餐厅搜索和预订&#xff1a;用户可以在网站上搜索附近的餐厅&#xff0c;并预订桌位。网站会提供餐厅的详细信息&#xff0c;包括菜单、地址、电话号…

数组计算模块NumPy

NumPy是Python数组计算、矩阵运算和科学计算的核心库。 提供了高性能的数组对象提供了大量的函数和方法NumPy使用机器学习中的操作变得简单NumPy是通过C语言实现的 NumPy的安装 pip install numpy 数组的分类 一维数组 跟Python列表的形状一样&#xff0c;区别在于数组的…

Linux日志服务管理

一&#xff1a;日志管理&#xff1a; 1.日志介绍&#xff1a; /var/log/boot.log 系统服务启动的相关信息&#xff0c;文本格式 2.日志的级别&#xff1a; 3.日志的种类及位置&#xff1a; 3.1系统日志&#xff1a; /var/log/secure&#xff1a;系统安全信息 /var/log/messag…

K8S的部署策略,重建更新和滚动更新

Deployment Strategies 部署战略 When it comes time to change the version of software implementing your service, a Kubernetes deployment supports two different rollout strategies: RecreateRollingUpdate 当需要更改实施服务的软件版本时&#xff0c;Kubernetes …

Beauty algorithm(七)瘦脸

瘦脸的实现采用局部平移法。 一、skills 前瞻 局部平移 二、目标区域定位 左脸: 关键点选择3、5点,基点30 rmax:计算两点5-3间的距离, |x-c|:图像任一点到固定基点c的距离 |m-c|:两固定点距离 右脸: 关键点选择

【simple-admin】FMS模块如何快速接入阿里云oss 腾讯云cos 服务 实现快速上传文件功能落地

让我们一起支持群主维护simple-admin 社群吧!!! 不能加入星球的朋友记得来点个Star!! https://github.com/suyuan32/simple-admin-core 一、前提准备 1、goctls版本 goctls官方git:https://github.com/suyuan32/goctls 确保 goctls是最新版本 v1.6.19 goctls -v goct…

伺服脉冲轴控制调试应用(汇川H3UPLC)

脉冲轴驱动器使能信号控制的相关应用请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/135501117https://rxxw-control.blog.csdn.net/article/details/135501117S7-1200PLC脉冲轴控制功能块SCL源代码 https://rxxw-control.blog.csdn.net/article/…

固定翼仿真的切换

delta固定翼飞行器模型 接着这篇文章文章链接&#xff0c;我们对飞行器模型进行改进&#xff0c; 我们知道&#xff0c;我们打开仿真模型 gazebo --verbose zephyr_ardupilot_demo.world 我们注意这最后一个语句 <model name"zephyr_delta_wing_demo">//加载z…

test fuzz-03-模糊测试 Atheris A Coverage-Guided, Native Python Fuzzer

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) test fuzz-01-模糊测试&#xff08;Fuzz Testing&#xff09; test fuzz-…

​iOS 应用上架指南:资料填写及提交审核

目录 摘要 引言 打开appuploader工具&#xff0c;第二步&#xff1a;打开appuploader工具 第五步&#xff1a;交付应用程序&#xff0c;在iTunes Connect中查看应用程序 总结 摘要 本文提供了iOS新站上架资料填写及提交审核的详细指南&#xff0c;包括创建应用、资料填写-…