通用寄存器和系统寄存器

内核寄存器有两种类型:

                                                通用寄存器(GPR)

                                                核心特殊功能寄存器(CSFRs)。

GPRs由16个通用数据寄存器和16个通用地址寄存器组成。

CSFRs控制内核的运行并提供内核的状态信息。

                                        通用寄存器

                                        系统寄存器(PSW, PC, PCXI)

                                        堆栈管理寄存器是(A[10]和ISP)

                                        SYSCON和CPU_ID寄存器

                                        Trap寄存器

                                        上下文管理寄存器

                                        内存保护寄存器

                                        内存管理寄存器

                                        调试寄存器

                                        浮点寄存器

                                        核心相关的特殊函数寄存器

重置值

需要注意的是,由于本文描述的是TriCore体系结构,而不是该体系结构的实现,因此没有给出一些重置值。如果没有给出,则这些值是特定于实现的。

ENDINIT保护

该体系结构支持初始化状态先于操作状态的概念。当处于初始化状态时,可以使用MTCR指令修改所有核心特殊函数寄存器。在运行状态下,只能以这种方式修改CSFR的子集。

所有其他函数在这些状态之间保持相同。仅在初始化状态下可写的CSFR被描述为ENDINIT保护。

初始化状态和操作状态之间的转换由系统实现控制。此功能仅允许在初始化状态下更改关键CSFR,从而为它们增加了额外的保护级别。

以下寄存器受ENDINIT保护:

BTV, BIV, ISP, PMAO, PMA1, PMA2, PCONO, DCONO, SEGEN

提供了一个安全特定版本的ENDINIT保护。

以下寄存器是受SAFETY_ENDINIT保护的:

SMACON、SYSCON、COMPAT、TPS_EXTIM_ENTRY_LVAL、 TPS_EXTIM_EXIT_LVAL


1、 通用寄存器

General Purpose Registers (GPRs) 

通用寄存器(GPR)平均分为:

                                        16个数据寄存器(DGPR), D[0] ~ D[15]

                                        16 个地址寄存器(AGPR), A[0] ~ A[15]

数据和地址寄存器的分离促进了算术和内存操作并行执行的高效实现。有几个指令允许在数据和地址寄存器之间交换信息(例如,用于创建或派生表索引)。为了支持64位值,可以将两个连续的奇偶数据寄存器连接起来,形成8个扩展寄存器(E[0]、E[2]、E[4]、E[6]、E[8]、E[10]、E[12]和E[14])。地址寄存器(P[O]、P[2]、P[4]、P[6]、P[8]、P[10]、P[12]和P[14])也可以以同样的方式使用。

寄存器A[0]、A[1]、A[8]、A[9]定义为系统全局寄存器。它们的内容不会在调用、陷阱或中断之间被保存或恢复。寄存器[10]被用作SP (Stack Pointer)。

寄存器[11]用于存储调用和链接跳转的返回地址(RA),以及存储中断和陷阱的返回程序计数器(PC)值。

虽然32位指令可以无限制地使用GPRs,但许多16位指令隐式地使用A[15]作为地址寄存器,D[15]作为数据寄存器。这种隐式使用简化了将这些指令编码为16位的过程。

通过使用奇数/偶数寄存器对,提供了对64位数据值的支持。在汇编程序语法中,这些寄存器对要么被称为一对32位寄存器(例如D[9]/D[8]),要么被称为扩展的64位寄存器。例如,E[8]是D[9]和D[8]的串接,其中D[8]是E[8]中最不重要的字。为了支持扩展寻址模式,偶数/奇数地址寄存器对将扩展地址引用保存为一对32位地址寄存器(例如[8]/[9])。

没有单独的浮点寄存器。数据寄存器用于执行浮点运算。使用快速上下文切换支持自动保存和恢复浮点数据。

GPRs是任务上下文的重要组成部分。当在内存中保存或恢复一个任务的上下文时

