LIN总线协议详解10(LIN的API)
目录
LIN的API
1、什么是API
2、LIN的API
3、核心API
4、传输层API
5、配置与识别API
6、注意事项
6.1、兼容性
6.2、开发工具
7、API使用示例
7.1从机节点初始化
7.2、从机节点主程序
LIN的API
1、什么是API
2、LIN的API
3、核心API
4、传输层API
5、配置与识别API
注:1. 仅适用于主机节点。
2. 仅适用于从机节点。
6、注意事项
6.1、兼容性
不同的硬件需要使用不同的 API。LIN API 的实现通常都是与帧收发硬件密切相关的,不能简单挪用。
6.2、开发工具
7、API使用示例
7.1从机节点初始化
extern unsigned char lin_SomeCotrol_init( void );
void PowerON_Reset(void)
{ HardwareSetup();/* 系统初始化 */ if( l_sys_init() ) { /* LIN API 初始化失败 */ sleep(); } else { if( lin_SomeCotrol_init() ) { /* LIN 相关的模块初始化失败,例如传感器、执行器 */ sleep(); } } /* 其他系统要求的功能 */ main(); return;
}
/* 帧收发硬件的驱动程序入口 */
const T_Lib_Slave_Handle Slave_handle = { Lin_Drv_Init, Lin_Drv_HeaderIn, Lin_Drv_Pid_RecvReq, Lin_Drv_SendData, Lin_Drv_RecvData, Lin_Drv_SendRecvFinish, Lin_Drv_LinBus_Enable, Lin_Drv_LinBus_Disable, Lin_Drv_WakeUp
};
/* LIN 网络初始化 */
unsigned char lin_SomeCotrol_init( void )
{ unsigned char rtn; rtn = 0; if( l_ifc_ioctl( 0, LIN_ENTRY_SLAVE_DRV, &Slave_handle ) ) { /* 帧收发硬件的驱动程序初始化失败 */ rtn = 1u; } else { l_ifc_init(0); /* LIN 端口初始化 */ if( l_ifc_connect(0) ) { /* LIN 端口初始化失败 */ rtn = 1u; } else { /* 其他必要的操作 */ } } return rtn;
}
7.2、从机节点主程序
#include "sfr_r825.h"
#include "Lin_DrvR8C.h"
#include "lin20.h"
void lin_application( void );
/***************************/
/* Main Function */
/***************************/
void main(void)
{while( 1 ) {/* ......Something to do */lin_application();/* ......Something to do */}
}
/*******************************/
/* LIN Application Function */
/*******************************/
extern l_flg Lin_Frm_FrameMst0_flg;
extern l_flg Lin_Frm_FrameU1_flg;
extern l_flg Lin_Frm_FrameU2_flg;
extern l_flg Lin_Frm_FrameU3_flg;
extern l_flg Lin_Frm_FrameEve0_flg;
extern l_flg Lin_Frm_FrameSlv0_flg;
extern l_flg Lin_Sig_Command_flg;
extern T_Signal Lin_Sig_Status_Slv0;
extern T_Signal Lin_Sig_Status_Slv1;
extern T_Signal Lin_Sig_Command;
void lin_application( void )
{ l_u8 data[8]; l_u16 status; /* 判断:是否收到了新的帧? */ if( 0 != l_flg_tst(&Lin_Frm_FrameU1_flg) ) { l_flg_clr( &Lin_Frm_FrameU1_flg ); /* 根据收到的帧执行相应的操作 */ } else if( 0 != l_flg_tst(&Lin_Frm_FrameMst0_flg) ) { l_flg_clr( &Lin_Frm_FrameMst0_flg ); /* 根据收到的帧执行相应的操作 */ } /* 判断:帧是否已经发出? */ if( 0 != l_flg_tst(&Lin_Frm_FrameU2_flg) ) { l_flg_clr( &Lin_Frm_FrameU2_flg ); /* 执行发送结束之后的操作 */ } else if( 0 != l_flg_tst(&Lin_Frm_FrameU3_flg) ) { l_flg_clr( &Lin_Frm_FrameU3_flg ); /* 执行发送结束之后的操作 */else if( 0 != l_flg_tst(&Lin_Frm_FrameEve0_flg) ) { l_flg_clr( &Lin_Frm_FrameEve0_flg ); /* 执行发送结束之后的操作 */ } else if( 0 != l_flg_tst(&Lin_Frm_FrameSlv0_flg) ) { l_flg_clr( &Lin_Frm_FrameSlv0_flg ); /* 执行发送结束之后的操作 */ } status = l_ifc_read_status( 0 ); /* 处理可能出现的应答错误 */ if( status & 0x0001u ) { /* 出现应答错误,执行相关操作 */ } if( LD_DATA_AVAILABLE == ld_raw_rx_status(0) ) { ld_get_raw( 0, data ); } /* 判断:来自主节点的信号被更新了吗? */ if( 0 != l_flg_tst(&Lin_Sig_Command_flg) ) { l_flg_clr( &Lin_Sig_Command_flg ); if( 0x1234u == l_u16_rd(&Lin_Sig_Command) ) { l_u16_wr( &Lin_Sig_Status_Slv0, 0x0101u ); l_u16_wr( &Lin_Sig_Status_Slv1, 0x0201u ); /* 其他相关操作 */ } else if( 0x5678u == l_u16_rd(&Lin_Sig_Command) ) { l_u16_wr( &Lin_Sig_Status_Slv0, 0x0100u ); l_u16_wr( &Lin_Sig_Status_Slv1, 0x0200u ); /* 其他相关操作 */ } } /* 监测休眠命令 */ if( status & 0x0008u ) { /* LIN 端口休眠的相关操作 */ } return; }
}
LIN总线协议详解10(LIN的API)相关推荐
- 细说汽车电子通信总线之LIN总线协议详解
内容提要 1. LIN总线概述 1.1 LIN总线特点及发展历史 1.2 LIN 总线协议的物理层(收发器) 2. LIN总线报文帧结构(Message Frame Structure)详解 2.1 ...
- LIN总线协议详解7(LIN帧收发的硬件实现)
帧收发的硬件实现 目录 帧收发的硬件实现 一.组成 二.协议控制器 1.协议控制器介绍 2.实现方法 三.总线收发器 1.实现方案 2.采用IC厂家的集成方案 四.LIN 总线 五.时钟源 六.EMI ...
- LIN总线协议详解2(LIN总线报文帧结构)
目录 一.LIN总线报文帧结构 (Message Frame ) 1.报文整体机构 2.同步间隔段(Break Field) 3.同步段(Sync Byte Field) 4.受保护 ID 段(Pro ...
- LIN总线协议详解6(状态管理)
状态管理是为了检测运行中的错误.错误一旦被发现,根据设计需要采取不同的措施进行排除,一种方法是简单替换掉错误节点,另一种方法是让发生问题的节点进入到自我保护/安全模式 (Limp Ho ...
- LIN总线协议详解3(帧的类型)
目录 帧的类型 1.无条件帧(Unconditional Frame) 2.事件触发帧(Event Triggered Frame) 3.偶发帧(Sporadic Frame) 4. 诊断帧(Diag ...
- LIN总线协议详解5(网络管理)
LIN网络管理 网络管理主要指的是网络的休眠和唤醒管理 一.唤醒 当总线处于休眠状态时,主/从机节点都可以向总线上发送唤醒信号,唤醒信号持续 250μs-5ms.其余节点(除发送唤醒 ...
- 细说汽车电子通信总线之CAN 2.0 总线协议详解
引言 1. CAN总线发展历史与ISO规范 2. CAN总线主要功能特性 3. CAN 2.0总线协议的物理层电气特性 4. CAN 2.0总线协议消息报文详解 4.1 CAN2.0总线的通信报文帧格 ...
- can总线不加末端电阻_细说汽车电子通信总线之CAN 2.0 总线协议详解
引言 1. CAN总线发展历史与ISO规范 2. CAN总线主要功能特性 3. CAN 2.0总线协议的物理层电气特性 4. CAN 2.0总线协议消息报文详解 4.1 CAN2.0总线的通信报文帧格 ...
- AMBA总线—AHB总线协议详解
文章目录 一.AMBA总线介绍 1.1.AMBA发展史 1.2.典型的AMBA系统 二.AHB总线(宏观构造) 2.1.AHB总线组成 2.2.AHB总线组成互连 2.3.AHB操作概述 2.4.AH ...
最新文章
- c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解
- 对互联网用户分类的思考
- 【SSM框架系列】Spring-MVC的组件解析
- docker容器间双向通信(基于Bridge网桥)
- 零基础学Python(第十九章 File操作·IO流补充章节)
- Java并发编程举例Runnable, Callable, Future, FutureTask, CompletionService
- c++ 时间序列工具包_我的时间序列工具包
- EMC相关标准 GB IEC EN对照(持续添加中……)
- catia投图只投外轮廓线_catia作图小技巧
- duliu题之狼抓兔子题解
- 50个地理人必备数据库赶紧收藏起来(含气候、地信、地质、卫星遥感、城市经济等)
- Windows异常学习笔记(三)—— VEHSEH
- 从零开始学习oracle(2) oracle11g的远程链接和数据库调试
- 在Win2003下安装WMP10有奇招
- ActivityThread: Performing stop of activity that is not resumed:
- Dedecms 火车采集器免登陆发布接口,自动生成上下篇、栏目页、首页
- cobol .cpy文件_Visual COBOL R3:“使传统的COBOL能够部署在JVM或.NET上”。
- 用格里高利公式求给定精度的PI值 (15分)
- 【总结】最全1.5万字长文解读7大方向人脸数据集v2.0版,搞计算机视觉怎能不懂人脸...
- python画图设置字体_【转】matplotlib画图时的中文设置
热门文章
- Scanner基本用法及其实例
- “入门大数据分析:探索海量数据的奥秘“
- 顺序表2:顺序表的逆置
- AutoHotKey入门教程
- xxe漏洞浅谈以及复现
- [nginx代理配置][nginx proxy_pass][nginx从一台服务器代理到另外一台服务器,浏览器地址不改变]
- Ubuntu php安装过程,Ubuntu下Apache+PHP+MySQL安装过程详解
- java如何判断回文数
- 大数据技术之Hadoop(快速入门)
- 将linux系统安装到U盘