1、器件支持包 一个包含 元素的 软件包 称作设备家族 包( DFP) 。 一个 DFP 可以包含 额外的 软元件 或者 工程示例 或者其任意组合。典型的 DFP 内容有: 解释 设备或者设备系列 功能的 设备属性 。 配置设备的 软元件 和基本设备驱动程序,典型的 有 : 需要 用 来设置 C 运行时库,器件时钟和存储器接口 的 CMSIS 兼容的 系统和启动文件 。 提供给中间件栈使用的物理 器件 外设的软件例行程序对应的外设驱动程序接口 程序员视角的用来描述器件外设的一个或多个 系统视图描述文件 。驱动程序可遵守 CMSIS-Driver 标准。 擦除和下载代码到片上闪存 用的 Flash
2、编程算法 。 显示 器件及其外设 的 用法 的 工程 示例 。 可以用来作为 应用开发 起点的 用户代码模板 。 该节 是一个说明如何创建 DFP 的教程。 起初,在 DFP 中只有描述器件的 PDSC( Package description 包描述)文件。然后向该 DFP 中扩充添加 SVD( System View Description 系统视图描述) 文件、 Flash 算法和器件相关的如系统和 HAL( Hardware Abstraction Layer 硬件抽象层)的软元件文件。 示例项目和代码模板可作为 描述 节 添加 到 软元件 包 中。 DFP 使用案例 为支持新的器件,
3、 器件系列包( DFP) 可以作为开发工具 的 扩展由芯片供应商提供。 相对于某一器件系列, DFP 使芯片供应商能独立的分发器件支持工具。 DFP 也能被用来提供显示 相关 网站的 信息 。一个例子是 从 DFP 中提取网站上 的 设备信息 创建一个 DFP 的 步骤 基本 器件系列包 在下面的章节中,将 为 设备供应商 Myvendor 提供的称为 MVCM3 的一个虚构的器件系列创建 DFP。器件 系列由被分成两个子系列的 四个成员 组成 。所述 MVCM3 系列的规格如下: MVCM3 器件系列规格 准备工作 1. 在您的 PC 上 创建一个 工作目录,例如 C:tempworkin
4、g_dfp。 2. 进入可用的 ARM:CMSIS 包 安装目录的 CMSISPackTutorials。 请 查阅您的开发工具 的 文档来获取包安装目录结构的详细信息。 在 Vision 中 ,它在 目录C:KeilARMPackARMCMSISversion 下。 3. 打开文件 Pack_with_Device_Support.zip。 4. 将该 ZIP 文件中的 01_Basic_Pack 目录 复制到 您的工作目录。 5. 确保文件 或 目录没有 被 写保护(删除只读标志)。 6. 从 可用的 ARM:CMSIS 包 安装目录的 CMSISUtilities 下 复制 如下文件到您
5、的工作目录中 : o PackChk.exe o PACK.xsd o SVDConv.exe 7. 用 一个编辑器打开文件 MyVendor.MVCM3.pdsc。 I / O 数量 26 I / O 数量 38I2C 1 I2C 3UART 4 UART 5Timer/Counter 6 3 2 - b i t Timer/Counter 8 3 2 - b i tPWM 4 1 6 - b i t封装 32-Pin LQFP 封装 48-Pin LQFPRAM 2 kB SRAM RAM 2 kB SRAMFlash 16 kB Flash 16 kBPWM 2 1 6 - b i tR
6、AM 4 kB SRAM RAM 4 kB SRAMFlash 32 kB Flash 32 kBPWM 4 1 6 - b i tMVCM3110特 征 MVCM3250特 征MVCM3120特 征 MVCM3260特 征实时时钟看门狗定时器MVCM3100 MVCM3200MVCM3100子 系列最高运行频率为50MHz。 MVCM3200子 系列最高运行频率为100MHz。16- 4 0 + 1 0 5 (扩展级温度)+ 2 . 5 V + 3 . 6 V32.768kHz1内存保护单元浮点运算单元外部中断运行温度范围运行电压MVCM3描述:M V C M 3 器件系列包含一个A R M
7、 C o r t e s - M 3 处理器,运行频率可达到1 0 0 M H z 以及多种的片上外设。处理器 ARM Cortes-M3处 理器(r2p1版 ),小端无无代码示例 1. 取消 PDSC 文件 中 对 部分 的 注 释 ,并添加以下内容: The MVCM3 device family contains an ARM Cortex-M3 processor, running up to 100 MHz with a versatile set of on-chip peripherals. 注意 Dvendor ID 不能 自由选择。 此处 设置的 ID 可以在 PACK.xs
8、d 中 找到 ( 可用的 ARM:CMSIS 包安 装目录的 CMSISUtilities 中 ) 。 本节以及 下面 各 节的所有的代码示例可以在 01_Basic_Pack 目录 下的 snippets.xml 文件 中找到。 2. 保存 PDSC 文件 并 用 gen_pack.bat 脚本 生成 包文件 。 参见 Generate a Pack 以 了解进一步的细节。 然后 安装这个包到您的开发工具中。 在开发工具 中 显示微控制器器件 系统和启动文件 CMSIS-CORE 定义了 如下 要在嵌入式应用中使用的文件: startup_.s 包含 复位处理程序和异常向量。 其 在复位之后
9、执行,然后调用 SystemInit, 且可能包含用户应用程序的堆栈配置。 system_.c 和 system_.h 包含通用的 系统配置信息( 如 时钟和总线设置) 。 提供了可访问的 处理器核心和所有外设。 该文件 应该 由 SVD 文件通过 SVDConv.exe 产生, 以此来确保头文件和调试器显示的一致性。 与 用户代码有关的系统和启动文件 注意 CMSIS-CORE 阐明了 系统和启动文件的结构以及其创建方式。 复制 Pack_with_Device_Support.zip 中的 02_System_and_Startup 目录到您 的工作环境中的 文件 目录中。 1. 取消 P
10、DSC 文件中对 部分的 注释 ,并添加以下内容 (该 conditions 部分 提供了 该步骤的详细信息) : MyVendor MVCM3 Series devices and CMSIS-CORE Startup assembler file for ARMCC Startup assembler file for GCC Startup assembler file for IAR 注意 基于汇编的 startup_.s 文件是和 工具有关的。 因此 , 对 于各 工具 供应商, 单独 的条件是必需的。 2. 取消 PDSC 文件中对 部分的 注释 ,并添加以下内容 (该 compo
11、nents 部分 提供了 该步骤的详细信息) : System Startup for MyVendor MVCM3 Series 3. 添加 一个新的版本号: Startup files included 4. 最后 , 保存 PDSC 文件 并 用 gen_pack.bat 脚本 生成 包文件 。 然后 安装这个包到您的开发工具中 并 创建一个新的工程。选择软元件 :CMSIS:CORE 和 :Device:Startup 给 该 工程 : 启动 和系 统文件添加到 了 工程中 系统视图描述文件 CMSIS-SVD 用来 书面 地 描述 包含基于 ARM Cortex-M 处理器的微控制器
12、系统,尤其是外设寄存器的 内存映射的程序员视图 。 系统视图中包含描述的详细程度足以与由芯片厂商公布的器件参考手册中的描述媲美。 信息范围从上层的外设功能描述一直到底层内存映射寄存器中单个位域的定义和功能。由芯片供应商对 CMSIS-SVD 文件进行制定和维护。将基于 XML 的 SVD 文件的输入到 SVDConv.exe 来生成依赖于调试视图和器件头文件的工具。 SVD 文件转换流程 复制 Pack_with_Device_Support.zip 中的 03_SVD_File 目录到您 的工作环境中的 文件 目录中。 1. 用 一个编辑器打开 FilesSVD 目录中的 MVCM3xxx.
13、svd 文件 并按如下进行更改: MyVendor Generic MVCM3xxx MVCM3xxx 1.2 ARM 32-bit Cortex-M3 Microcontroller based device, CPU clock up to 100 MHz. 2. 在您的 工作目录中打开 一个 命令行窗口 并 输入: C:tempworking_dfpSVDConv.exe FilesSVDMVCM3xxx.svd -generate=header -fields=macro 3. 您应该 能看到 类似于这样的一些 SVDConv 输出: CMSIS-SVD SVD Consistency
14、 Checker / Header File Generator V2.82g Copyright (C) 2010 - 2014 ARM Ltd and ARM Germany GmbH. All rights reserved. Options: “FilesSVDMVCM3xxx.svd“ -generate=header -fields=macro Reading file: “FilesSVDMVCM3xxx.svd“ Decoding using XML SVD Schema V1.1 Found 0 Errors and 0 Warnings Return Code: 0 (OK
15、) 将生成的 头文件 MVCM3xxx.h 移动到 DeviceInclude 目录 中。 4. 向其 PDSC 文件的 系列级区域 添加如下两行代码: 5. 添加 一个新的版本号: SVD and header file included 6. 最后 , 保存 PDSC 文件并用 gen_pack.bat 脚本 生成 包文件 。 然后 安装这个包到您的开发工具中 并 创建一个新的工程。 根据 您的开发 环境 ,您将看到 在您 工程中包含的 SVD 文件 : 工程中 的 SVD 文件 注意 更多关于 CMSIS-SVD 的信息,请访问 Flash 编程算法 Flash 编程算法 用于擦除或下
16、载应用程序到 Flash 器件。个 DFP 通常包含预定义的 Flash 算法 来 对 它支持的器件编程。 算法 功能 页面 详尽 地 阐述了该机制。 对于 MVCM3 系列的器件,需要创建两种 flash 算法。 MVCM3110/250 拥有 16kB 的 Flash,而 MVCM3120/260拥有 32kB 的 Flash 存储。 复制 Pack_with_Device_Support.zip 中的 04_Flash_Programming 目录到您 的工作环境中的 文件 目录中。 1. 重命名工程文件 NewDevice.uvproj(在 目录 _Template_Flash 中)
17、来 表示新的 Flash ROM 器件名称,例如 MVCM3XXX_16.uvproj。 2. 用 uVision 打开 该工程。 选好目标 (Cortex-M)器件。 注意 MDK-Lite 不支持 创建 Flash 编程算法。 3. 打开 会话框 Project - Options for Target - Output 并且更改 Name of Executable 域的内容来 表示当前器件,这里用 MCVM3XXX_16。 Cortex-M目标选项 4. 事实上 ,现在您就可以开始调整 文件 FlashPrg.c 中的 编程算法 。 现在 只更改 文件 FlashPrg.c 中的器件参
18、数 (器件 名称,器件大小 以及扇区 大小) : struct FlashDevice const FlashDevice = FLASH_DRV_VERS, / Driver Version, do not modify! “MVCM3110/250 Flash“, / Device Name ONCHIP, / Device Type 0x00000000, / Device Start Address 0x00004000, / Device Size in Bytes (16kB) 1024, / Programming Page Size 0, / Reserved, must be
19、 0 0xFF, / Initial Content of Erased Memory 100, / Program Page Timeout 100 mSec 3000, / Erase Sector Timeout 3000 mSec / Specify Size and Address of Sectors 0x002000, 0x000000, / Sector Size 8kB (2 Sectors) SECTOR_END ; 5. 用 Project - Build Target 来 生成新的 Flash 编程算法 。 算法 会在 当前目录 下的 _Template_Flash目录
20、中被创建。 6. 复制输出文件 MVCM3XXX_16.FLM 到一个新的称为 FilesFlash 的子目录下。 添加 这行代码到MVCM3110/250 的 device 部分 : algorithm name=“FlashMVCM3XXX_16.FLM“ start=“0x00000000“ size=“0x4000“ default=“1“/ 7. 为 MVCM3120/260 器件 创建一个 MVCM3XXX_32.flm 文件。 8. 添加 这行代码到 MVCM3120/260 的 device 部分 : algorithm name=“FlashMVCM3XXX_32.FLM“
21、start=“0x00000000“ size=“0x8000“ default=“1“/ 9. 添加 一个新的版本号: Flash Programming Algorithms added 10. 最后 , 保存 PDSC 文件并用 gen_pack.bat 脚本 生成 包文件 。 然后 安装这个包到您的开发工具中。 根据您的开发 环境 , 在您的 工程中将 会 看到 Flash 编程算法 : Flash 编程算法的显示 注意 在 Flash 编程算法 页面 中 提供了这一话题的更多信息。 器件 属性 为了 减少 冗余,可 将 器件分为两个 级别 的分组: 系列 :一个 器件系列拥有相同的处
22、理器 的 属性 。 子系列 :一个 可选的子系列 属性 ; 这里 增加或修改一个系列的 特征 。 某 具体 器件 属性 规定 了 : 器件 :具体半导体器件的 属性 变种 :器件 变体的 属性 ( 例如 , 拥有不同的 封装或温度范围) 或者 OEM 器件或者 集成 器件的电路板。 一个 器件由如下属性来进行描述: 描述 : 文本形式的器件描述 特征 :器件 的 外设 和 特征 分类表。该列表 用于 在 网站 上显示器件的 特征 。 手册 : 关于器件 以及其处理器的文档 处理器 : 嵌入到 器件中的处理器和处理器的特征 编译 : 器件支持的 构建工具 的 常规设置 调试配置 :调试链接的默认
23、配置 调试端口 : 调试器 进行调试 连接 配置时 器件的 调试端口 的 描述 。 调试 : 调试器 进行调试 连接 配置时器件的特定信息,包括系统视图描述文件。 跟踪 : 调试器 在配置跟踪时器件的 特定信息 。 存储器 : 器件 内部和外部 RAM 和 ROM 的 存储器区域 布局 算法 :器件特定的 Flash 编程算法 一个器件 将会 同时 继承 来自 系列级和子系列级的 技术参数 。 一些 属性必需 是 唯一的 。 例如 属性 中 SVD 文件 名 属性 值 。 因此 , 在 SVD 文件中由系列级指定的属性值可以被子系列级或者器件级的属性值重新定义。 在 系列级以及子系列级中的 比
24、如 描述 以及 特征项 等 信息 会 被 级联 在一起,然后 最终 确定这些 器件级 的 信息 。 接下来 将介绍如何 指定 器件 MVCM3110 的 器件属性( 请参阅 基本器件系列包 中所示的 技术 参数 )。该系列的 其它成员 的器件属性 也 相应 地 被 指定 。 复制 Pack_with_Device_Support.zip 中的 05_Device_Properties 目录到您 的工作环境中的 文件 目录中 : 1. MVCM3 Series 系列 的 处理器 编译 描述 和 调试 属性已经被指定了。 这里 对 系列级的其它公共 的 手册和 特征 属性 进行指定 。添加 下面的
25、 代码行到 其 PDSC 文件 的 部分中 : 2. MVCM31xx 子系列 有些 特征是其两个成员 器件 共有的 。 请将 下面的 代码 添加到 MVCM3100 的部分 : 3. MVCM3110 器件 具 有 一 些 独有的 器件 特征 。 请将 下面的 代码 添加到 MVCM3110 的 部分 : 器件 特有的软元件 最后 , 需要 将 软元件 和 工程示例 添加到 DFP 中。 1. 将 下面的 代码行添加到其 PDSC 文件 的 部分: GPIO HAL for MyVendor MVCM3 Series ADC HAL for MyVendor MVCM3 Series I2C
26、 Driver for MVCM3 Series #define RTE_Drivers_I2C0 /* Driver I2C0 */ #define RTE_Drivers_I2C1 #define RTE_Drivers_I2C2 UART Driver for MVCM3 Series #define RTE_Drivers_UART0 #define RTE_Drivers_UART1 #define RTE_Drivers_UART2 #define RTE_Drivers_UART3 #define RTE_Drivers_UART4 注意 前两个软元件被添加到 Device:HAL 是 因为它们是器件系列特有的且未使用发布的 API。 I2C 和UART 的驱动 秉承 了 CMSIS-Driver 规范 。 因此,把它 们添加到了 CMSIS Driver 器件类 中 。 2. 同样 创建一个 工程示例。 将 部分注释取消并添加这些: Dummy project Getting Started 3. 添加一个 新的版本号: DFP finalized 4. 最后 , 保存 PDSC 文件并用 gen_pack.bat 脚本 生成 包文件 。 然后 安装这个包到您的开发工具中。