iLLD简介

iLLD(Infineon Low Level Driver)是针对AURIX系列微控制器提供的开源软件包,支持多种编译器,实现寄存器级、驱动级及功能级三层抽象,简化了外设配置与初始化过程.本文介绍了iLLD的功能与集成方式,并提供了I2C等外设使用的实例.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iLLD, 全称 Infineon Low Level Driver, AURIX 家族的开源软件包, 支持多种编译器, 硬件抽象, 包含Demo, 让外设的配置/初始化/使用更简单.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDzOoUfT-1603701121417)(Assets/Snipaste_2020-10-26_15-58-43.png)]

iLLD提供了函数, 驱动和结构体, 实现3个层次的抽象:

  • Special FunctionRegister Level: 通过名字访问寄存器位
  • Driver Level: 封装寄存器配置为函数, 更易执行
  • Function Level: 初始化, 配置, 启动, 停止任何AURIX外设

在这里插入图片描述

开发环境集成:

在这里插入图片描述

以I2C为例:

在这里插入图片描述

来源 AURIX™ Infineon Low Level Driver

一些API和Training的参考:

欢迎扫描关注我的微信公众号, 及时获取最新文章:
在这里插入图片描述

<think>好的,我需要帮用户理解他们项目中的“libraries”和“iLLD”文件夹的作用。用户之前问过关于TC397板子和FreeRTOS的问题,现在他们想了解这两个文件夹的具体内容。 首先,用户提到“liabraries”可能是拼写错误,正确的应该是“libraries”。常见的嵌入式项目里,“Libraries”通常存放第三方或项目内部的通用库。比如硬件驱动、中间件等。需要解释这个文件夹可能包含的内容,比如外设驱动、通信协议栈、算法库等,并举例说明。 然后是“iLLD”,全称是Infineon Low-Level Driver,这是英飞凌提供的底层驱动库,专门针对他们的微控制器,比如TC397。需要说明iLLD的作用,比如封装硬件操作,提供API,简化开发。还要对比标准外设库(如STM32的HAL)和iLLD的区别,强调其直接操作寄存器的特点,以及如何帮助用户避免底层细节。 用户可能还关心这两个文件夹在项目中的具体应用,比如在初始化或功能实现时如何调用这些库中的函数。需要举一些代码例子,比如使用iLLD初始化GPIO或PWM模块,说明如何通过配置结构体来设置参数,并调用初始化函数。 此外,用户提到项目中有很多未使用的代码,可能需要指导他们如何管理这些库,比如通过条件编译或模块化设计来裁剪代码,避免冗余。同时,提醒用户注意版本兼容性和文档查阅的重要性,特别是iLLD的版本与TC397的匹配问题。 最后,要确保回答结构清晰,分点解释,用用户容易理解的语言,避免过于技术化的术语,同时结合他们之前的项目情况,给出实际应用的建议,比如如何查找入口函数,如何复用官方示例等。</think>### 一、`libraries`文件夹的作用 #### 1. 通用库的集合 - **典型内容**: - 第三方开源组件(如FatFS文件系统、LwIP网络协议栈) - 项目通用工具库(CRC校验、环形缓冲区实现) - 硬件抽象层(HAL)适配代码 - 示例代码: ```c // libraries/MotorCtrl/motor_driver.c void Motor_SetPWM(uint8_t duty) { PWM_DRIVER->CCU6.CTRAP = duty; // 直接操作寄存器 } ``` #### 2. 与芯片厂商库的差异 | 特性 | `libraries` | `iLLD` | |-------------------|--------------------------|--------------------------| | 抽象层级 | 较高(业务逻辑相关) | 较低(硬件寄存器级) | | 可移植性 | 跨平台设计 | 芯片专用 | | 维护责任 | 项目开发者 | Infineon官方 | | 典型文件 | `can_router.h` | `IfxVadc_Adc.h` | ### 二、`iLLD`文件夹详解 #### 1. Infineon底层驱动架构 - **核心模块组成**: ```mermaid graph TD A[iLLD] --> B[MCU基础模块] A --> C[专用外设驱动] B --> D[时钟系统(Scu)] B --> E[中断控制(Intc)] C --> F[GTM(通用定时器模块)] C --> G[VADC(电压ADC)] ``` #### 2. 关键代码结构解析 - **典型驱动初始化流程**: ```c // 步骤1:声明配置结构体 IfxGtm_Tom_Pwm_Config pwmConfig; // 步骤2:获取默认配置模板 IfxGtm_Tom_Pwm_initConfig(&pwmConfig, &MODULE_GTM); // 步骤3:定制参数 pwmConfig.tom = IfxGtm_Tom_1; // 选择TOM单元 pwmConfig.tomChannel = IfxGtm_Tom_Ch_4; // 指定通道 pwmConfig.period = 10000; // PWM周期计数器值 // 步骤4:初始化驱动实例 IfxGtm_Tom_Pwm_init(&g_PwmDriver, &pwmConfig); ``` #### 3. 寄存器级操作示例 对比直接操作寄存器与使用iLLD的差异: - **裸机寄存器操作**: ```c *(volatile uint32_t*)0xF003A400 = 0x0000000F; // 直接写SCU_CLKCR寄存器 ``` - **iLLD方式**: ```c IfxScuCcu_setSpbFrequency(100000000); // 通过API设置系统总线时钟 ``` ### 三、实际工程中的协作关系 #### 1. 典型调用链 ```mermaid sequenceDiagram App Task->>iLLD: IfxPort_setPinMode(LED_PIN,输出模式) iLLD->>HW Register: 写入PMSWCR0[6:4]=001b App Task->>libraries: Motor_Enable() libraries->>iLLD: IfxGtm_Tom_Pwm_start() ``` #### 2. 代码复用最佳实践 - **版本控制策略**: - 将iLLD设为git子模块(submodule) - 对libraries进行语义化版本管理 - **裁剪技巧**: ```makefile # 在Makefile中条件编译 ifeq ($(USE_CAN), y) SRC += libraries/can_bus/can_router.c endif ``` ### 四、故障排查要点 #### 1. 常见问题定位表 | 现象 | 可能涉及模块 | 排查方法 | |----------------------|--------------------|------------------------------| | PWM无输出 | GTM/TOM配置 | 检查iLLD的时钟分频设置 | | ADC采样值异常 | VADC校准参数 | 验证libraries中的校准算法 | | CAN通信超时 | 波特率计算 | 比对iLLD与物理层配置 | #### 2. 调试辅助手段 - **使用Infineon MemMap工具**: ```c #pragma section all "cpu0_dsram" int criticalData; // 将关键变量定位到特定内存区域 ``` - **寄存器可视化**: ```shell # 在调试终端输入 > read 0xF003A400 # 直接读取SCU_CLKCR寄存器值 ``` ### 五、升级维护建议 1. **iLLD更新步骤**: ```mermaid graph LR A[下载新版iLLD] --> B[备份原配置] B --> C[对比寄存器映射] C --> D[回归测试] ``` 2. **自定义库管理**: - 在libraries中建立`adapter`层: ```c // libraries/adapter/gtm_adapter.c void MyPWM_Init(void) { // 包装iLLD并添加项目特殊处理 } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值