有个问题需要请教一下,关于M3核的位带别名区地址的问题。我如果对GPIO70这个管脚进行位操作,现在知道GPIOC的基址为0x40006000,GPIODATA的偏移地址为0x00,根据手册中的公式bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4),bit_band_base为0x42000000,byte_offset为0x40006000,现在不知道bit_number的值应为多少?
Forrest:
GPIO70是PC6,bit_number是 0x00000040 ,请参考下面的程序,:
voidGPIOPinWrite(unsigned long ulPort, unsigned char ucPins, unsigned char ucVal){ // Check the arguments. ASSERT(GPIOBaseValid(ulPort));
// Write the pins. HWREG(ulPort + (GPIO_O_DATA + (ucPins << 2))) = ucVal;}
#define GPIO_PIN_0 0x00000001 // GPIO pin 0#define GPIO_PIN_1 0x00000002 // GPIO pin 1#define GPIO_PIN_2 0x00000004 // GPIO pin 2#define GPIO_PIN_3 0x00000008 // GPIO pin 3#define GPIO_PIN_4 0x00000010 // GPIO pin 4#define GPIO_PIN_5 0x00000020 // GPIO pin 5#define GPIO_PIN_6 0x00000040 // GPIO pin 6#define GPIO_PIN_7 0x00000080 // GPIO pin 7
有个问题需要请教一下,关于M3核的位带别名区地址的问题。我如果对GPIO70这个管脚进行位操作,现在知道GPIOC的基址为0x40006000,GPIODATA的偏移地址为0x00,根据手册中的公式bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4),bit_band_base为0x42000000,byte_offset为0x40006000,现在不知道bit_number的值应为多少?
hongyue yu:
回复 Forrest:
谢谢Forrest,还有几个问题需要请教一下ucPins<<2代表什么意思呢?还有就是bit_number的范围不是0~7吗?那0x00000040是否代表bit_number=6呢?
有个问题需要请教一下,关于M3核的位带别名区地址的问题。我如果对GPIO70这个管脚进行位操作,现在知道GPIOC的基址为0x40006000,GPIODATA的偏移地址为0x00,根据手册中的公式bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4),bit_band_base为0x42000000,byte_offset为0x40006000,现在不知道bit_number的值应为多少?
hongyue yu:
回复 Forrest:
Forrest,
谢谢您的耐心指点,1、ucPins为什么要左移两位呢?2、关于GPIODATA的偏移地址手册中给出的是0x00(341页是这样描述的),0x3FC的偏移地址没有在手册中找到。3、如果使用bit-band的话操作速度是不是要快于bit-mask?4、bit-mask的原理还不是很理解,比如说如何实现修改GPIODATA的数值实现对gpio某个管脚的操作的。
有个问题需要请教一下,关于M3核的位带别名区地址的问题。我如果对GPIO70这个管脚进行位操作,现在知道GPIOC的基址为0x40006000,GPIODATA的偏移地址为0x00,根据手册中的公式bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4),bit_band_base为0x42000000,byte_offset为0x40006000,现在不知道bit_number的值应为多少?
Forrest:
回复 hongyue yu:
不客气,这一块稍微有点小搞。
bit-mask速度快。
关于第一个,第二个,第四个问题请看下面这幅图,请再看看文档中的Figure4-2上面的说明。3FC的ADDR[9:2]=11 1111 1100
有个问题需要请教一下,关于M3核的位带别名区地址的问题。我如果对GPIO70这个管脚进行位操作,现在知道GPIOC的基址为0x40006000,GPIODATA的偏移地址为0x00,根据手册中的公式bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4),bit_band_base为0x42000000,byte_offset为0x40006000,现在不知道bit_number的值应为多少?
hongyue yu:
回复 Forrest:
谢谢Forrest,我再看看。