该驱动实现ZYNQ平台下CAN总线驱动,提供CAN总线IO接口。
从CAN总线上读取,写入数据。
根据Linux驱动架构设计实现。
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; }; |
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分
暂无评价
CPU/GPU ¥12000.00
CPU/GPU ¥25000.00
CPU/GPU ¥10000.00
CPU/GPU ¥30000.00
CPU/GPU ¥10000.00
CPU/GPU ¥15000.00
CPU/GPU ¥10000.00
CPU/GPU ¥10000.00
其他 ¥5000.00
其他 ¥5000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
FPGA电路 ¥10000.00
FPGA电路 ¥10000.00
模拟电路 ¥10000.00
模拟电路 ¥5000.00
模拟电路 ¥5000.00
模拟电路 ¥5000.00
模拟电路 ¥10000.00
模拟电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥15000.00
CPU/GPU ¥20000.00
CPU/GPU ¥18000.00
CPU/GPU ¥20000.00
其他 ¥10000.00
其他 ¥6000.00
其他 ¥2000.00
其他 ¥3000.00
其他 ¥12000.00
其他 ¥8000.00
FPGA电路 ¥5000.00
MCU电路 ¥4800.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
MCU电路 ¥50000.00
MCU电路 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥500000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00