⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can.h

📁 S3C2410上GPRS模块的驱动源码,ADS1.2编译工程,已测试通过.附文档.
💻 H
字号:
/*!	\file		CAN.h
	\brief		CAN总线收发数据头文件
	\author		丁雷
	\version	0.1
*/
#ifndef	CAN_H
#define CAN_H


#define CAN_MAX_CHAR_IN_MESSAGE (8)	//!<MAX_CHAR_IN_MESSAGE

#define CAN_OK         (0)	//!<OK
#define CAN_FAILINIT   (1)	//!<FAILTX
#define CAN_FAILTX     (2)	//!<FAILTX
#define CAN_MSGAVAIL   (3)	//!<MSGAVAIL
#define CAN_NOMSG      (4)	//!<NOMSG
#define CAN_CTRLERROR  (5)	//!<CTRLERROR
#define CAN_FAIL       (0xff)	//!<FAIL

#define CAN_STDID (0)	//!<STDID
#define CAN_EXTID (1)	//!<EXTID

#define CANDEFAULTIDENT    (0x1111)	//!<DEFAUTIDENT
#define CANDEFAULTIDENTEXT (0x0)	//!<DEFAULTIDENTEXT

// 自定义命令
#define RED_LIGHT_OPEN			101
#define RED_LIGHT_CLOSE			102
#define GREEN_LIGHT_OPEN		103
#define GREEN_LIGHT_CLOSE		104
#define BLUE_LIGHT_OPEN			105
#define BLUE_LIGHT_CLOSE		106

extern char CAN_Message[8];



typedef struct {
	
	unsigned char  extended_identifier;  /*!< identifier CAN_xxxID */ 
	
	unsigned int identifier; /*!< either extended (the 29 LSB) or standard (the 11 LSB) */ 
	
	unsigned int  dlc;	//!< data length:
	char  dta[CAN_MAX_CHAR_IN_MESSAGE];
	
	//!<used for receive only:
	//!< Received Remote Transfer Bit 
	//!< (0=no... 1=remote transfer request received)
	unsigned char  rtr;  
	
	unsigned char  filhit;	//!<Acceptence Filter that enabled the reception
} CanMessage;



#define CAN_20KBPS   1				//!<CAN总线比特率20k
#define CAN_125KBPS  CAN_20KBPS+1	//!<CAN总线比特率125k

/** 数据发送函数 
*  @param[in] value 要发送的数据
*  @param[in] n		要发送的数据的长度
*/
void CAN_Write(char * value,int n);
/** CAN总线初始化函数 
*/
void CAN_Init(void); //CAN总线初始化
/** CAN总线中断响应函数 
*/
void __irq CAN_LISR(void); 

/** CAN总线发送数据函数 
*  @param[in] msg 待发送的CanMessage结构体
*  @param[out] 发送数据是否成功状态
*/
unsigned char can_sendMessage(CanMessage* msg);

int ReadForRxMsgBuf(char *msg);
void can_initBuf(void);

#endif


