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

Posted mthoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二种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条而已。。

技术分享





















以上是关于第二种BitBand操作的方式 - 让IDE来帮忙算地址的主要内容,如果未能解决你的问题,请参考以下文章

推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置

[GPIO]推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置

Unsafe.putOrderedXXX系列方法详解(数组赋值的第二种方式)

Action获取请求参数的三种方式的第二种

intellij IDEA创建的maven项目里有个target文件,怎么来的?有啥用?

csharp 使用LINQ检查列表中的项是否具有其属性之一的特定值,第二种方式使用“out”修饰符来返回va