杰发科技AC7840——CAN通信简介(2)

2024-01-08 08:28

本文主要是介绍杰发科技AC7840——CAN通信简介(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.时钟频率

2.位时间

3.采样点

4.消息缓冲区

和ST、NXP的邮箱类似,AutoChips用了缓冲区的概念。

5.接收缓冲区

屏蔽掉demo程序的发送,只看接收情况

在回调中接收数据

先判断是不是进了接收中断

接收数据的处理函数

所有buff数据放到Info

buff的内容

BUFF的地址

标准帧buff寄存器定义

扩展帧buff寄存器定义

这里的80个字节和上面的到75似乎对不上

再看下寄存器定义,发现应该是还有保留字节。

至此,CAN接受已经大致清楚了,知道他是怎么分布的。

6.发送缓冲区

调用接口

组帧

发送帧数据结构定义

排除ERROR和BUSY状态后开始填充数据到BUFF

前面填充信息位

后面填充数据位

void CAN_WriteTbufData(CAN_Type *base, const uint8_t *txData, uint8_t length)
{DEVICE_ASSERT(txData != NULL);uint8_t i;uint32_t *data = (uint32_t *)&base->TBUF.DATA[0];for (i = 0U; i < length; i += 4U){*data++ = *(uint32_t *)(&txData[i]);}
}static inline void CAN_SelectNextTsbuf(CAN_Type *base)
{base->CTRL0 |= CAN_CTRL0_TSNEXT_Msk;
}

数据填充完毕开始发送

State列表

/* CAN state struct */
typedef struct
{uint32_t                  interruptFlag;            /* CAN interrupt flag */bool                      initState;                /* CAN initialization state */bool                      interruptEn;              /* CAN interrupt enable */bool                      timeStampEn;              /* Time stamp enable */bool                      dmaRecvEn;                /* DMA receive enable */bool                      memEccEn;                 /* CAN memory ECC enable */semaphore_t               txCompleted;              /* Transmit completed */semaphore_t               rxCompleted;              /* Receive completed */can_transmit_sec_amount_t tsAmount;                 /* Transmit secondary all frames or one frame */can_callback_t            callback;                 /* CAN callback function pointer */can_callback_t            wakeupCallback;           /* CAN wakeup callback function pointer */
} can_state_t;

can_transmit_sec_amount_t列表

typedef enum
{CAN_TRANSMIT_SEC_ALL = 0U,                      /*!< Transmit secondary all messages */CAN_TRANSMIT_SEC_ONE                            /*!< Transmit secondary one message */
} can_transmit_sec_amount_t;

置位

void CAN_StartTransmit(CAN_Type *base, can_transmit_buff_t type, can_transmit_sec_amount_t amount)
{if (CAN_TRANSMIT_PRIMARY == type){base->CTRL0 |= CAN_CTRL0_TPE_Msk;}else{if (CAN_TRANSMIT_SEC_ALL == amount){base->CTRL0 |= CAN_CTRL0_TSALL_Msk;    /* Send all messages */}else{base->CTRL0 |= CAN_CTRL0_TSONE_Msk;    /* Send one message only */}}
}

置位之后,硬件开始发送。至此,发送缓冲大致走了一遍。

这篇关于杰发科技AC7840——CAN通信简介(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582863

相关文章

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j