为什么我们在使用avr解决DDRx,PORTx时添加偏移量?

时间:2015-08-24 07:19:04

标签: arduino avr avr-gcc atmel

我最近开始使用AVR编程我的 Arduino(ATmega328p),并且在使用avr lib而不是arduino IDE方面获得了足够的知识。我以一个闪烁的示例开始。

然后我尝试了同样的例子但是这次我没有包括io.h 或任何其他lib,而是使用指针到PORTs像 DDRB或PORTB 等。

根据atmega328p数据表,DDRB为0x04,PORTB为0x05。

然而,为了我的眨眼而设置它们很高,例如没有用。 相反,我必须在两个地址完全合作之后为这两个地址添加一个0x20的偏移量。 即,DDRB = 0x24且PORTB = 0x25 这个偏移量(0x20)来自哪里?

1 个答案:

答案 0 :(得分:1)

如果查看datasheet第19页的存储器映射,可以看到前32个字节的地址是寄存器,I / O寄存器在这些寄存器之后启动。这就是为什么你需要添加一个32(0x20)的偏移来获得SRAM地址。