上下文被分为上层和下层上下文:

                                寄存器A[2]到A[7]和D[0]到D[7]是下层上下文的一部分

                                寄存器A[10] ~ A[15]和D[8] ~ D[15]是上层上下文的一部分

2 、程序状态信息寄存器

Program State Information Registers   

PC、PSW和PCXI寄存器保存和反映程序状态信息。当内容在这个过程中被存储、恢复或修改时,这些寄存器是存储和恢复任务上下文的重要部分。

                        PC:程序计数器

                        PSW:程序状态字

                        PCXI:以前的上下文信息程序计数器

32位程序计数器(PC)

保存着当前正在运行的指令的地址。程序计数器是任务状态信息的一部分。PC应该只在内核停止时写入。如果核心没有处于半状态,则写操作将不起作用。

程序状态字寄存器(PSW)是一个32位寄存器,它包含在通用寄存器值中没有捕获的特定于任务的体系结构状态。

下半部保存与保护系统相关的控制值和参数,包括:

                                                        保护寄存器设置(PRS)

                                                        I/O特权级别(IO)

                                                        中断堆栈标志(IS)

                                                        全局寄存器写权限标志(GW)

                                                        调用深度计数器(CDC)

                                                        调用深度计数使能字段(CDE)

PSW用户状态位

PSW的八个最高有效位被指定为用户状态位。这些位可以作为用户指令的执行副作用设置或清除,通常记录结果状态。单个比特也可以用来约束特定指令的操作。例如ADDX (Add Extended)和ADDC (Add with Carry)指令使用31位记录Add操作的执行,该位的预执行值反映在ADDC指令的结果中。

有两类指令使用用户状态位:

PSW的位[23:16]是保留位,在当前版本的架构中没有明确的用途。当PSW在系统复位后通过MFCR(从核心寄存器移动)指令读取时,它们读为0。

在通过MTCR(移动到核心寄存器)指令写入PSW后,它们的值在架构上是未定义的,应该写为0。

                可能产生进位和溢出结果的算术指令。

                特定于实现的协处理器指令,它可以以完全特定于实现的方式使用任何8位或全部8位。

访问权限级别控制(I/O权限)

软件管理任务(SMTs)是通过实时内核或操作系统的服务创建的,并在调度软件的控制下进行调度。中断服务例程(ISRs)是由硬件响应中断而分派的。ISR是处理器在接收到中断时直接调用的代码。SMTs有时被称为用户任务,假设它们在用户模式下执行。

根据任务的功能,为每个任务分配了自己的模式:

User-0模式:用于不访问外设的任务。此模式不能启用或禁用中断。

User-1模式:用于访问普通、未受保护的外设的任务。通常,这将是对串行端口的读或写访问、对定时器的读访问和大多数I/O状态寄存器。该模式下的任务可能会禁用中断。(此模式的默认行为可能被系统控制寄存器覆盖)。

Supervisor模式:允许对系统寄存器和所有外围设备进行读写访问。该模式下的任务可能会禁用中断。

一组状态元素与任何任务相关联,这些元素统称为任务的上下文。上下文是处理器定义关联任务的状态并允许其继续执行所需的一切。这包括任务使用的CPU通用寄存器、任务的程序计数器(PC)及其程序状态信息(PCXI和PSW)。该体系结构通过硬件有效地管理和维护任务的上下文。

先前上下文信息和指针寄存器(PCXI)

前一个上下文信息寄存器(PCXI)包含到前一个执行上下文的链接信息,支持中断和自动上下文切换。PCXI是任务状态信息的一部分。前一个上下文指针(PCX)保存前一个任务的CSA的地址。

3、 栈管理寄存器

Stack Management Registers  

体系结构中的堆栈管理支持用户堆栈和中断堆栈。地址寄存器A[10]、中断堆栈指针(ISP)和PSW位用于堆栈的管理。

A[10]被用作堆栈指针。这个寄存器的初始内容通常由RTOS在创建任务时设置,它允许将私有堆栈区域分配给各个任务。

