当前位置:首页 > 《汽车总线技术》实验指导书 - 图文
图4.1.1 MSCAN模块结构图
图4.1.2 CAN系统图
MSCAN三重发送缓冲器机制允许提前建立多条报文,从而优化了实时性能,这三个缓冲器的安排如下图发送结构图4.1.3所示。其发送流程为:要发送报文,CPU必须确定空闲的Tx缓冲器,将标识符、数据和优先级写入空的发送缓冲器中,通过清除TXEn来安排缓冲器的发送顺序,MSCAN安排报文发送,并通过设置相关的TXEIEn启动发送中断,当CAN总线赢得仲裁时,如果有一个以上的缓冲器等待发送,MSCAN则使用三个缓冲器的本地优先级设置来决定优先顺序来决定优先值最低的发送缓冲器将在下一个IFS器件参与仲裁以接入CAN总线。当识别到已发送完消息的信息缓冲器,就关闭发送中断。通过测试ABTAK是否标志,若发送队列中还有一条消息,就重复上述发送流程,如果启动了TIME链路的话还要读取时间戳寄存器。
18
图4.1.3 发送结构图
收到的报文保存在5级输入FIFO中。5个报文缓冲器被交替映射到单个存储器区域参见图4.1.4。后台接收缓冲器(RxBG)只与MSCAN相关,但前景接收缓冲器(RxFG)可以通过CPU寻址。
如使能的话,所有接收缓冲器都有15字节大小空间来保存CAN控制位、标识符(标准或扩展)、数据内容。接收器已满标志(RXF)显示前景接收缓冲器的状态。当缓冲器包含带有匹配标识符的正确接收报文时,设置该标志。
接收时,检查每条报文,看看它是否通过滤波器,同时被写入有效 RxBG。成功接收到有效报文后,MSCAN 将 RxBG 的内容转移到接收器FIFO2,设置 RXF标志并向 CPU3 生成一个接收中断。用户的接收处理程序必须从RxFG读取收到的报文,然后复位RXF标志,确认中断、释放前景缓冲器。
在初始化模式设置INITRQ,配置接收过滤器,启动接收中断,最后清除INITRQ。
启动接收中断后,读取标识符,执行第二次过滤,读取数据长度代码字段,如果不是远程帧的话读取数据字段,如果启动了时间链路还要读取时间戳,最后释放接收缓冲器。
图4.1.4 接受结构图
如下图4.1.5所示,为了简化程序员界面,接收和发送报文缓冲器的轮廓相同。每个报文缓冲器都包含了13字节数据结构的存储器映射中都分配16个字节。并且还为发送缓冲寄存器定义了一个发送缓冲器优先级寄存器(TBPR),在该存储器映射的最后两个字节中,MSCAN保存一个特殊的16位时间标签,采样于报文成功传输或接收后的内部计时器。时间标签寄存器由MSCAN写入,CPU只能读这些寄存器。
19
图4.1.5 报文缓冲器结构图
2、主要函数功能说明
1)CAN_Init -CAN初始化函数(在msCANdrv.c中定义) 程序:UINT8 CAN_Init(UINT8 rmode) 描述:初始化MSCAN模块驱动 参数:rmode-说明系统是否复位
返回:如果没有错误返回0,否则返回其他错误值 注意:无
2)CAN_ConfigMB-CAN消息缓冲器配置函数(在msCANdrv.c中定义) 程序:UINT8 CAN_ConfigMB(UINT8 buffer, UINT8 cmode, UINT8 identifierRef)描述:配置消息缓冲器
参数:buffe-说明缓冲器的选择 cmode-说明缓冲器是接收还是发送 identifierRef-配置标识符
返回:如果没有错误返回0,否则返回其他错误值 注意:无
3)CAN_LoadMB-数据装载函数(在msCANdrv.c中定义) 程序:UINT8 CAN_LoadMB (UINT8 buffer, UINT8 *dataPtr) 描述:将数据载入相应的缓冲器 参数:buffer-说明缓冲器的选择 dataptr-说明载入缓冲器数据的地址
返回:如果没有错误返回0,否则返回其他错误值
20
注意:无
4)CAN_TransmitMB-发送数据函数(在msCANdrv.c中定义) 程序:UINT8 CAN_TransmitMB (UINT8 buffer) 描述:发送数据
参数:buffer-说明缓冲器的选择
返回:如果没有错误返回0,否则返回其他错误值 注意:无
5)CAN_ReadDataMB-读缓冲器数据函数(在msCANdrv.c中定义) 程序:UINT8 CAN_ReadDataMB (UINT8 buffer, UINT8* dataPtr) 描述:读消息缓冲器中的数据 参数:buffer-说明缓冲器的选择 dataptr-说明缓冲器数据的地址
返回:如果没有错误返回0,否则返回其他错误值 注意:无
6)LED8_x_Init-8位LED初始化函数(在led8_x.c中定义) 程序:void LED8_x_Init( void ) 描述:LED8_x初始化 参数:无参数 返回:无返回值 注意:x为0或1
7)LED8_x_SendData函数(在led8_x.c中定义) 程序:void LED8_x_SendData( UINT8 pos) 描述:LED8_x数据显示 参数:pos -要显示的数据 返回:无返回值 注意:x为0或1
8) ADC主要相关函数见实验2.4。
3、74LS164介绍
74LS164为8位移位寄存器,其主要电特性的典型值如下:54/74164:185mW;54/74LS164:80m。当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。串行数据输入端(A,B)
21
共分享92篇相关文档