共2条
1/1 1 跳转至页
ATmega128 关于ATmega128存储器的理解
问
小弟初学AVR,俺以前缺乏硬件设计的经验,连51都没玩过,看了几天的英文手册,整理了一下关于存储空间的理解,发在这里,高手们看看对不对。
从存储介质上讲,ATmega128有128K字节的Flash,4K字节的EEPROM,4K字节的内部SRAM,还有最多可扩展至64K字节的SRAM。
AT128是程序区和数据区分开编址的,程序区俺的理解就是那128K字节的Flash,由于多数指令是16位或32位的,因此Flash区被组织成64K×16(位)的形式,这样16位的PC指针寄存器寻址空间可以达到64K。
关于数据存储区,要稍微复杂一些,在空间上看是64K字节($0000-$FFFF),其中$0000-$001F部分是32个CPU可以直接访问的通用寄存器,地址$0020-$005F是内部IO空间(内部IO寄存器区),其中包括重要的SREG、MCUCR等寄存器,内部IO空间共有64字节,按照IO空间地址编为$00-$3F,在程序存储区里被统一编址成了$0020-$005F。程序存储区之后的$0060-$10FF是160字节的外部IO空间(外部IO寄存器),包含的是控制外围设备的寄存器,如定时/计数器、AD转换等。在外部IO空间之后就是4K的SRAM区,地址从$1100到$2100,堆栈就位于SRAM中。在SRAM之后是外扩的外部SRAM区,最大可扩展到64K,偶的理解是外部SARM从$2101开始,最大可延伸到$FFFF,并不是外部SRAM区本身大小就能达到64K
关于EEPROM,是独立于以上的数据、程序存储区之外的。
偶的理解就这些了,可能非常肤浅和不正确。有经验的朋友说我抠这些东西抠的太多了,很多东西用到再学。
此外还有两个问题
1 EEPROM通常在什么情况下被使用到
2 堆栈位于SRAM中,堆栈指针寄存器SP位于内部IO空间中,数据手册上说SP必须设置为大于$60,但是数据存储区$60地址还刚刚是外部IO寄存器开始,并不是SRAM区,为什么指向这里呢?
谢谢好心人的指正 答 1: 基本正确,不过SRAM有些问题:$0000-$001F:32个寄存器
$0020-$005F:I/O寄存器
$0060-$00FF:扩展I/O寄存器
$0100-$10FF:内部4KRAM
$1100-$FFFF:外部RAM
看mega128的datasheet的18页。
EEPROM一般用在掉电后需要保存的数据。
SP不能设置在$60之后,一般设置在$10FF,即RAM的最后。 答 2: 谢谢赐教数据存储区是俺写错了,疏忽
感谢楼上的指点
数据存储区
$0000-$001F:32个寄存器
$0020-$005F:I/O寄存器
$0060-$00FF:扩展I/O寄存器
$0100-$10FF:内部4K SRAM
$1100-$FFFF:外扩 SRAM
答 3: EEPROM我一般情况是这样用的 放一些外部设备的配置信息;各种系数的标定值;设备的ID编号;错误警告的极限值;试用板子的使用次数记录;板子交钱后的通过INTELNET或IC卡激活后的标志等等。一般在数据量不大的情况下将EEPROM区分成两个区,每个区的内容是一样的,板子一上电开始验证各区域的校验和,校验失败的区域被自动更新。由于芯片加密后EEPROM内的数据无法从外部读出,所有可以放心使用。不过要记住避开$00H。
从存储介质上讲,ATmega128有128K字节的Flash,4K字节的EEPROM,4K字节的内部SRAM,还有最多可扩展至64K字节的SRAM。
AT128是程序区和数据区分开编址的,程序区俺的理解就是那128K字节的Flash,由于多数指令是16位或32位的,因此Flash区被组织成64K×16(位)的形式,这样16位的PC指针寄存器寻址空间可以达到64K。
关于数据存储区,要稍微复杂一些,在空间上看是64K字节($0000-$FFFF),其中$0000-$001F部分是32个CPU可以直接访问的通用寄存器,地址$0020-$005F是内部IO空间(内部IO寄存器区),其中包括重要的SREG、MCUCR等寄存器,内部IO空间共有64字节,按照IO空间地址编为$00-$3F,在程序存储区里被统一编址成了$0020-$005F。程序存储区之后的$0060-$10FF是160字节的外部IO空间(外部IO寄存器),包含的是控制外围设备的寄存器,如定时/计数器、AD转换等。在外部IO空间之后就是4K的SRAM区,地址从$1100到$2100,堆栈就位于SRAM中。在SRAM之后是外扩的外部SRAM区,最大可扩展到64K,偶的理解是外部SARM从$2101开始,最大可延伸到$FFFF,并不是外部SRAM区本身大小就能达到64K
关于EEPROM,是独立于以上的数据、程序存储区之外的。
偶的理解就这些了,可能非常肤浅和不正确。有经验的朋友说我抠这些东西抠的太多了,很多东西用到再学。
此外还有两个问题
1 EEPROM通常在什么情况下被使用到
2 堆栈位于SRAM中,堆栈指针寄存器SP位于内部IO空间中,数据手册上说SP必须设置为大于$60,但是数据存储区$60地址还刚刚是外部IO寄存器开始,并不是SRAM区,为什么指向这里呢?
谢谢好心人的指正 答 1: 基本正确,不过SRAM有些问题:$0000-$001F:32个寄存器
$0020-$005F:I/O寄存器
$0060-$00FF:扩展I/O寄存器
$0100-$10FF:内部4KRAM
$1100-$FFFF:外部RAM
看mega128的datasheet的18页。
EEPROM一般用在掉电后需要保存的数据。
SP不能设置在$60之后,一般设置在$10FF,即RAM的最后。 答 2: 谢谢赐教数据存储区是俺写错了,疏忽
感谢楼上的指点
数据存储区
$0000-$001F:32个寄存器
$0020-$005F:I/O寄存器
$0060-$00FF:扩展I/O寄存器
$0100-$10FF:内部4K SRAM
$1100-$FFFF:外扩 SRAM
答 3: EEPROM我一般情况是这样用的 放一些外部设备的配置信息;各种系数的标定值;设备的ID编号;错误警告的极限值;试用板子的使用次数记录;板子交钱后的通过INTELNET或IC卡激活后的标志等等。一般在数据量不大的情况下将EEPROM区分成两个区,每个区的内容是一样的,板子一上电开始验证各区域的校验和,校验失败的区域被自动更新。由于芯片加密后EEPROM内的数据无法从外部读出,所有可以放心使用。不过要记住避开$00H。
共2条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
我要赚赏金
