MCP2515头文件和源代码Word格式.docx

上传人:b****3 文档编号:16611428 上传时间:2022-11-24 格式:DOCX 页数:20 大小:19.15KB
下载 相关 举报
MCP2515头文件和源代码Word格式.docx_第1页
第1页 / 共20页
MCP2515头文件和源代码Word格式.docx_第2页
第2页 / 共20页
MCP2515头文件和源代码Word格式.docx_第3页
第3页 / 共20页
MCP2515头文件和源代码Word格式.docx_第4页
第4页 / 共20页
MCP2515头文件和源代码Word格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

MCP2515头文件和源代码Word格式.docx

《MCP2515头文件和源代码Word格式.docx》由会员分享,可在线阅读,更多相关《MCP2515头文件和源代码Word格式.docx(20页珍藏版)》请在冰豆网上搜索。

MCP2515头文件和源代码Word格式.docx

函数声明区 

*

//**********************

voidmcp2515_init(void);

voidmcp2515_write_register(u08data,u08adress);

u08mcp2515_read_register(u08adress);

voidmcp2515_bit_modify(u08data,u08mask,u08adress);

voidmcp2515_write_register_p(u08adress,u08*data,u08length);

函数定义区 

//**********************************************************//

// 

函数说明:

MCP2515初始化程序 

//

输入:

无 

//

输出:

调用函数:

//

//**********************************************************//

voidmcp2515_init(void)

{

//初始化MCU的SPI总线

//SPI_MasterInit();

//MCP2515启动前进行软件复位

SPI_PORT&

=~(1<

<

SPI_CS);

//MCP2515的CS有效

SPI_MasterTransmit(SPI_RESET);

SPI_PORT|=(1<

//MCP2515的CS无效

//使用位修改指令将MCP2515设置为配置模式

//也就是将CANCTRL寄存器的REQOP[2:

0]设置为100

mcp2515_bit_modify(CANCTRL,0xE0,(1<

REQOP2));

/*

//计算并设置MCP2515的位时间

//时钟频率:

Fosc 

=16MHz

//分频控制器CNF1.BRP[5:

0]=7

//最小时间份额TQ=2*(BRP+1)/Fosc 

=2*(7+1)/16M=1uS

//同步段SyncSeg 

=1TQ

//传播段PropSeg 

=(PRSEG+1)*TQ 

=1TQ

//相位缓冲段PhaseSeg1=(PHSEG1+1)*TQ=3TQ

//相位缓冲段PhaseSeg2=(PHSEG2+1)*TQ=3TQ

//同步跳转长度设置为CNF1.SJW[1:

0]=00,即1TQ

//总线波特率NBR=Fbit= 

1/(syncseg+Propseg+PS1+PS2)

=1/(8TQ)=1/8uS=125kHz

//设置分频控制器CNF1.BRP[5:

0]=7,同步跳转长度设置为CNF1.SJW[1:

0]=00

mcp2515_write_register(CNF1,(1<

BRP0)|(1<

BRP1)|(1<

BRP2));

//设置传播段PropSeg为00,即1TQ,相位缓冲段PhaseSeg1的长度3TQ

mcp2515_write_register(CNF2,(1<

BTLMODE)|(1<

PHSEG11));

//设置相位缓冲段PhaseSeg2为3TQ,禁用唤醒滤波器

mcp2515_write_register(CNF3,(1<

PHSEG21));

*/

//设置为500kbps,TQ=1/8us

0]=0,同步跳转长度设置为CNF1.SJW[1:

0]=01

//mcp2515_write_register(CNF1,(1<

SJW0));

//500kbps

//1Mbps

//设置传播段PropSeg为00,即1TQ,相位缓冲段PhaseSeg1的长度3TQ

//设置MCP2515中断使能寄存器,禁用所有中断

//mcp2515_write_register(CANINTE,/*(1<

RX1IE)|(1<

RX0IE)*/0);

//设置MCP2515中断使能寄存器,使能接收缓冲器中断

mcp2515_write_register(CANINTE,(1<

RX0IE));

//设置数据接收相关寄存器

//设置RXM[1:

0]=11,关闭接收缓冲器0屏蔽/滤波功能,接收所有报文;

禁止滚存功能

mcp2515_write_register(RXB0CTRL,(1<

RXM1)|(1<

RXM0));

0]=11,关闭接收缓冲器1屏蔽/滤波功能,接收所有报文;

