NXP MCU 技术论坛
直播中

刘洋

10年用户 1157经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[经验]

官方例程讲解:Kinetis KL25 BME例程1

例程功能
飞思卡尔KL25Z产品BME例程1采用ARM内核的systick作为时间基准,测试使用单条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.jpg

下面分别讲解外设装置存储的指令。
1) 装置存储逻辑 AND
下图为装置存储逻辑 AND 指令的地址存储情况。
2.jpg
其中,bit[28:26]=001 为 AND 操作,bit[19:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏
移量。“-”表示无意义位。

2) 装置存储逻辑 OR
下图为装置存储逻辑 OR 指令的地址存储情况。
3.jpg
其中,bit[28:26]=010 为 OR 操作,bit[19:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移
量。“-”表示无意义位。


3) 装置存储逻辑 XOR
下图为装置存储逻辑 XOR 指令的地址存储情况。
4.jpg
其中,bit[28:26]=011 为 OR 操作,bit[19:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移
量。“-”表示无意义位。

4) 装置存储位插入 BFI
下图为装置存储位插入 BFI 指令的地址存储情况。
5.jpg
其中,bit[28]=1 为 BFI 操作,bit[27:23]为“b”表示最低位开始的位置,bit[22:19]为“w”为位的
宽度-1,bit[18:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移量。“-“表示无意义位。

下面分别讲解外设装置负载的指令。
1) 单 bit 的装载与清位 LAC1
下图为单 bit 的装载与清位 LAC1 指令的地址存储情况。
7.jpg
其中,bit[28:26]=010 为单 bit 的装载与清位 LAC1 操作,bit[25:21]为“b”表示最低位开始的位
置,bit[19:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移量。“-“表示无意义位。

2) 单 bit 的装载与置位 LAS1
下图为单 bit 的装载与置位 LAS1 指令的地址存储情况。
7.jpg
其中,bit[28:26]=011 为单 bit 的装载与置位 LAS1 操作,bit[25:21]为“b”表示最低位开始的位置,
bit[27:23]为“w”为位的宽度-1,bit[18:0]代表了外设空间地址相对地址 0x4000_0000 的地址偏移量。“-“表示无意义位。

3) 无符号位提取 BUFX
下图为无符号位提取 BUFX 指令的地址存储情况。
8.jpg
其中,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。点击 11.jpg 进行编译;
9.jpg

3) 编译成功后,点击 22.jpg 进入调试界面


4)  进入调试界面后,点击 33.jpg 运行例程

运行例程(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 点击 44.jpg 进行编译
10.jpg
12.jpg
3)编译成功后,点击 555.jpg 进入调试界面
4)进入调试界面后,点击 6666.jpg 运行例程

串口配置
选择串口调试工具,使用下图配置信息:
13.jpg
注:其中端口号为实际硬件的串口号,查看【我的电脑】->【设备管理器】->【端口】 。

代码说明
主程序(main 函数)代码说明
图片1.jpg
图片2.jpg
Systick 相关代码说明
图片3.jpg
子函数(logic_op_demo_with_normalc(void))代码说明
图片4.jpg

子函数(void logic_op_with_bme_macros(void))代码说明
图片5.jpg
子函数(bfi_op_with_normalc)代码说明
图片6.jpg
子函数(bfi_op_with_normalc)代码说明
图片7.jpg
子函数(lac1_op_with_normalc)代码说明
图片8.jpg
子函数(lac1_op_with_bme_macros)代码说明
图片9.jpg
子函数(las1_op_with_normalc)代码说明
图片10.jpg
子函数(las1_op_with_bme_macros)代码说明
图片11.jpg

子函数(ubfx_op_with_normalc)代码说明
图片12.jpg

子函数(ubfx_op_with_bme_macros)代码说明
图片13.jpg

流程图
111.jpg
运行效果
下面以位插入操作 BFI 以及位清零操作 LAC1 为例,分别给出它们的普通代码和 BME 代码
之前的结果差异。
1: 位插入操作 BFI
图片11.jpg
2: 位清零操作 LAC1
图片12.jpg

KL25 Sample Code_BME1.zip (17.57 MB)
(下载次数: 196, 2014-12-31 14:50 上传)



回帖(1)

二霸

2014-12-31 16:41:16
楼主太霸气了 多谢分享
举报

更多回帖

发帖
×
20
完善资料,
赚取积分