CAN Bus_羊兄台译(有错误欢迎指出)
这些函数可以方便地访问控制器区域网络(CAN),包括MCP2515的CAN接口芯片和PIC18单片机。这些函数将只可用于MCP2515的CAN接口芯片和包含一个CAN或ECAN模块的PIC单片机。某些函数仅适用于ECAN模式所指定的工作方式,ECAN标志会在注释在后面。所列出的中断并不可用于MCP2515接口芯片。
相关函数:
can_init(void);
CAN模块初始化125K波特率,并清除所有过滤器(?)和标志,可以接受来自任何ID的信息。
can_set_baud(void);
初始化CAN总线的波特率为125kHz的。它已经存在于 can_init() 函数中,所以没有必要再调用它。
can_set_mode
(CAN_OP_MODE mode);
允许CAN模块改变配置的模式,监听模式,环回模式,禁止模式,或者普通模式。
can_set_functional_mode
(CAN_FUN_OP_MODE mode);
函数允许ECAN模块的功能被改变为传统模式,增强型传统模式,
或者先入先出 (fifo) 模式。ECAN
can_set_id(int* addr, int32 id, int1 ext);
函数可以用来设定过滤器,标记ID值到特定的地址。它也可以用来设置要发送的消息的ID。
can_get_id(int * addr, int1 ext);
返回接收到的消息的ID。
can_putd
(int32 id, int * data, int len,
int priority, int1 ext, int1 rtr);
使用给定的参数构造一个CAN包,并把它放置在一个可用的发送缓冲区。
can_getd
(int32 & id, int * data, int & len,
struct rx_stat & stat);
从CAN缓冲器取回一个消息,并存储在函数参数的相关位置中。
can_enable_rtr(PROG_BUFFER b);
启用自动应答功能。当从特定ID接收到数据时,它会自动将用户创建的数据包,发送到此ID。ECAN
can_disable_rtr(PROG_BUFFER b);
禁止自动应答功能. ECAN
can_load_rtr
(PROG_BUFFER b, int * data, int len);
当从触发ID接到数据时,创建和加载的数据包会自动传输。ECAN
can_enable_filter(long filter);
启用ECAN模块中一个包含的额外的过滤器。ECAN
can_disable_filter(long filter);
禁止ECAN模块中一个包含的额外的过滤器。ECAN
can_associate_filter_to_buffer
(CAN_FILTER_ASSOCIATION_BUFFERS buffer,CAN_FILTER_ASSOCIATION filter);
将一个过滤器关联到一个特定的缓冲区,允许只用特定的缓冲区来进行过滤。在ECAN模块中提供。ECAN
can_associate_filter_to_mask
(CAN_MASK_FILTER_ASSOCIATE mask,
CAN_FILTER_ASSOCIATION filter);
用一个特定的缓冲去关联一个标志。只允许特定的缓冲应用这个标志。在ECAN模块中提供。ECAN
can_fifo_getd(int32 & id,int * data,
int &len,struct rx_stat & stat);
检索先入先出缓冲器中的下一个缓冲区。只应用在FIFO模式下运行的ECON模块中。ECAN
Relevant Preprocessor:
None
相关中断::
#int_canirx
触发中断,CAN接受到一个无效的包时。
#int_canwake
触发中断, PIC被CAN唤醒时。
#int_canerr
触发中断,CAN模式下有错误时。
#int_cantx0
触发中断,缓冲器0传输完成。
#int_cantx1
触发中断,缓冲器1传输完成。
#int_cantx2
触发中断,缓冲器2传输完成。
#int_canrx0
触发中断,缓冲器0发送完成。
#int_canrx1
触发中断,缓冲器1发送完成。
Relevant Include Files:
can-mcp2510.c
MCP2510和MCP2515接口芯片的驱动程序
can-18xxx8.c
内置的CAN模块的驱动程序
can-18F4580.c
内置ECAN模块的驱动程序
Relevant getenv() Parameters:
none
示例代码:
can_init();
// 初始化CAN总线
can_putd(0x300,data,8,3,TRUE,FALSE);
// 用CAN总线发送数据。ID=0x300,8位字节数据,指针指向data,为TURE时创建一个扩展ID。
//the FALSE creates?
can_getd(ID,data,len,stat);
// 从CAN总线上检索一个数据,保存ID号到ID变量,数据指针指向数据data,data中的字节数保存在len变量中,
//data的结构在stat的结构体中