assembly - AVR 是否可以间接寻址 IO 端口
问题描述
我有个问题:
是否可以间接寻址 AVR 控制器的 I/O 端口,例如:
out r16, r19
谢谢你的帮助
解决方案
根据官方说明手册,不幸的是说明in
并不out
支持间接寻址。但是您可以改用加载 ( ld
,lds
和ldd
) 和存储 ( st
,sts
和std
) 指令。它们通常用于更复杂(具有更多外围设备)AVR 微控制器上的 I/O 操作,但应该在更少的 I/O 地址上工作0x60
。
引用说明书:
注意: 一些复杂的 AVR 微控制器的外围单元比操作码中为 I/O 直接寻址保留的 64 个位置所能支持的要多。从地址 64 到 255 的扩展 I/O 内存只能通过数据寻址而不是 I/O 寻址来访问。
这些简单的间接寻址示例(GNU Assembler)应该可以工作:
/* Load DDRA I/O address into RAMPX (r26, r27) */
clr r27;
ldi r26, 0x21;
/* Store value 0xFF into specific (DDRA) register */
ldi r16, 0xFF;
st X, r16;
上述示例使用来自 ATMEGA2560 的 DDRA I/O 端口。有关正确的 I/O 地址,请查阅特定器件的数据表。
推荐阅读
- python-2.7 - 什么定义了“完整”的 Luigi 任务?
- searchkick - Searchkick 重新索引,但除非给出完整的单词,否则搜索不起作用
- python - TypeError: ArrayType(DoubleType,true) 不能接受对象 u'..'
- html - div 布局没有得到与预期相同的结果
- node.js - NodeJS - 从 S3 读取文件到 Lambda 中的 /tmp 文件夹
- powershell - 模块中的变量不显示
- python-3.x - 更快的方法:在熊猫数据框中分配 vs 附加
- microsoft-graph-api - 如何使用 MS Graph API 从存档邮箱中获取消息
- excel - 使用 VBA 遍历两个不同的目录
- sql - 查询已被取消,因为此查询的估计成本 (15) 超过了配置的阈值 12。请联系系统管理员