PANCHIP RISC 架构简述¶
PANCHIP RISC架构指令固定长度为16
位,数据为8
位。
存储器¶
存储器分为4大类。
存储器名称 |
地址空间 |
描述 |
---|---|---|
|
栈区,为纯硬件栈,软件无法访问 |
|
|
|
代码区,软件只读 |
|
|
数据区,软件可读写,支持位操作 |
|
|
扩展数据区,软件可读写,不支持位操作 |
stack区¶
栈区是有限的,例如PAN221x
的栈深度为8
级,一级即两个字节,因此PAN221x
共16
字节栈区。
栈不对软件开放,仅在函数调用或中断时,内核将自动进行栈操作:
函数调用:
PCL
,PCH
依次入栈;函数返回:
PCH
,PCL
依次出栈;中断进入:
ACC
,STATUS
,PCL
,PCH
依次入栈;中断返回:
PCH
,PCL
,STATUS
,ACC
依次出栈。
可以看到每一次函数调用将会占用两字节,因此如果中断发生,当函数调用深度达到8
级时,将总共占用16
字节栈;如果算上中断(占用4
字节),那么如果栈只有8
级,则为安全起见,函数调用最大深度应保持在6
级内。
注意
如果函数调用深度过大,导致栈溢出,则会引起内核错乱。
code区¶
code区主要用于放置程序指令,也可以放置常量数据,仅可通过movc
指令进行读取。
xdata区¶
扩展数据区,仅支持两种访问方式:
访问方式 |
可访问地址范围 |
描述 |
---|---|---|
直接访问 |
|
使用指令 |
间接访问 |
|
使用寄存器 |
某些芯片没有该区域,也就不支持相应的指令,例如PAN221x
。
存储器寻址¶
寻址方式共4
种:
寻址方式 |
描述 |
---|---|
寄存器寻址 |
仅累加器 |
直接寻址 |
data区和xdata |
间接寻址 |
code区间接寻址使用寄存器 |
位寻址 |
仅data区支持位寻址 |
子程序过程¶
子程序通过call
指令进行调用,通过ret
指令返回。
子程序过程如下:
父程序调用子程序(
call
指令);PCL
,PCH
依次入栈(硬件自动);跳转到子程序地址进行执行(
PC
=子程序地址);子程序程序执行结束,返回(
ret
指令);PCH
,PCL
依次出栈(硬件自动);跳转到父程序对应位置继续执行(
PC=(PCH<<16)|PCL
)。
call instruction
|
current instruction at ADDR--- | --- current PC is ADDR+1
|
parent |==============================||========================>
||
push PCL--------------------- / \ ----------pop PCL
push PCH-------------------- / \ ---------pop PCH
PC=child_program_address--- / \
/ \
child |=========>|
|
ret instruction
中断过程¶
PANCHIP RISC 架构中断只有一个入口地址,即是所有中断都汇集到一个入口,具体是什么中断需要软件自行判断,因此也不存在硬件中断优先级。中断入口地址一般为code区地址8
。
中断的过程如下:
发生中断;
ACC
,STATUS
,PCL
,PCH
依次入栈(硬件自动);跳转到中断入口地址执行中断服务程序(
PC
=中断入口地址);中断服务程序执行结束,触发中断退出(
reti
指令);PCH
,PCL
,STATUS
,ACC
依次出栈(硬件自动);跳转到主程序发生中断处继续执行(
PC=(PCH<<16)|PCL
)。
interrupt here
|
current instruction at ADDR--- | --- current PC is ADDR+1
|
main |==============================||========================>
||
push ACC--------------------- / \ ------------pop ACC
push STATUS----------------- / \ -----------pop STATUS
push PCL------------------- / \ ----------pop PCL
push PCH------------------ / \ ---------pop PCH
PC=interrupt_entry------- / \
/ \
isr |=============>|
|
reti instruction
不支持操作系统¶
因为栈为纯硬件栈,软件无法操作,因此不支持操作系统。