ISP有助于防止中断服务例程(isr)访问私有堆栈区域并可能干扰软件管理任务的上下文。在该体系结构中实现了使用ISP而不是私有堆栈指针的自动切换。PSW.IS位表示哪个堆栈指针有效。当中断发生时,被中断的任务正在使用它的私有堆栈(PSW.IS == 0),则以中断任务的上层上下文保存内容,并将ISP的当前内容加载到A[10](SP)中。当发生中断或陷阱时,被中断的任务已经在使用中断堆栈(PSW.IS == 1),则不预加载A[10](SP)。中断服务程序(ISR)继续在被中断的程序离开的地方使用中断堆栈。

通常在初始化例程中只需要初始化ISP一次。但是,根据应用程序的需要,可以在执行期间修改ISP。

        注:没有什么可以阻止ISR或系统服务例程在私有堆栈上执行。在ISR中使

               A[10](SP)由应用程序程序员自行决定。

系统控制寄存器(SYSCON)

系统配置寄存器提供以下功能。

时间保护系统使能位

内存保护系统使能位

为在中断处理中被定义为PSW.S位的初始状态位设置位 

为在Trap处理中被定义为PSW.S位的初始状态位设置位              

使能user - I0模式外设访问。

Disable for User-1 I0模式启用和禁用中断

启动停止状态和释放位。

空闲上下文列表耗尽条件的状态指示器。

                注:除了FCDSF位之外,这个寄存器是SAFETY_ENDINIT保护的。

CPU标识寄存器(CPU_ID)

标识寄存器标识所使用的处理器类型和版本。这里只描述CPU核心ID寄存器。所有其他ID寄存器在产品文档中都有描述。CPU标识寄存器标识CPU类型和版本。

核心识别寄存器(CORE_ID)

在多处理器系统中,每个逻辑处理器核心被赋予一个唯一的标识号。核心标识寄存器保存这个号码。


4 、兼容模式寄存器

Compatibility Mode Register (COMPAT) 

COMPAT寄存器允许实现选择性地强制功能与以前版本的兼容性。


5 、访问控制寄存器

Access Control Registers 

SIST模式访问控制寄存器(SMACON)

实现可以使用SMACON寄存器控制系统测试软件(SIST)系统的操作。这个寄存器的内容是特定于实现的。

 
6 、中断寄存器

Interrupt Registers 

体系结构中典型的服务请求控制寄存器保存单个控制位,以启用或禁用请求,分配优先级号码,并将请求定向到其中一个服务提供者。


7 、内存保护寄存器

Memory Protection Registers 

内存保护寄存器集的数量是特定于体系结构的每个实现的。最多可以有8个集合(一个集合包括数据集和代码集)。每个寄存器集由几个范围寄存器(也称为范围表项)组成。每个范围表项由一个段保护寄存器对和一个公共模式寄存器内的位域组成。寄存器对指定内存范围的下限和上限地址。

  
8、 陷阱寄存器

Trap Registers 

控制陷阱寄存器的核心特殊功能寄存器(CSFR)

  
9、 内存设置寄存器

Memory Configuration Registers 

内存配置寄存器是在体系结构中定义的,但是寄存器的内容是特定于实现的。

  
10 、内核Debug控制寄存器

Core Debug Controller Registers   

支持调试的TriCore寄存器


11、 浮点单元寄存器

Floating Point Registers

可选的TriCore浮点单元的寄存器

    
12、 访问内核特殊功能寄存器

Accessing Core Special Function Registers (CSFRs) 

核心特殊功能寄存器用MFCR(从核心寄存器移动)指令读取,用MTCR(移动到核心寄存器)指令写入。通常很少需要对csfr进行软件更新。因此,实现不需要实现硬件结构,以避免csfr更新可能导致的危险情况。通过在CSFR的MTCR更新之后立即插入ISYNC指令,可以避免这种危险情况。ISYNC指令确保所有后续指令都能正确看到CSFR更新的效果。访问未定义寄存器位置的MTCR指令将不起作用。访问未定义的寄存器位置的MFCR指令将返回未定义的数据。

  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值