ARM嵌入式的GPIO位绑定的计算方式详解
期末考试结束了,在复习嵌入式的时候,看到了这个知识点,就打算考完试写一下,好,废话不多话,直接开始吧。
它的原理就是把每个比特膨胀成一个32位的字,当访问这些字的时候就达到了访问比特的目的。
映射关系:1:位带区:支持位带操作的地址区;2:位带别名:对别名地址的访问最终作用到位区的访问上
重头戏-----别名地址计算
AliasAddr = 0x4200 0000 +(A - 0x4000 0000) * 32 + n*4
AiasAddr就是最后计算的别名区地址,0x4200 0000 为位带别名区的其实地址,A为位带区的某一位地址,0x4000 0000为位带区的起始地址,那么A-0x4000 0000就是偏移的字节数(这里解释一下为什么是字节数:因为地址是按照字节编址的,那么相当于每次给地址加一,相当于加了一个字节),因为一个字节要扩大32倍,故乘以32,那么就得到别名区的那个字节的起始地址,这个n相当于不满一个字节的位数,也就是说:当多余的位数不满8位的时候,就单独乘以4,因为一位拓展为32位,也就是4个字节,故要n*4,最后,把三者的和加在一起,就是最后的别名区地址了。到这里,这个式子就解释清楚了。
好了,暂时就写到这了,欢迎大家批评指正。