地址空间规划
打开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-对齐模式和大小端
推荐帖子
- EVC下写完内存映像文件后,设置文件大小失败
- HANDLEhFile=CreateFile(LBC.txt,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);//EVC下这里用CreateFileForMappingif(hFile==INVALID_HANDLE_VALUE){MessageBox(LCreatefilefailed!);
- goout 嵌入式系统
- 《STM32系列ARMCortex-M3微控器原理与实践》2008.5月出版
- 一段时间了,书稿已经交给出版社,2个月后出版,其中加入了144PIN的一些资料,希望有一些内容对大家的开发有所帮助。如果有什么建议,也希望大家多多反馈。STM32系列ARMCortex-M3书目第一章ARMCortex-M3处理器概述1.1ARM处理器系列1.1.1命名规则1.1.2ARM处理器系列1.2ARMCortex-M3处理器1.2.1处理器组件1.2.2Cortex-M3的层次和实现选项1.2.3处理器内核1.2.4
- wlpo520 stm32/stm8
- 定时100ms
- 麻烦斑竹给个用32768的TIMER_A准确延时100ms的例子。我怎么试也不出来,今天调什么都不顺。郁闷。谢谢!定时100ms用TA的比较功能。1、选32768Hz的ACLK做TA的时钟2、将TA-CCR0设为65536/20-1(或设置TA时钟分频系数为2,将TA-CCR0设为65535/40-1,如此类推)3、设置TA为增计数运行方式4、这样TA的TAIFG中断周期近似为100ms(10Hz)5、只要32768Hz的ACLK本身比较准确,再适当调整TA-CCR0的值,用以
- cogsz 微控制器 MCU
- 跪求师傅帮忙画下电路原理图。
- 小弟第一次接触用MSP430单片机设计东西。此次毕业设计是速度里程表。小弟的原理框图如下,求高手帮我画下电路图,跪求师傅帮忙画下电路原理图。这个没人能帮,还是楼主自己画吧现在大学生太水了。。。。还是自己画吧,画一遍基本就能学到很多东西。如果画的过程有什么不懂再上来问,会有很多人帮你的。晕.....说得自己好像不是现代社会的大学学生样的........楼主,我理解你的心情........但是我也爱莫能助回复板凳鸵鸟蝈蝈的帖子即使能帮,LZ这是你在本科最后接受
- 小明同学 微控制器 MCU
- 【CW32L052测评】学习笔记07(通过串口发送命令控制led灯开关)
- ###12.1:硬件设计查看原理图设计:!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20230827230339299.png)从原理图可以看出,单片机使用PA15和PC10引脚分别控制LED1和LED2.单片机引脚高电平时,LED灯亮,单片机引脚低电平时,LED灯灭。###12.2:软件设计使用单片机来控制LED灯的开关还有继电器的开关,这些开关量的控制,使用的是单片机的输出功能,首先配置LED灯的GPIO口信息。
- qzc0927 国产芯片交流
- 超级电容集成优化混合动力公交车动力总成
- 天然资源的枯竭、空气污染、交通堵塞和矿物燃料价格的上涨等等问题,迫使社会和个人寻求替代运输工具。这当中就有用于公交车和卡车的混合电力、氢气和基于燃料电池的动力系统,例如ISE(SanDiego,CA)从1996年以来所生产的那些。这些动力系统在整个汽车工业之所以受到欢迎,是因为它们提高了燃油效率,降低了有害排放。ISE公司专长于生产串联混合电力动力系统,其中的引擎完全与动力传动系统脱离,且仅仅被用于产生电力。图1。该类型混合架构对于执行大量“停走”驱动的大型车
- frozenviolet 分立器件
设计资源 培训 开发板 精华推荐
- OP213FSZ 超低噪声、单电源仪表放大器的典型应用
- DC2290A-F,使用 LTC2385-16、16 位、5Msps 高速 SAR ADC 的演示板
- FlowRule
- AN1315,用于三相电机驱动的 L6386 MOSFET 功率驱动器的评估板
- EVAL-ADG799GEB,用于高清电视的 ADG799 三路 2:2 模拟多路复用器的评估板
- FRDM-FXS-MULT2-B: 面向带Bluetooth®的恩智浦传感器的Freedom开发平台
- 适用于电池供电应用的超小型 RGB LED 动画解决方案参考设计
- #第七届立创电赛#USB电流测量
- ADR431B 2.5 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- LTC1929CG-PG 演示板,双相降压电源,带热插拔负载共享模块,5V 至 14V 输入,3.3Vout @ 40A