第二种BitBand操作的方式 - 让IDE来帮忙算地址

要使用Bitband来訪问外设,一定要得出相应的映射地址。人工计算肯定是不靠谱的,并且也没人想这么干。因此能够通过Excel,拉个列表来计算。想想,这也是一个不错的招数。可是后来想想,还是嫌麻烦,毕竟还是须要建立表格。填入公式,从reference manual中找寻寄存器的地址。

后来看到EFM32的头文件。想到,既然头文件中已经把全部的寄存器的地址都制定好了的,为什么不直接拿来用的?利用IDE编译器帮我们计算呢?想来这也是比較简便的一条路子了。

于是立即动手。

经过半个小时的奋斗,最终ok了。

为什么要经历这么久的时间,主要是*号,()号。实在是有点多啊。

。指针,地址,指针值来着。。

各位看官就不须要反复这个过程了。

举个样例,想要通过bitband来控制PD7的输出。则宏定义例如以下:

#define SCK_Port        gpioPortD

#define SCK_Pin         7

#define SCK                (*((uint32_t *)(BITBAND_PER_BASE + (((uint32_t)&(GPIO->P[SCK_Port].DOUT) - PER_MEM_BASE) * 32) + (SCK_Pin * 4))))

在主函数中操作例如以下:

int main(void)

{

CHIP_Init();

CMU_ClockEnable(cmuClock_GPIO, true);

GPIO_PinModeSet(gpioPortD,7,gpioModePushPull,1);

while(1)

{

unsigned long Delay = 1000000;

while(Delay--);

SCK = 1;

Delay = 1000000;

while(Delay--);

SCK = 0;

}

}

通过查看IAR的汇编窗体。也能看到汇编指令也仅仅须要3条而已。。

时间: 2024-10-26 15:38:54

第二种BitBand操作的方式 - 让IDE来帮忙算地址的相关文章

另外一种BitBand操作的方式 - 让IDE来帮忙算地址

要使用Bitband来访问外设,一定要得出对应的映射地址.人工计算肯定是不靠谱的,而且也没人想这么干.因此可以通过Excel,拉个列表来计算,想想,这也是一个不错的招数.但是后来想想,还是嫌麻烦,毕竟还是需要建立表格,填入公式,从reference manual中找寻寄存器的地址. 后来看到EFM32的头文件,想到,既然头文件里已经把所有的寄存器的地址都制定好了的,为什么不直接拿来用的?利用IDE编译器帮我们计算呢?想来这也是比较简便的一条路子了.于是马上动手. 经过半个小时的奋斗,终于ok了.

js最基础知识回顾2(函数传参,操作属性的第二种方式,提取行间事件,操作一组元素,this,焦点问题和鼠标按下抬起,选项卡)

一.函数传参     1.函数传参:参数就是占位符----函数里定不下来的东西 a. var a1=function(){ alert(123); }; function a(f){ // 相当于 f=a1 f(); }; a(a1); b.  function skip(skipPath){  //换肤 var oLink1 = document.getElementById('link1'); oLink1.href=skipPath; } c.   function setStyle(na

SpringMVC实现操作的第二种方式

一: 运行效果: 点击提交之后显示效果 二: (1).web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi

动态单链表的传统存储方式和10种常见操作-C语言实现

顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题. 一般链表的存储方法 一组物理位置任意的存储单元来存放线性表的数据元素,当然物理位置可以连续,也可以不连续,或者离散的分配到内存中的任意位置上都是可以的.故链表的逻辑顺序和物理顺序不一定一样. 因为,链表的逻辑关系和物理关系没有必然联系,那么表示数据元素之间的逻辑映象就要使用指针,每一个存储数据元素

创建对象的第二种方式:克隆clone,要实现Cloneable接口

1 ackage com.wisezone.clone; 2 3 /** 4 * 空接口: 5 * 标识,告诉JVM,通行 6 * 1.克隆 7 * 2.序列化 8 * 9 * 创建对象的第二种方式:克隆clone,要实现Cloneable 10 * @author 王东海 11 * @2017年4月15日 12 */ 13 public class TestClone implements Cloneable 14 { 15 public String name; 16 17 public s

OSG嵌入Qt的第二种方式:使用QOpenGLWidget/QGLWidget

几天前有朋友问OSG嵌入Qt的思路.我说整体思路就是用OpenGL的方式来进行OSG的绘制,而正好Qt已经整合了OpenGL的功能,我们可以以此为依托来进行OSG的渲染绘制工作.而在Qt中却有QWidget和QGraphicsView两种不同的体系框架,于是我们也就有了两种不同的嵌入方式,关于QGraphicsView的嵌入方式我前面的博客OSGEarth嵌入Qt的QGraphicsView框架已经完成了,本篇是增加对QWidget体系的讲解. Qt中具有OpenGL功能的是一个继承自QWidg

Java创建线程的第二种方式:实现runable接口

/*需求:简单的卖票程序多个窗口买票 创建线程的第二种方式:实现runable接口 *//*步骤1.定义类实现Runable接口2.覆盖Runable接口中的run方法    将线程要运行的代码存放在该run方法中 3.通过Thread类建立线程对象4.将Runable接口的子类对象作为实际参数传递给Thread类的构造函数  为什么要将Runable接口的子类对象传递给Thread的构造函数.  因为,自定义的run方法所属的对象是Runable接口的子类对象  所以要让线程去指定对象的Run

实现键盘录入的第二种方式。。。。。

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner; public class Demo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //两种方式实现键盘录入,推荐使用

磁盘阵列3块有硬盘掉线使用第二种校验方式恢复数据

Raid6磁盘阵列可以看做是raid5阵列的升级版,在raid5的奇偶校验基础上又增加了一种校验,就空间使用率而言raid5磁盘阵列是N-1的空间使用率,raid6阵列是N-2的空间使用率.小编经常记录恢复raid5磁盘阵列的案例,今天介绍一个raid6阵列的数据恢复案例.这次数据恢复的硬件设备是某公司的一台web服务器,raid6磁盘阵列,一共有6块硬盘,现在已经有3块硬盘处于离线状态,服务器崩溃,服务器上的MySQL数据库数据丢失,业务停滞,客户想在北京联系数据恢复公司进行数据恢复,于是联系