例程功能 飞思卡尔KL25Z产品BME例程1采用 ARM内核的sys tick作为时间基准,测试使用单条BME对外 设操作与相同功能的普通指令对外设操作之间的差别。并将各自操作所耗的systick的计数个数 通过串口打印出来。结果发现,使用硬件模块BME对外设进行位操作,减少了C代码的指令大小, 提高了指令执行效率。
运行平台 ü TWR-KL25Z48M ü TWR-SER ü FRDM-KL25Z ü Keil MDK /IAR ARM IDE
BME 简介 飞思卡尔 BME(位操作引擎),是由硬件支持的模块,通过在目标地址存储相应数据,实现对外 设寄存器的读、改、写操作。它具有外设装置负载能力和存储能力,能够提供进程效率和减小代码 大小。支持位操作存储区的地址为 0x4400_0000~0x5FFF_FFFF。 支持的外设装置存储的指令有:AND,OR,XOR 以及位插入(BFI); 支持的外设装置负载的指令有:单 bit 的装载与清位(LAC1),单 bit 的装载与置位(LAS1) 以及无符号位提取(UBFX)。
BME 只能被内核访问,通用的 Cortex—M0+内核平台的框图如下所示。
下面分别讲解外设装置存储的指令。 1) 装置存储逻辑 AND 下图为装置存储逻辑 AND 指令的地址存储情况。
其中,bit[28:26]=001 为 AND 操作,bit[19:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏 移量。“-”表示无意义位。
2) 装置存储逻辑 OR 下图为装置存储逻辑 OR 指令的地址存储情况。
其中,bit[28:26]=010 为 OR 操作,bit[19:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移 量。“-”表示无意义位。
3) 装置存储逻辑 XOR 下图为装置存储逻辑 XOR 指令的地址存储情况。
其中,bit[28:26]=011 为 OR 操作,bit[19:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移 量。“-”表示无意义位。
4) 装置存储位插入 BFI 下图为装置存储位插入 BFI 指令的地址存储情况。
其中,bit[28]=1 为 BFI 操作,bit[27:23]为“b”表示最低位开始的位置,bit[22:19]为“w”为位的 宽度-1,bit[18:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移量。“-“表示无意义位。
下面分别讲解外设装置负载的指令。 1) 单 bit 的装载与清位 LAC1 下图为单 bit 的装载与清位 LAC1 指令的地址存储情况。
其中,bit[28:26]=010 为单 bit 的装载与清位 LAC1 操作,bit[25:21]为“b”表示最低位开始的位 置,bit[19:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移量。“-“表示无意义位。
2) 单 bit 的装载与置位 LAS1 下图为单 bit 的装载与置位 LAS1 指令的地址存储情况。
其中,bit[28:26]=011 为单 bit 的装载与置位 LAS1 操作,bit[25:21]为“b”表示最低位开始的位置, bit[27:23]为“w”为位的宽度-1,bit[18:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移量。“-“表示无意义位。
3) 无符号位提取 BUFX 下图为无符号位提取 BUFX 指令的地址存储情况。
其中,bit[28]=1 为无符号位提取 BUFX 操作,bit[27:23]为“b”表示最低位开始的位置,bit[19:0]代 表了外设空间地址相对地址 0x4000_0000 的地址偏移量。“-“表示无意义位。
运行例程(KEIL MDK) 1) 使用 USB cable 连接 TWR-KL25Z48M 开发板 Min-B USB 连接器(J23)或连接 FRDM-KL25Z 开发板 Min-B USB 连接器(J7);
2) 加载 LQRUG_bme_ex1 工程,可根据开发平台选择不同,在工程的 Options 中修改图 9 中高亮标出的字符,如选择 TWR-KL25Z48M 平台,即将字符修改为 TOWER;选择 FRDM- KL25Z 开发板,即将字符修改为 FREEDOM。点击
进行编译;
3) 编译成功后,点击
进入调试界面
4) 进入调试界面后,点击
运行例程
运行例程(IAR) 1) 使用 USB cable 连接 TWR-KL25Z48M 开发板 Min-B USB 连接器(J23)或连接FRDM-KL25Z 开发板 Min-B USB 连接器(J7);
2) 加载 LQRUG_bme_ex1 工作区后,并根据开发平台选择 LQRUG_bme_ex1_freedom 或 LQRUG_bme_ex1_tower 工程,选择【Flash_128KB】,选择方法如图 10 所示.另外 其实和 Keil 一样,也可以使用一个工程,在工程的 Options 中修改图 11 高亮标出的字 符,如选择 TWR-KL25Z48M 平台,即将字符修改为 TOWER;选择 FRDM-KL25Z 开发板 ,即将字符修改为 FREEDOM 点击
进行编译
3)编译成功后,点击
进入调试界面 4)进入调试界面后,点击
运行例程
串口配置 选择串口调试工具,使用下图配置信息:
注:其中端口号为实际硬件的串口号,查看【我的电脑】->【设备管理器】->【端口】 。
代码说明 主程序(main 函数)代码说明
Systick 相关代码说明
子函数(logic_op_demo_with_normalc(void))代码说明
子函数(void logic_op_with_bme_macros(void))代码说明
子函数(bfi_op_with_normalc)代码说明
子函数(bfi_op_with_normalc)代码说明
子函数(lac1_op_with_normalc)代码说明
子函数(lac1_op_with_bme_macros)代码说明
子函数(las1_op_with_normalc)代码说明
子函数(las1_op_with_bme_macros)代码说明
子函数(ubfx_op_with_normalc)代码说明
子函数(ubfx_op_with_bme_macros)代码说明
流程图
运行效果 下面以位插入操作 BFI 以及位清零操作 LAC1 为例,分别给出它们的普通代码和 BME 代码 之前的结果差异。 1: 位插入操作 BFI |