共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? |
打赏帖 | |
---|---|
如何实现基于NXPiMX.RT1021的BH1730采集被打赏50分 | |
【换取手持数字示波器】AHT10温度检测分享被打赏40分 | |
【换取手持数字示波器】ACM32F070开发板点亮LCD屏和触控按键,串口,ADC被打赏40分 | |
【换取手持数字示波器】ACM32F070LCD屏和触控按键功驱动蜂鸣器分享被打赏40分 | |
【换取手持数字示波器】国民技术PWM功能知识分享被打赏40分 | |
【换取手持数字示波器】放大器运放知识分享被打赏40分 | |
【分享评测,赢取加热台】+开关电源AC输入知识分享被打赏30分 | |
【换取手持数字示波器】N32G430点亮数码管与串口打印、ADC被打赏40分 | |
老胖子聊电路--分析一个反馈电路被打赏50分 | |
【换取手持数字示波器】+点亮WS2812RGB灯被打赏50分 |