地址空间规划
打开m16def.inc、可以看到如下面的定义,它和手册里面描述的FlashROM、SRAM、EEPROM等的地址空间一一对应。
; ***** DATA MEMORY DECLARATIONS *****************************************
.equ FLASHEND = 0x1fff ; Note: Word address、这里一共是8K word的flash ROM
.equ IOEND = 0x003f ; IO寄存器的地址空间是0x0000-0x003F、但它们被映射到0x0020-0x005F
.equ SRAM_START = 0x0060 ; 0x0060-0x0045F这1KB的地址空间是内部RAM使用的地址空间
.equ SRAM_SIZE = 1024 ;
.equ RAMEND = 0x045f ;
.equ XRAMEND = 0x0000 ; 这里可能是为外部RAM预留的地址空间 - question-001
.equ E2END = 0x01ff ; EEPROM一共有512B,占据着0x0000-0x01FF的地址空间
.equ EEPROMEND = 0x01ff ; 这个地址送到EEPROM控制寄存器使用
.equ EEADRBITS = 9 ; 512个单元需要9位地址线来访问
#pragma AVRPART MEMORY PROG_FLASH 16384 ; 8K word = 16K byte
#pragma AVRPART MEMORY EEPROM 512
#pragma AVRPART MEMORY INT_SRAM SIZE 1024
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60
编译器编译结束后会给出FlashROM(.cseg)、SRAM(.dseg)、EEPROM(.eseg)这三者的使用情况:
说明:
1、使用 in、 out指令访问 IO寄存器时、这两个指令使用的是 0x0000-0x003F的 地址空间来访问 IO寄存器的。
2、使用ld、st指令访问IO寄存器时、需要使用映射后的地址空间0x0020-0x005F([0x0000,0x003F]+0x0020)来访问IO寄存器。
PORTB、SREG等IO寄存器在m16def.inc文件中是按照0x0000-0x003F的地址空间来定义的,
所以使用ld、st指令时,寄存器地址需要加上0x0020:PORTB + 0x20、SREG + 0x20。
RAM中的栈空间
0、堆栈(实际指的是栈)也是RAM的一部分,只是可以使用专门的指令push/pop、通过堆栈指针SP来做FILO形式的访问(地址在SP中自动增减变化)。
在DEBUG模式下看到SP指针是放在RAM的末尾,从最后面开始向下生长。
1、在复位中断服务程序中、设置了堆栈指针SP为0x045F、是RAM地址空间的最后一个单元:
RAMEND在m16def.inc中定义如下(就是上面代码中的一部分):
.equ RAMEND = 0x045f
2、 push指令将 R20中的数据保存到 SP指针指向的 RAM单元,也即 入栈:
3、pop指令、将SP指针指向的RAM单元中的内容取出、并放入R20,也即出栈:
上一篇:B001-Atmega16-PORTA的定义-(ques=1)
下一篇:B001-Atmega16-对齐模式和大小端
推荐阅读最新更新时间:2024-11-17 13:49
推荐帖子
- 我在AD中创建PCB文件时提示这个,怎么解决?
- 我在AD中创建PCB文件时提示这个,怎么解决?首次出现吗?是不是没有破解啊关掉重新运行。 不行 是第一次创建,我记得破解了,怎么看有没有破解?
- lemonn PCB设计
- 谁用TPS63001啊?
- 用了2片TPS63001,烧了2片,好象都是温度很高,L1脚对GND已经击穿,用过朋友指点下,用这个片子要注意什么!电感已经按推荐型号使用了!谁用TPS63001啊?从你的描述看,是芯片里面的接在L1和PGND之间的MOS管挂掉了,这个管子挂掉只有两种可能,一个是过流,一个是过压。发个图上来看下吧,不知道你的应用,不好分析。很有可能是你L1脚的电压太高击穿了里面的MOS管,这样开关管再导通的时候就相当于短路,肯定会过流烧片子。你的应用条件是什么呀现在问题应该跟器件布局,走线
- 蓝雨夜 模拟与混合信号
- 初学单片机的弥漫!!!!
- 条件:1、两台电脑2、自认C语言还是可以的(现在用C#)3、一些单片机的视频教程(网上找的)4、打算投入一个月的工资(5千左右)5、电子方面的知识基本是=0弥漫:1、学单片机编程必须要懂单片机的工作原理吗?2、需要买什么做学习单片机编程的必要条件?总结:希望搞这一块的朋友指点一下!!!不用告诉我学这块有多么难。虽然单片机跟我现在用的,差十万八千里。但我也不信搞单片机天生都是高手初学单片机的弥漫!!!!1)需要,基本的数模电知识。2)万用表,电铬铁,这是很常用的
- krg_07 嵌入式系统
- 求助ARM
- 有做arm方面的吗,我们公司刚用ARM,公司做了一块板子,用到了AT91RM9200,这款芯片片内没有flash,我们外扩了个三个flash,现在ulink能识别到内核,但程序下不进去,各位有什么建议的话麻烦说一下,谢谢。我没有可用分了,请原谅。求助ARM我们外扩了个三个flash,要3个吗,一个应该就够了,硬件有问题吧?引用1楼schlafenhamster的回复:我们外扩了个三个flash,要3个吗,一个应该就够了,硬件有问题吧? 同问,三个?~~问题说得不清
- czl1983 ARM技术
- 微分和积分电路的异同
- 输出电压与输入电压成微分关系的电路为微分电路,通常由电容和电阻组成;输出电压与输入电压成积分关系的电路为积分电路,通常由电阻和电容组成。微分电路、积分电路可以分别产生尖脉冲和三角波形的响应。积分运算和微分运算互为逆运算,在自控系统中,常用积分电路和微分电路作为调节环节;此外,他们还广泛应用于波形的产生和变换以及仪器仪表之中。以集成运放作为放大电路,利用电阻和电容作为反馈网络,可以实现这两种运算电路。(一)积分电路和微分电路的特点1:积分电路可以使输入方波转换成三角波或者斜波
- Aguilera 模拟与混合信号
- 供电LDO的选择
- 我现在需要一个3.3V和一个2.5V供电,之前的设计方案中是使用LDO分别提供这两种电压,现在我想要通过3.3V串联分压电阻得到2.5V输出,可行吗?有什么需要注意的问题没有?有人能帮忙解答一下吗,谢谢供电LDO的选择这要看你2.5V连接的负载是什么样的,负载可以等效为一个电阻会参与进你的串联分压电路里面导致分压不准。只有特定场合可以采用分压电阻。这个绝大多数情况下是不可以的,,【我想要通过3.3V串联分压电阻得到2.5V输出,可行吗?】多数情况下,不可行。除非2.5V输出
- scake PCB设计
设计资源 培训 开发板 精华推荐
- ADS1255
- EVAL-AD7665CB,AD7665 评估板,48 引脚,16 位 PulSAR 模数转换器
- DC988A-A,使用 LT3585EDDB-0、550mA I 输入、具有可调输入电流限制和集成 IGBT 驱动器的闪光灯充电器的演示板
- 基于51单片机的交通灯控制系统
- 具有固定输出稳压器的 ADP130、1.8V、4 球 WLCSP 的典型应用
- 使用 NXP Semiconductors 的 TJA1042T 的参考设计
- LT1086IM-3.3 电池后备稳压电源的典型应用
- TCR6DA1530、200mA、1.5V 和 3.0V 输出电压双路输出 CMOS 低压降稳压器的典型应用
- EVAL-ADM1030,基于 ACPI 温度监视器和 ADM1030 PWM 风扇控制器的评估板
- 具有 LTC2208 16 位 130Msps、高速和高动态范围 ADC 的演示板
- 艾睿合众直播报名:TI Sitara系列芯片在【大数据】产品上的应用
- 答题赢好礼!ADI技术直通车——汽车应用娱乐与信息交互解决方案
- TE Connectivity利用传感和连接解决方案,赋能电动汽车发展 参与有好礼!
- 有奖活动|NI 助您设计更靠谱的数据采集系统
- 有奖直播:TI最新C2000实时控制器,在功率变换应用中实现高性能的成本优化型设计
- 《模拟对话》50周年大合集(2013-2016)
- 电子书下载|ADI 触摸屏测试解决方案
- 4月25日上午10:00-11:30 ADI与您相约 TOF (Time Of Flight) 技术介绍及产品应用 有奖直播
- MPS有奖分享|电感应用中,哪个问题最令你头大?