寄存器相关及清零、置1、取反等位移操作
驱动单元
- DCode总线:访问数据
- 系统总线:访问外设的寄存器,比如读写寄存器
- DMA总线:传输数据,数据可以在某个外设的数据寄存器,也可在SRAM,还可在内部FLASH,数据可被DCode总线和DMA总线访问,为了避免访问冲突,取数据时需经过总线矩阵仲裁决定。
被动单元
- 内部的闪存存储器:FLASH,内核通过ICode总线取其中的指令;
- 内部的SRAM:程序的变量、堆栈的开销都基于内部的SRAM。内核通过DCode总线访问它;
- FSMC:即灵活的静态的存储器控制器,一个可扩展静态内存的外设,如外部SRAM、NANDFLASH、NORFLASH;
- AHB总线:挂载外设,比如GPIO、串口、I2C、SPI等
C语言中对某一位或几位清零操作
对变量a的第x位清零,就1<<x位,再取反,跟a位与操作即可得到清零操作,例如a = 0x2f,对其第2位清零,1左移2位得到0000 0100,按位取反后得到1111 1011,再与a相与,1111 1011&0010 1111 = 0010 1011
若要对某几位清零:a = 0x2f(0010 1111),若要对bit2、bit3清零,则先得到0000 1100(掩码值),需要3<<2,再按位取反得到1111 0011,最后与0010 1111相与后得到0010 0011。
C语言中对某一位或几位置1操作
a = 0x2f(0010 1111),若对bit4置1,则1<<4得到0001 0000,然后与0010 1111按位或得到0011 1111
若对某几位(bit6、bit7)置1则3<<6得到1100 0000,然后与0010 1111按位或得到1110 1111
C语言中对变量某位取反操作
a = 0x2f(0010 1111),若要将bit6取反,则先1<<6得到0100 0000,与0010 1111异或后得到0110 1111