powerpc寄存器学习笔记

今天谈一下E500中的系统级寄存器,也就是在内核态可以访问的寄存器,主要给操作系统用的。这里主要说的是比较通用的几个寄存器,与中断,Cache和MMU有关的将在后面谈到这些内容的时候涉及到。

首先说一下访问系统级寄存器的指令:mfspr和mtspr。E500会对各个寄存器进行编址,一般指令形式就是“mtspr 268, r3”或者“mfspr r3, 268”。

MSR(Machine State Register)寄存器。用于设置CPU核心的状态,初始化CPU时第一个设置的寄存器。不过这个寄存器不能通过mfspr/mtspr指令对访问,有一对特殊的指令mfmsr/mtmsr。其中有几个重要的位需要提一下:
UCLE(User-mode Cache Lock Enable,第37位)。为1时程序运行在用户模式也可以锁定Cache行。
SPE(SPE Enable,第38位)。为1时使能SPE。
WE(Wait State Enable,第45位)。与HID0寄存器的DOZE,NAP和SLEEP位联合使用可以设置E500进入等待模式。
CE(Critical Enable,第46位),ME(Machine Check Enable,第51位),DE(Debug Interrupt Enable,第54位)。用于使能和关闭Critical异常,Machine check异常和Debug异常。
EE(External Enable,第48位)。为1时使能外部中断,为0时屏蔽外部中断。当处理器进入中断处理时会自动屏蔽该位。使用方法与MIPS的SR(IE)位很象。同时E500还提供了wrtee和wrteei指令对该位进行修改,就像MIPS中的ei与di指令。
PR(第49位)。为0表示处理器在内核模式,为1表示处理器在用户模式。
IS,DS(第58,59位)。E500支持两个地址空间——0和1。IS为0表示当前程序使用指令空间0,为1表示当前程序使用指令空间1;DS为0表示当前程序使用数据空间0,为1表示当前程序使用数据空间1。

PVR(Processor Version Register)寄存器。存放当前处理器使用的PowerPC内核的版本号。
SVR(System Version Register)寄存器。存放当前处理器的版本号。
HID0(Hardware Implementation-Dependent Register 0)寄存器。这个寄存器中有几个位与时钟有关需要说一下:
EMCP位为1时使能MCP#引脚。
DOZE,NAP与SLEEP位与功耗管理有关。
TBEN位使能TB(Time Base)寄存器和DEC(Decrementer)寄存器,这两个寄存器可以记录处理器运行时间。DEC寄存器经常用于操作系统的时钟中断。
SEL_TBCLK位用于选择使用处理器的系统时钟还是外部RTC时钟。
HID1(Hardware Implementation-Dependent Register 1)寄存器。PLL_CFG字段用于记录系统时钟(CCB Clock)于E500内核时钟的比率。
通用SPR寄存器组。这组寄存器包括SPRG0-SPRG7与USPRG0,除USPRG0以外其余寄存器在用户模式下只读。对于SPRG0-7,用户模式下只能读SPRG3-7。注意SPRG3-7有两个地址,一个用于一个用于读操作,一个用于写操作。例如,S

PRG4的读地址是260,写地址是276。这组寄存器主要用于操作系统的特殊操作,比如SPRG3用来保存进程的thread_struct地址。这个使用在缺页处理中,方便查找页表。由于在上下文切换时,将mm->pgd赋给了thread.pgdir,所以可以通过SPRG3直接找到页表的基地址,可以加快查表速度。MIPS利用pgd_current全局变量,保存当前进程的页表基地址,以加快查表速度,因为MIPS并没有一个寄存器保存thread_struct的地址。这里要注意,每个进程的页表基地址其实都是保存各自在mm->pgd中的,这些只是为了加快查表速度。
对于其他系统级寄存器,请参考E500的手册。

相关主题
相关文档
最新文档