CODE_LINUX_DRV_CAN

主要用途:从CAN总线上读取,写入数据。

能力分类:嵌入式

应用领域:便携产品,电源电池,无人机,射频通信,健康医疗

交易方式: 定制

参考价格:50000.00 小贴士:当前佣金是0%

好评率:100%| 综合评分:5.0| 已购买:0次
联系我 收藏店铺
分享: 

 模块描述

1.1  原理及方式

该驱动实现ZYNQ平台下CAN总线驱动,提供CAN总线IO接口

1.2  主要功能

CAN总线上读取,写入数据

 标准模块

根据Linux驱动架构设计实现

 模块设计

3.1  结构体设计

1) xcan_priv

CAN核心结构体,定义CAN总线参数,CAN总线读写函数等

struct xcan_priv {

struct can_priv can;

unsigned int tx_head;

unsigned int tx_tail;

unsigned int tx_max;

struct napi_struct napi;

u32 (*read_reg)(const struct xcan_priv *priv, enum xcan_reg reg);

void (*write_reg)(const struct xcan_priv *priv, enum xcan_reg reg, u32 val);

struct device *dev;

void __iomem *reg_base;

unsigned long irq_flags;

struct clk *bus_clk;

struct clk *can_clk;

    };

3.2  主要函数说明

1) CAN设备搜索函数

函数原型

static int xcan_probe(struct platform_device *pdev)

功能描述

搜索设备,创建CAN设备驱动资源,注册CAN设备

输入参数

pdev,设备指针

输出参数

全局变量值的变化

返回值

0,成功;其他,失败

2) AD设备释放函数

函数原型

static int xcan_remove(struct platform_device *pdev)

功能描述

取消注册CAN设备,释放CAN设备资源

输入参数

pdev,设备指针

输出参数

全局变量值的变化

返回值

0,成功;

3) CAN驱动打开函数

函数原型

static int xcan_open(struct net_device *ndev)

功能描述

打开CAN设备驱动

输入参数

ndev,设备指针

输出参数

全局变量值的变化

返回值

0,成功;其他,失败。

4) CAN驱动关闭函数

函数原型

static int xcan_close(struct net_device *ndev)

功能描述

关闭CAN设备驱动

输入参数

ndev,设备指针

输出参数

全局变量值的变化

返回值

0,成功;其他,失败。

5) CAN驱动启动函数

函数原型

static int xcan_chip_start(struct net_device *ndev)

功能描述

启动CAN设备驱动,将CAN设备置于适当的状态

输入参数

ndev,设备指针

输出参数

全局变量值的变化

返回值

0,成功;其他,失败。

6) CAN驱动停止函数

函数原型

static void xcan_chip_stop(struct net_device *ndev)

功能描述

停止CAN设备驱动,禁止中断并将CAN设备置于配置状态

输入参数

ndev,设备指针

输出参数

全局变量值的变化

返回值

0,成功;其他,失败。

7) CAN发送数据函数

函数原型

static int xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)

功能描述

CAN总线发送数据函数

输入参数

skb,保存需要发送的数据

ndev,设备指针

输出参数

全局变量值的变化

返回值

0,成功;其他,失败。

8) CAN接收数据函数

函数原型

static int xcan_rx(struct net_device *ndev)

功能描述

CAN总线接收数据函数,处理接收到的单帧数据

输入参数

ndev,设备指针。其中CAN接收的数据在此结构体中保存

输出参数

全局变量值的变化

返回值

1,成功;0,失败。

9) CAN接收数据轮询函数

函数原型

static int xcan_rx_poll(struct napi_struct *napi, int quota)

功能描述

CAN总线接收数据轮询函数,处理接收到的所有包

输入参数

napi,NAPI处理结构体。linux网络设备New API结构体。

quota,最大处理的接收包数量

输出参数

全局变量值的变化

返回值

num,接收到的包个数

 使用方法

1. xilinx_can.c放置在Linux内核的drivers/net/can/下;

2. 在该目录下的Makefile中增加:

“obj-$(CONFIG_CAN_XILINXCAN) += xilinx_can.o”

3. 在该目录下的Kconfig文件中增加

config CAN_XILINXCAN

tristate "Xilinx CAN"

depends on ARCH_ZYNQ || ARM64 || MICROBLAZE || COMPILE_TEST

depends on COMMON_CLK && HAS_IOMEM

---help---

    Xilinx CAN driver. This driver supports both soft AXI CAN IP and Zynq CANPS IP.   

 应用举例

通过上层封装的CAN库中代码,可以通过CAN总线发送接收数据

 其他


总体评价

好评率:100%

好评数量:0

总体评分

工作速度:5分

工作质量:5分

工作态度:5分

暂无评价

企业其他能力

More>