/*!	\mainpage	CAN总线实验
	\author		 丁雷
	\version 1.0
	\date    2006-9-1
	\section ABSTRACT 概要
        \n  在两台嵌入式实验设备之间实现主、从站工作模式。主站和从站之间可以信息数据的互相传感;主站对从站的远程控制;
        \n  从站实验设备状态的改变可以及时的反映到主站的相关设备上。
	\section HARDWARE 硬件
	\n   2410实验箱、CAN总线扩展卡(MCP2515,MCP2551)
	\section SOFTERWARE 软件
	\n   DEMO实验平台
*/	
/*!	\defgroup	Introduction   使用说明
        \n每一块S3C2410实验板都可以选择主站/从站模式(通过触摸屏上自绘按钮的选择)。当两块实验板的主/从站模式选择好了以后,两块实验板上CPU,CAN总线控制器,CAN总线收发器等设备的初始化就会接着完成。两个实验板分别进入主站或从站窗口。
	\image html images\main.gif
	\n主站窗口
	\n"+":点击一下,将"数值显示区"中的原有数值加1并在从站实验板的"数值显示区"显示。
	\n"-":点击一下,将"数值显示区"中的原有数值减1并在从站实验板的"数值显示区"显示。
	\n红灯开按钮:点亮从站实验板上的红灯,并且在从站窗口中红灯旁边显示"开"。
	\n红灯关按钮:熄灭从站实验板上的红灯,并且在从站窗口中红灯旁边显示"关"。
	\n绿灯开按钮:点亮从站实验板上的绿灯,并且在从站窗口中绿灯旁边显示"开"。
	\n绿灯关按钮:熄灭从站实验板上的绿灯,并且在从站窗口中绿灯旁边显示"关"。
	\n多行文本框:用于显示从站实验板上的一些操作记录,例如:外部中断键按下等。

	\image html images\master.gif
	\n从站窗口
	\n"+":点击一下,将"数值显示区"中的原有数值加1并在主站实验板的"数值显示区"显示。
	\n"-":点击一下,将"数值显示区"中的原有数值减1并在主站实验板的"数值显示区"显示。
	\n多行文本框:用于显示从站本身实验板上的一些操作记录,例如:外部中断按下等。
	
	\image html images\slave.gif

*/
/*!	\defgroup CONSTRUCTION   《CAN总线》软件模块结构图
	\n	CAN总线实验分为3大模块:应用层模块,SPI读写模块和MCP2515驱动程序。这三个模块之间的调用关系如图所示:	
	\image html images\construction.gif

*/
/*!	\defgroup SPI   SPI读写模块
	\n	SPI读函数:unsigned char ReadSPI( void )
        \n           返回:从SPI0接口读取一个字节的数据
	\n	ReadSPI程序流程图如下:
	\image html images\spiread.gif
	\n	SPI写函数:void WriteSPI(unsigned char DataOut)
        \n           输入:要通过SPI0接口输出的一字节数据
	\n	WriteSPI程序流程图如下:
	\image html images\spiwrite.gif
*/
/*!	\defgroup MCP2515   MCP2515驱动程序
	\n	MCP2515芯片初始化函数:unsigned char mcp2515_Init(const unsigned char canSpeed)
        \n      输入:MCP2515的位速率
        \n	输出:MCP2515初始化成功与否的状态
	\n	mcp2515_Init程序流程图如下:
	\image html images\mcp2515init.gif
	
	\n	MCP2515申请发送缓冲器函数:unsigned char mcp2515_getNextFreeTXBuf(unsigned char *txbuf_n)
        \n      输入:一个字符,保存申请到的发送缓冲器的序号
	\n	输出:MCP2515申请发送缓冲器成功与否的状态
	\n	mcp2515_getNextFreeTXBuf程序流程图如下:
	\image html images\mcp2515_getNextFreeTXBuf.gif
	
	\nMCP2515写发送缓冲器函数:void mcp2515_write_canMsg(unsigned char buffer_sidh_addr, CanMessage * msg)
	\n输入:buffer_sidh_addr--发送缓冲器地址    Msg--要在CAN总线上发送的消息的结构体
	\n功能:将要发送的数据的内容,数据的长度,一帧数据的标识符等分别放入发送缓冲器n的相应配套寄存器中。
	
	\n
	\n  MCP2515启动一帧数据发送函数:void mcp2515_start_transmit(const unsigned char buffer_sidh_addr)
	\n输入:buffer_sidh_addr--发送缓冲器地址
	\n功能:根据发送缓冲器的地址,发送相应的SPI  RTS命令。即启动先前放入缓冲器中的一帧数据的发送。
	\n 缓冲器		RTS命令
	\n发送缓冲器0		0x81
	\n发送缓冲器1		0x82
	\n发送缓冲器2		0x84
	
	\n	MCP2515读状态寄存器函数: unsigned char mcp2515_readStatus(void)
        \n返回:状态寄存器中的数值
	\n	mcp2515_readStatus程序流程图如下:
	\image html images\mcp2515_readStatus.gif
	
	\n	MCP2515读一帧数据函数:void mcp2515_read_canMsg(unsigned char buffer_sidh_addr,CanMessage * msg)
	\n输入:buffer_sidh_addr--接收缓冲器地址    Msg--存放接收到的一帧数据的消息结构体
	\n功能:根据接收缓冲器地址buffer_sidh_addr,从接收缓冲器RXBn的相关寄存器中读取需要的一帧数据内容到消息结构体msg中。
	\n
	\n	MCP2515寄存器位修改函数:void mcp2515_modifyRegister(const unsigned char address, const unsigned char mask, const unsigned char data)
	\n输入:address--要修改的寄存器的地址
	\n      Mask--寄存器中要修改的相应位的掩码。(见参考资料2)
	\n      Data--需要修改的数据
	\image html images\mcp2515_modifyRegister.gif	

*/
/*!	\defgroup APPLICATION   应用层模块
	\n	CAN总线消息结构体:
	\n	typedef struct {
	\n		unsigned char  extended_identifier; //扩展标识符
	\n		unsigned int identifier; //标识符
	\n		unsigned int  dlc;	//发送数据长度
	\n		char  dta[CAN_MAX_CHAR_IN_MESSAGE];//待发送数据区
	\n		unsigned char  rtr;  //是否为远程发送请求
	\n		unsigned char  filhit;	//Acceptence Filter that enabled the reception
	\n	} CanMessage;

 	\n	CAN总线发送数据函数:unsigned char can_sendMessage(CanMessage* msg)
        \n      输入:msg--待发送的CanMessage结构体
        \n	输出:发送数据是否成功状态
	\n	WriteSPI程序流程图如下:
	\image html images\can_sendMessage.gif
	
	\n	数据发送函数:void CAN_Write(char * value, int n)
        \n      输入:value--发送的数据    n--发送的数据长度
        \n	功能:根据输入参数value,n初始化一个新的CanMessage结构体,然后调用can_sendMessage(CanMessage* msg)函数发送一帧数据。

 	\n	CAN总线中断服务程序:void __irq CAN_LISR(void)
	\n	CAN_LISR程序流程图如下:
	\image html images\CAN_LISR.gif

	
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -