RS08使用指南.zip
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
飞思卡尔半导体文件编号:AN3266应用笔记第 1版,5/2006
RS08使用向导
by: Vincent Ko
Systems Engineering Microcontroller Division
RS08是飞思卡尔推出的超低成本 8位 MCU 内核,本文主要介绍 RS08平台。
第一部分为用户提供使用 RS08的基本信息,第二部分包括沿用技术和概念的应用示例。
RS08介绍
本部分通过介绍 RS08架构、编程模式、指令集等来帮助用户了解 RS08平台;一般会以 MC9RS08KA2为基准,通过参考实例的方式来作介绍,有必要的话,也会提供飞思卡尔 HC08和 S08平台的交叉参考。
目录
1 RS08介
绍 (1)
1.1 RS08架构............................................................2 1.2 RS08指令集........................................................6 1.3 内存分页结构......................................................15 1.4 MCU 复位...............................................................16 1.5 等待模式............................................................17 1.6 停止模式.............................................................17 1.7 子程序调用 (18)
1.8 中断..................................................................19 2 模拟 ADC 应用实例 ........................................................22 2.1 执行.......................................................................22 2.2 校准...................................................................27 2.3 测量结果 .. (28)
附录 A 程序实
例 (30)
This document contains information on a new product under development.Freescale reserves the right to change or discontinue this product without notice. ©
Freescale Semiconductor, Inc., 2007. All rights reserved. General Business Information
1.1 RS08架构
RS08平台是专为超低成本的应用而设计。
由于硬件部分设计的优化导致整个系统成本降低; RS08的管芯可以放在较小的封装中,譬如 6针双列平面无引脚(Dual Flat No lead :DFN )封装。
RS08平台保留与流行的 HC08/S08平台相似的编程模式可以轻易实现平台间程序源代码的移植。
RS08平台的主要特点有: ⍓指令集为 S08的子指令集;
⍓映像程序计数器(Shadow Program Counter :SPC )的新指令:SHA 和 SLA ; ⍓为代码长度优化设计的新的微短寻址模式; ⍓最大 16K 的可寻址存储空间;
⍓取消了中断和复位服务中的向量提取机制; ⍓取消了子程序调用中的 RAM 堆栈机制; ⍓子程序调用提供单层硬件堆栈;
⍓通过执行 STOP 和 WAIT 指令提供低功耗模式的支持; ⍓通过内部或外部中断触发实现 Stop 状态的唤醒; ⍓提供非法寻址和操作码检测复位;
⍓硬件加密实现对非遗失性的存储空间(NVM )非法访问的保护; ⍓用单线接口实现调试和非遗失性存储器的编程/擦除
1.1.1 CPU 寄存器
RS08的 CPU 寄存器包括一个 8位通用累加器( A ),一个 14位的程序计数器( PC ),一个 14位的映像程序计数器(SPC )和一个 2位的状态码寄存器(CCR )。
CCR 包含 2个状态标志,提供给像 BCS 和 BEQ 等条件跳转指令来使用。
图 1-1为 RS08 CPU 寄存器。
图 1-1. RS08 CPU 寄存器
RS08使用指导,第 1版
8位通用累加器A是RS08 CPU的基本数据寄存器。
利用LDA指令可以将数据从存储器中读到A中,利用STA指令可以将数据从A中写入存储器中。
新增加的2条指令SHA和SLA可以分别完成累加器A与映像程序计数器(SPC)的高8位和低8位的数据交换。
程序计数器(PC)中存放下一条指令的地址或操作数,由于RS08的程序计数器长度为14位,意味着RS08的最大寻址空间为16K字节。
在HC08/S08中,在使用JSR和BSR指令调用子程序时,PC返回值以堆栈方式放在RAM中;在RS08中,由于没有RAM堆栈机制,所以返回的地址保存在SPC寄存器中,在完成子程序调用后,RTS指令会从SPC 中恢复PC的值。
SPC只能保存单层的地址,所以嵌套的子程序调用必须利用软件堆栈来完成。
用户程序可以先利用SHA和SLA指令来分别完成A与SPC的高字节和低字节的内容交换,然后堆栈在RAM中。
状态寄存器(CCR)的状态位(Z和C)反应前一数学运算或其他运算的结果。
位的定义与HC08/S08中的定义相同,详细定义信息请参考RS08内核参考手册。
1.1.2 特殊寄存器
除了CPU寄存器,还有两个内存映射寄存器与内核地址产生紧密相关;这就是间接数据寄存器(D[X])和索引寄存器(X),它们的地址分别位于$000E和$000F。
如图2所示。
寄存器D[X]和X共同实现间接数据寻址;读取寄存器D[X]时,X寄存器内容为对应寄存器的地址。
图1-3说明了间接寻址方案。
X和D[X]寄存器不是CPU内部寄存器,但是它们与RS08通用指令集的无缝集成形成了伪指令集。
1.1.3 通用寻址模式
每当MCU从存储器读/写数据时,都会使用一种寻址模式来判断数据的实际地址。
表1-1总结了RS08平台支持的通用寻址模式。
G
e
n
e
r
a
l
B
u
s
i
n
e
s
s
I
n
f
o
r
m
a
t
i
on飞思卡尔半导体
1.1.3.1 与HC08/S08 通用的寻址模式
固定寻址、直接寻址、相对寻址、立即数寻址和扩展寻址等寻址模式在RS08中的操作与在HC08/S08中的操作相同。
固定寻址模式用在当CPU已经知道要完成指令的所有的信息并且在源代码中不提供任何的寻址信息。
相对寻址模式用于跳转指令中明确指定相对于程序计数器的地址偏移量。
立即数寻址用于当在一条指令中给出具体数值,这个值位于该指令操作码后面。
直接寻址模式用于访问在直接地址空间(从$0000到$00FF)的操作数。
扩展寻址模式用于中含有2字节操作数的指令,这种模式仅用于JMP和JSR指令中,指令中在操作数中给出14位的目标地址。
1.1.3.2 微短寻址模式
RS08平台中引入微短寻址模式,该寻址模式与直接寻址模式具有相似的操作,但是寻址空间受到限制,只有直接寻址的可访问空间(在$0000 - $00FF范围内)的部分空间能够被微短寻址模式访问到。
当然,与这些寻址模式相关的所有指令都是单字节指令,最大限度的使用这些指令可以减少整个的代码长度。
微寻址模式适用于地址影像中前16字节空间的寻址,从$0000到$000F,对应的指令有加1(INC)指令、减
1(DEC)指令,加(ADD)指令以及减(SUB)指令。
直接寻址模式中有同样功能的2字节指令,寻址空间从$0000到$00FF。
用户在源程序中在操作数之前加上小于号(<),可以强迫汇编编译器使用微寻址指令。
INC <$0D
DEC <$0D
ADD <$0D
SUB <$0D
短寻址模式用于访问前32字节的空间,从$0000到$001F,适用于清除(CLR)指令,加载累加器A(LDA)指令和存储累加器A(STA)指令。
用户在源程序中在操作数之前加上小于号(<),可以强迫汇编编译器使用短寻址指令。
CLR<$1F
LDA <$1F
STA <$1F
1.1.3.3 伪寻址模式
在使用特殊寄存器D[X]和X时,RS08通用指令集可以被用来模拟HC08/S08架构中的累加器X的操作。
这种模拟由汇编程序/编译器支持,在编译过程中完成。
当需要零偏移索引指令或与寄存器X相关的指令时,用户可以在RS08程序中使用与HC08/S08相同的编辑语法。
在编译中汇编程序会转换RS08伪指令为等同的通用RS08指令,这个操作对用户是透明的。
下面总结由RS08架构支持的伪寻址模式:
❿伪固定寻址-例如:TSTX,DBNZX等伪固定寻址是利用等同的直接寻址模式模拟,操作数通过X寄存器(位置:$000F)加载。
有的操作,像DECX和INCX,可利用微短寻址模式指令,则伪指令变为单字节指令。
❿伪直接寻址-例如:LDX $20,STX $20是通过直接-直接移动(MOV)操作来模拟的。
LDX操作等同于移动操作数到X寄存器($000F);STX操作把X寄存器($000F)中的内容到操作数的目标地址。
❿伪立即数寻址-例如:LDX #$09是通过立即数-直接移动(MOV)操作来模拟的。
X寄存器直接加载指定的数据。
❿伪零偏移索引寻址-例如:ADD ,X是通过操作数总是从D[X]寄存器加载的直接寻址操作来模拟。
D[X]寄存器保存的间接数据的地址在X寄存器中;从而在D[X]寄存器上的操作等同于HC08/S08中的零偏移索引寻址。
RS08平台中保留相同与HC08/S08风格的译码语法,这样可以帮助用户方便的在这些平台之间移植源代码。
下面是一些代码例子:
LDA ,X
ADD ,X
DBNZ ,X,rel
注意
伪指令基于模拟完成的,都有等同的HC08/S08操作;然而,在CPU的时钟周期计
数和指令字节数计数上是不同的。
在从HC08/S08平台向RS08平台移植源代码的时
候要特别注意定时要求严格的软件。
1.2 RS08 指令集
RS08的CPU内核可以认为是简化版的S08内核。
为保持源代码的兼容性,在RS08架构中保留了大部分的算术指令,但去除了用于复杂运算的一些指令:半位元交换(NSA)、乘(MUL)和除(DIV)。
由于没有堆栈机制,在RS08指令去掉了包含堆栈指针操作的指令;同样,状态寄存器(CCR)包括Z和C 两个状态标志位,所以在RS08指令中只有包含这两个位的条件转移指令。
表1-2总结了RS08和HC08/S08指令集的差别
注意:1这是伪指令,CPU周期计数和指令周期计数可能与S08等同的指令不同。
2这个模拟操作在S08指令集中没有等同的操作。
1.2.1 微短寻址模式指令
微短寻址模式指令是单字节指令,大量的使用可以有效提高整个代码的密度;所以尽可能的在16k空间上使用这些指令,并将常用的变量放在微短寻址模式可寻址空间中。
表1-3总结了RS08支持的微短寻址的指令。
表1-3. RS08微短寻址的指令
1.2.2 伪指令
使用位于$000F的X寄存器和位于$000E的D[X]寄存器,就可以模拟大部分的HC08/S08零偏移索引寻址指令和累加指令。
这种索引寻址实际上可以执行所有的直接寻址模式指令。
表1-4总结了RS08支持的所有的伪指令和操作。
注意指令的转换在汇编程序编译过程中完成,这个过程对用户是透明的。
表1-4. RS08的伪指令
1.3 存储器分页结构
RS08指令集中没有扩展寻址能力,在为分页访问保留的直接页中有一个64字节的所谓的分页窗口,位于$00C0到$00FF;通过分页窗口,更高地址的的存储空间可以通过访问直接页访问到。
RS08整个地址空间为16K字节,被分成256页,每页64字节。
通过程序设定PAGESEL寄存器($001F),就可以定义通过分页窗口访问的页。
图1-4说明了存储空间分页结构。