图4.2.1 存储空间映射图(uPD78F0547D)
4.2.2 程序存储器
NEC单片机内部程序存储空间用于存储程序和表数据,一般通过程序计数器(PC)来寻址。uPD78F0547D内部ROM(闪存)的容量为:131072×8位(0000H~-7FFFH(公共区域:32KB)+8000H-BFFFH(存储器组区域:16KB)×6)
内部程序存储空间主要分为以下几个区域。
1 向量表区域
内部程序存储空间从0000H到003FH总共64字节作为向量表区域。在向量表中存放的是根据复位信号输入或每个中断请求的产生进行转移的程序的起始地址。在每个16位地址中,低8位是偶地址,高8位是奇地址。
向量表地址
|
中断源
|
向量表地址
|
中断源
|
0000H
|
RESET输入,POC,LVI,WDT
|
0022H
|
INTTM010
|
0004H
|
INTLVI
|
0024H
|
INTAD
|
0006H
|
INTP0
|
0026H
|
INTSR0
|
0008H
|
INTP1
|
0028H
|
|
000AH
|
INTP2
|
002AH
|
INTTM51
|
000CH
|
INTP3
|
002CH
|
INTKR
|
000EH
|
INTP4
|
002EH
|
INTWT
|
0010H
|
INTP5
|
0030H
|
INTP6
|
0012H
|
INTSRE6
|
0032H
|
INTP7
|
0014H
|
INTSR6
|
0034H
|
INTIIC0/INTDMU
|
0016H
|
INTST6
|
0036H
|
INTCSI11
|
0018H
|
INTCSI10/INTST0
|
0038H
|
INTTM001
|
001AH
|
INTTMH1
|
003AH
|
INTTM011
|
001CH
|
INTTMH0
|
003CH
|
INTACSI
|
001EH
|
INTTM50
|
003EH
|
BRK
|
0020H
|
INTTM000
|
|
表4.2.1 向量表
2 CALLT指令表区域
0040H至007FH共64字节的区域,可存放1字节调用指令(CALLT)的子程序入口地址。
3 选项字节区域
0080H~0084H和1080H~1084H各5字节的区域可以用作选项字节区域。当不使用引导交换功能时,在0080H~0084H设置选项字节;而当使用引导交换功能时,在0080H~0084H和1080H~1084H设置选项字节。
4 CALLF指令入口区域
0800H~0FFFH的区域,用于子程序的直接调用,通过一个2字节的调用指令(CALLF)实现。
5 片上调试安全ID设置区域
0085H~008EH和1085H~108EH各10字节区域可用作片上调试安全ID设置区域。不使用引导交换功能时,在0085H~008EH区域设置片上调试安全ID;而当使用引导交换功能时,在0085H~008EH和1085H~108EH区域设置。
4.2.3 内部数据存储器
uPD78F0547D包括以下几种RAM。
1 内部高速RAM
uPD78F0547D内部高速RAM共有 1024×8位(FB00H~FEFFH)的空间,其中FEE0H~FEFFH共32字节的区域分配给4组通用寄存器,每组都由8个8位寄存器组成。内部高速RAM不可以用作写和执行指令的程序区域,可以作为堆栈存储器使用。
2 内部扩展RAM
uPD78F0547D内部扩展RAM共有6144×8位(E000H~F7FFH)的空间,与内部高速RAM类似,内部扩展RAM可作为普通数据区域,同时也可作为写和执行指令的程序存储区域,但是内部扩展RAM不能用作堆栈。
4.2.4 处理器寄存器
uPD78F0547D包含以下几种处理器寄存器。
1 控制寄存器
控制寄存器用于控制程序执行的顺序、状态和堆栈空间。程序计数器(PC)、程序状态字(PSW)和堆栈指针寄存器(SP)都属于控制寄存器。
(1) 程序计数器(PC)
程序计数器是一个16位寄存器,用于存放下一条即将要执行的指令的地址。在正常情况下,根据获取的指令字节数,程序计数器(PC)的值会自动累加。当执行分支指令时,则设置立即数和寄存器内容。
复位信号的产生将复位向量表中地址为0000H和0001H中的值赋给程序计数器。
PC15
|
PC14
|
PC13
|
PC12
|
PC11
|
PC10
|
PC9
|
PC8
|
PC7
|
PC6
|
PC5
|
PC4
|
PC3
|
PC2
|
PC1
|
PC0
|
表4.2.2 程序计数器格式
(2) 程序状态字(PSW)
程序状态字(PSW)是一个8位寄存器,由各种标志位组成,通过指令执行对其进行设置或复位。根据中断请求的产生或PUSH PSW指令执行,程序状态字的内容自动入栈;通过执行RETB,RETI和POP PSW指令,程序状态字的值自动恢复。
复位信号的产生将程序状态字的内容设置为02H。
IE
|
Z
|
RBS1
|
AC
|
RBS0
|
0
|
ISP
|
CY
|
表4.2.3 程序状态字格式
中断允许标志(IE)用于控制CPU响应中断请求操作。
当IE为0时,表示不允许中断(DI),即禁止所有可屏蔽中断请求。
当IE为1时,表示允许中断(EI),通过优先服务标志(ISP)、用于各种中断源的中断屏蔽标志以及优先级规定标志来完成响应中断请求的控制。
当执行DI指令或中断请求得到响应时,该标志复位(0);当执行EI指令时,该标志设置为1。
零标志(Z)当操作结果为0时,置1,其他情况置0。
寄存器组选择标志(RBS0和RBS1) 用于寄存器组的选择
寄存器组选择标志有两位,用于选择四组寄存器中的一组。标志位中存储的信息用来指明执行SEL RBn 指令时所选择的寄存器组。
半进位标志(AC) 当操作结果中第3位有进位或在第3位上有借位,置1,其他情况该标志置0。
优先服务标志(ISP)用来管理可屏蔽向量中断响应的优先级。当ISP为0时,由优先级指定标志寄存器(PR0L,PR0H,PR1L,PR1H)指定为低优先级的向量中断请求被禁止响应。对请求的实际响应是由中断允许标志(IE)的状态控制的。
进位标志(CY)存储的是在执行加减指令时出现的进位或借位。它也存储循环指令执行中的转移值,还可以在位操作指令执行中作为位累加器使用。
堆栈指针(SP)是一个16位的寄存器,用来存放存储器堆栈区的起始地址。只有内部高速RAM区域才能被设置为堆栈区。
SP15
|
SP14
|
SP13
|
SP12
|
SP11
|
SP10
|
SP9
|
SP8
|
SP7
|
SP6
|
SP5
|
SP4
|
SP3
|
SP2
|
SP1
|
SP0
|
表4.2.4 堆栈指针格式
在向堆栈写(存)数据时,堆栈指针SP递减,而从堆栈中读出(恢复)数据时,堆栈指针累加。使用时须注意,由于复位信号产生时,SP的内容不确定,所以在使用堆栈前必须先对SP初始化。
2 通用寄存器
通用寄存器映射到数据存储器特定的地址空间为FEE0H~FEFFH。通用寄存器共有四组,每一组由8个8位寄存器(X,A,C,B,E,D,L和H)组成。此外每个寄存器可作为一个8位寄存器使用,两个成对的8位寄存器可作为一个16位寄存器(AX,BC,DE和HL)使用。
描述通用寄存器时,可以使用功能名称(X,A,C,B,E,D,L,H,AX,BC,DE和HL)或绝对名称(R0~R7,RP0~RP3)。
选择执行的寄存器组,由CPU控制指令(SEL RBn)来设置。由于4个寄存器组的结构,通过一个用于正常处理的寄存器和另一个用于中断处理的寄存器之间的切换,可以创建一个高效率的程序。
(a)功能名称
(b)绝对名称
图4.2.2 通用寄存器结构
3 特殊功能寄存器(SFR)
特殊寄存器指定在FF00H到FFFFH区域。与通用寄存器不同,每个特殊功能寄存器都有特定的功能。特殊功能寄存器可像通用寄存器那样用运算指令、传送指令以及位操作指令进行操作。根据特殊功能寄存器的类型不同,可操作的位单元也不同,可以是1位、8位和16位。
表4.2.5为特殊功能寄存器列表。表中术语的含义如下。
符号表示特殊功能寄存器地址的符号,在RA78K0中是保留字,并使用CC78K0中的#pragmasfr指令定义为一个sfr变量。在使用RA78K0,ID78K0-QB和78K0/KX2的SM+时,可以将符号作为指令操作数执行写操作。
R/W表示特殊功能寄存器可读或可写。R/W:可读/写;R:只读;W:只写。
可操作的位单元表示可操作的位单元(1,8,或16)。“−”表示不可操作的位单元。
复位后表示复位信号产生后每个寄存器的状态