mcp2515_write_register(RXB1CTRL,(1<

u08temp[4]={0,0,0,0};

//设置6个验收滤波寄存器为0,

mcp2515_write_register_p(RXF0SIDH,temp,4);

mcp2515_write_register_p(RXF1SIDH,temp,4);

mcp2515_write_register_p(RXF2SIDH,temp,4);

mcp2515_write_register_p(RXF3SIDH,temp,4);

mcp2515_write_register_p(RXF4SIDH,temp,4);

mcp2515_write_register_p(RXF5SIDH,temp,4);

//设置2个验收滤波寄存器为0,

mcp2515_write_register_p(RXM0SIDH,temp,4);

mcp2515_write_register_p(RXM1SIDH,temp,4);

//配置引脚

//设置接收相关引脚控制寄存器,配置它们禁用第二功能

mcp2515_write_register(BFPCTRL,0);

//调试使用,设置BFPCTRL使RX0BF,RX1BF设置为数字输出。

//mcp2515_bit_modify(BFPCTRL,(1<

B1BFE)|(1<

B0BFE)|(1<

B1BFM)|(1<

B0BFM),(1<

B0BFE));

//设置发送相关引脚控制寄存器,配置它们禁用第二功能

mcp2515_write_register(TXRTSCTRL,0);

//MCP2515进入环回模式,进行功能测试

//mcp2515_bit_modify(CANCTRL,0XE0,(1<

REQOP1));

//MCP2515进入正常模式

mcp2515_bit_modify(CANCTRL,0xE0,0);

}

MCP2515写控制寄存器程序 

寄存器地址,写入数据 

SPI发送程序SPI_MasterTransmit 

voidmcp2515_write_register(u08adress,u08data)

//CSlow,MCP2515enable

SPI_MasterTransmit(SPI_WRITE);

//发送SPI写寄存器控制字

SPI_MasterTransmit(adress);

//发送寄存器地址

SPI_MasterTransmit(data);

//发送寄存器数据

//CShigh,MCP2515disable

MCP2515读控制寄存器程序 

寄存器地址, 

寄存器数据 

u08mcp2515_read_register(u08adress)

u08data;

SPI_MasterTransmit(SPI_READ);

//发送SPI写寄存器控制字

//发送寄存器地址

data=SPI_MasterTransmit(0xff);

//回读寄存器数据

returndata;

读MCP2515接收缓冲器程序 

缓冲器地址, 

缓冲器数据 

u08mcp2515_read_rx_buffer(u08adress)

//判断adress是否有效,除了1,2位,其余都应为0

if(adress&

0xF9)

return0;

SPI_MasterTransmit(SPI_READ_RX|adress);

//发送读取控制字

//读回数据

MCP2515控制寄存器位修改程序 

寄存器地址,修改位,修改数据 

voidmcp2515_bit_modify(u08adress,u08mask,u08data)

SPI_MasterTransmit(SPI_BIT_MODIFY);

//SPI位修改指令

SPI_MasterTransmit(mask);

//发送屏蔽字节,

//屏蔽字节中“1”表示允许对相应位修改,“0”表示禁止修改

//发送数据字节

对MCP2515连续寄存器进行连续写操作 

连续寄存器起始地址,数据指针,数据长度 

voidmcp2515_write_register_p(u08adress,u08*data,u08length)

u08i;

//发送SPI写指令

//发送起始寄存器地址

for(i=0;

i<

length;

i++)

SPI_MasterTransmit(*data++);

//发送数据

对MCP2515连续寄存器进行连续读操作 

voidmcp2515_read_register_p(u08adress,u08*data,u08length)

//发送SPI读指令

//发送起始寄存器地址

*data++=SPI_MasterTransmit(0xff);

//数据保存

头文件:

HeadfileaboutMCP2515 

2009-3-31

#ifndef_MCP2515_H_

#define_MCP2515_H_

//*用户类型定义区 

*

Habit_Frank.h"

SPI_Ctrl.h"

//********************

系统宏定义 

//定义寄存器地址

#defineRXF0SIDH0x00

#defineRXF0SIDL0x01

#defineRXF0EID80x02

#defineRXF0EID00x03

#defineRXF1SIDH0x04

#defineRXF1SIDL0x05

#defineRXF1EID80x06

#defineRXF1EID00x07

#defineRXF2SIDH0x08

#defineRXF2SIDL0x09

#defineRXF2EID80x0A

#defineRXF2EID00x0B

#defineBFPCTRL 

0x0C

#defineTXRTSCTRL0x0D

#defineCANSTAT 

0x0E

#defineCANCTRL 

0x0F

#defineRXF3SIDH0x10

#defineRXF3SIDL0x11

#defineRXF3EID80x12

#defineRXF3EID00x13

#defineRXF4SIDH0x14

#defineRXF4SIDL0x15

#defineRXF4EID80x16

#defineRXF4EID00x17

#defineRXF5SIDH0x18

#defineRXF5SIDL0x19

#defineRXF5EID80x1A

#defineRXF5EID00x1B

#defineTEC 

0x1C

#defineREC 

0x1D

#defineRXM0SIDH0x20

#defineRXM0SIDL0x21

#defineRXM0EID80x22

#defineRXM0EID00x23

#defineRXM1SIDH0x24

#defineRXM1SIDL0x25

#defineRXM1EID80x26

#defineRXM1EID00x27

#defineCNF3 

0x28

#defineCNF2 

0x29

#defineCNF1 

0x2A

#defineCA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1