第2章编程模型 2.2.15 内核控制寄存器 如寄存器2-2所示,16位CPU内核控制寄存器(CORCON)用来对CPU的配置进行设定。该 寄存器的功能包括: ·将程序存储空间映射到数据存储空间 ·使能ACCA和ACCB的饱和功能 ·设定数据空间写饱和模式 ·设定累加器饱和和舍入模式 ·设定DSP操作的乘法器模式 ·提前终止DO循环 在器件复位时,CORCON设定为OxO020,设置以下工作模式: 2 ·程序存储空间未映射到数据存储空间(PSV=0) ·禁止ACCA和ACCB饱和(SATA=O,SATB=O) ·使能数据空间写饱和(SATDW=1) ·累加器饱和模式设定为普通(ACCSAT=0)》 ·设定累加器舍入模式为无偏型(RND=O) ·DSP乘法模式设置为有符号小数类型(US=0,IF=0) 除设置CPU模式外,CORCON还包含DO循环嵌套等级(DL<2:O>)的信息以及表明是否正在 处理陷阱异常的PL<3>状态位。 2.2.16 影子寄存器 影子寄存器用作暂存寄存器。在某些事件发生时,影子寄存器与其相关主寄存器之间能够实现存 储内容的传送。编程模型中的一些寄存器具有影子寄存器。在D0、POP.S或PUSH.S指令的执 行过程中,将会使用到这些影子寄存器。表2-2给出了影子寄存器的使用。 表2-2: 自动影子寄存器使用 地址 DO POP.S/PUSH.S DCOUNT 使用 DOSTART 使用 DOEND 使用 STATUS寄存器一 一 使用 DC,N,OV,Z和C位 W0 -W3 一 使用 由于DCOUNT、DOSTART和DOEND寄存器都具有影子寄存器,因此可在没有额外开销的情 况下实现DO循环嵌套的功能。所有影子寄存器的深度皆为一个寄存器,因此可实现一级DO循 环嵌套。在CORCON寄存器DO循环嵌套等级状态位CORCON<10:8>的支持下,在程序中可 实现更多级DO循环嵌套。 注: 所有影子寄存器的深度皆为一个寄存器,且不能对其进行直接访问。更多级影子功 能可通过软件堆栈用软件实现。 2006 Microchip Technology Inc. 初稿 DS70157BCN第2-9页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 2-9 页 第 2 章 编程模型 编程模型 2 2.2.15 内核控制寄存器 如寄存器 2-2 所示,16 位 CPU 内核控制寄存器(CORCON)用来对 CPU 的配置进行设定。该 寄存器的功能包括: • 将程序存储空间映射到数据存储空间 • 使能 ACCA 和 ACCB 的饱和功能 • 设定数据空间写饱和模式 • 设定累加器饱和和舍入模式 • 设定 DSP 操作的乘法器模式 • 提前终止 DO 循环 在器件复位时, CORCON 设定为 0x0020,设置以下工作模式: • 程序存储空间未映射到数据存储空间 (PSV = 0) • 禁止 ACCA 和 ACCB 饱和 (SATA = 0, SATB = 0) • 使能数据空间写饱和 (SATDW = 1) • 累加器饱和模式设定为普通 (ACCSAT = 0) • 设定累加器舍入模式为无偏型 (RND = 0) • DSP 乘法模式设置为有符号小数类型 (US = 0, IF = 0) 除设置 CPU 模式外,CORCON 还包含 DO 循环嵌套等级(DL<2:0>)的信息以及表明是否正在 处理陷阱异常的 IPL<3> 状态位。 2.2.16 影子寄存器 影子寄存器用作暂存寄存器。在某些事件发生时,影子寄存器与其相关主寄存器之间能够实现存 储内容的传送。编程模型中的一些寄存器具有影子寄存器。在 DO、 POP.S 或 PUSH.S 指令的执 行过程中,将会使用到这些影子寄存器。表 2-2 给出了影子寄存器的使用。 由于 DCOUNT、 DOSTART 和 DOEND 寄存器都具有影子寄存器,因此可在没有额外开销的情 况下实现 DO 循环嵌套的功能。所有影子寄存器的深度皆为一个寄存器,因此可实现一级 DO 循 环嵌套。在 CORCON 寄存器 DO 循环嵌套等级状态位 CORCON<10:8> 的支持下,在程序中可 实现更多级 DO 循环嵌套。 表 2-2: 自动影子寄存器使用 地址 DO POP.S/PUSH.S DCOUNT 使用 — DOSTART 使用 — DOEND 使用 — STATUS 寄存器— DC, N, OV, Z 和 C 位 — 使用 W0 - W3 — 使用 注: 所有影子寄存器的深度皆为一个寄存器,且不能对其进行直接访问。 更多级影子功 能可通过软件堆栈用软件实现
dsPIC30F33F程序员参考手册 寄存器2-1: SR,STATUS寄存器 高位字节(SRH): R-0 R-0 R/C-0 R/C-0 R-0 R/C-0 R-0 R/W-0 OA OB SA SB OAB SAB DA DC bit 15 bit 8 低位字节(SRL): R/W-0 RM-0 RMW-0 R-0 R/-0 R/W-0 R/W-0 RM-0 IPL<2:0> RA N OV Z C bit 7 bit 0 bit 15 OA:累加器A溢出位 1=累加器A溢出 0=累加器A未溢出 bit 14 OB:累加器B溢出位 1=累加器B溢出 0=累加器B未溢出 bit 13 SA:累加器A饱和位(1,) 1=累加器A饱和或在某刻已处于饱和 0=累加器A未饱和 bit 12 SB:累加器B饱和位 1=累加器B饱和或在某刻已处于饱和1,2) 0=累加器B未饱和 bit 11 OAB:OA‖OB联合累加器溢出位 1=累加器A或B溢出 0=累加器A或B皆未溢出 bit 10 SAB:SA‖SB联合累加器饱和位(1,2,3) 1=累加器A或B饱和或在某刻已处于饱和 0=累加器A或B皆未溢出 bit 9 DA:DO循环激活位(④ 1=DO循环在进行 0=DO循环不在进行 bit 8 DC:MCU ALU半进位位 1=低半字节最高位发生进位 0=低半字节最高位未发生进位 bit 7-5 IPL<2:0>:中断优先级位() 111=CPU中断优先级是7(15)。禁止用户中断。 110=CPU中断优先级是6(14) 101=CPU中断优先级是5(13) 100=CPU中断优先级是4(12) 011=CPU中断优先级是3(11) 010=CPU中断优先级是2(10) 001=CPU中断优先级是1(9) 000=CPU中断优先级是0(8) bit 4 RA:REPEAT循环激活位 1=REPEAT循环在进行 O=REPEAT循环不在进行 bit 3 N:MCU ALU负位 1=操作结果为负 0=操作结果非负 bit 2 OV:MCU ALU溢出位 1=发生溢出 0=未发生溢出 DS70157BCN第2-10页 初稿 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 2-10 页 初稿 2006 Microchip Technology Inc. 寄存器 2-1: SR, STATUS 寄存器 高位字节 (SRH): R-0 R-0 R/C-0 R/C-0 R-0 R/C-0 R-0 R/W-0 OA OB SA SB OAB SAB DA DC bit 15 bit 8 低位字节 (SRL): R/W-0 R/W-0 R/W-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 IPL<2:0> RA N OV Z C bit 7 bit 0 bit 15 OA:累加器 A 溢出位 1 = 累加器 A 溢出 0 = 累加器 A 未溢出 bit 14 OB:累加器 B 溢出位 1 = 累加器 B 溢出 0 = 累加器 B 未溢出 bit 13 SA:累加器 A 饱和位 (1, 2) 1 = 累加器 A 饱和或在某刻已处于饱和 0 = 累加器 A 未饱和 bit 12 SB:累加器 B 饱和位 1 = 累加器 B 饱和或在某刻已处于饱和 (1, 2) 0 = 累加器 B 未饱和 bit 11 OAB:OA || OB 联合累加器溢出位 1 = 累加器 A 或 B 溢出 0 = 累加器 A 或 B 皆未溢出 bit 10 SAB:SA || SB 联合累加器饱和位 (1, 2, 3) 1 = 累加器 A 或 B 饱和或在某刻已处于饱和 0 = 累加器 A 或 B 皆未溢出 bit 9 DA:DO 循环激活位 (4) 1 = DO 循环在进行 0 = DO 循环不在进行 bit 8 DC: MCU ALU 半进位位 1 = 低半字节最高位发生进位 0 = 低半字节最高位未发生进位 bit 7-5 IPL<2:0>:中断优先级位 (5) 111 = CPU 中断优先级是 7 (15)。禁止用户中断。 110 = CPU 中断优先级是 6 (14) 101 = CPU 中断优先级是 5 (13) 100 = CPU 中断优先级是 4 (12) 011 = CPU 中断优先级是 3 (11) 010 = CPU 中断优先级是 2 (10) 001 = CPU 中断优先级是 1 (9) 000 = CPU 中断优先级是 0 (8) bit 4 RA: REPEAT 循环激活位 1 = REPEAT 循环在进行 0 = REPEAT 循环不在进行 bit 3 N: MCU ALU 负位 1 = 操作结果为负 0 = 操作结果非负 bit 2 OV: MCU ALU 溢出位 1 = 发生溢出 0 = 未发生溢出
第2章编程模型 寄存器2-1: SR,STATUS寄存器(续) bit 1 Z:MCU ALU零位(6) 1=操作结果为零 0=操作结果非零 bit 0 C:MCU ALU进位/借位位 1=最高位发生进位 0=最高位未发生进位 注1:可对该位进行读或清零操作,但不能置1。 2:一旦该位置1,必须由软件手动清零。 3:对该位进行清零将导致SA和SB清零。 4:该位是只读位。 2 5:IPL<2:0>位与IPL<3>位(CORCON<3>)组合形成CPU断优先级。如果IPL<3>=1,则圆括 号中的值即指PL。 6:有关ADDC、CP、SUBB和SUBBR指令的操作可参阅第4.9节“Z状态位”。 图注: R=可读位 W=可写位 C=可清零位 -n=POR时的值 1=置1 0=清零 2006 Microchip Technology Inc. 初稿 DS70157BCN第2-11页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 2-11 页 第 2 章 编程模型 编程模型 2 寄存器 2-1: SR, STATUS 寄存器 (续) bit 1 Z: MCU ALU 零位 (6) 1 = 操作结果为零 0 = 操作结果非零 bit 0 C: MCU ALU 进位 / 借位位 1 = 最高位发生进位 0 = 最高位未发生进位 注 1:可对该位进行读或清零操作,但不能置 1。 2:一旦该位置 1,必须由软件手动清零。 3:对该位进行清零将导致 SA 和 SB 清零。 4:该位是只读位。 5:IPL<2:0> 位与 IPL<3> 位(CORCON<3>)组合形成 CPU 断优先级。如果 IPL<3> = 1,则圆括 号中的值即指 IPL。 6:有关 ADDC、 CP、 SUBB 和 SUBBR 指令的操作可参阅第 4.9 节 “Z 状态位”。 图注: R = 可读位 W = 可写位 C = 可清零位 -n = POR 时的值 1 = 置 1 0 = 清零
dsPIC30F33F程序员参考手册 寄存器2-2: CORCON,内核控制寄存器 高位字节: U U U R/W-0 R(O)/W-0 R-0 R-0 R/W-0 一 US EDT DL<2:0> bit 15 bit 8 低位字节: RM-0 RM-0 RM-1 R/W-0 R/C-0 R/W-0 RM-0 RM-0 SATA SATB SATDW ACCSAT IPL3 PSV RND IF bit 7 bit 0 bit15-13未用 bit12US:无符号或有符号乘法器模式选择位 1=使能DSP乘法操作为无符号模式 0=使能DSP乘法操作为有符号模式 bit 11 EDT:提前终止DO循环控制位() 1=在当前迭代结束时终止执行DO循环 0=无影响 bit 10-8 DL<2:0>:D0循环嵌套级别状态位(2,3引 111=D0循环位于7级嵌套 110=D0循环位于6级嵌套 110=D0循环位于5级嵌套 110=D0循环位于4级嵌套 011=D0循环位于3级嵌套 010=DO循环位于2级嵌套 001=DO循环处于激活状态,但并未嵌套(仅是1级) 000=DO循环并未激活 bit 7 SATA:ACCA饱和使能位 1=使能累加器A饱和 0=禁止累加器A饱和 bit 6 SATB:ACCB饱和使能位 1=使能累加器B饱和 0=禁止累加器B饱和 bit 5 SATDW:DSP引擎对数据空间写饱和使能位 1=使能数据空间写饱和 0=禁止数据空间写饱和 bit 4 ACCSAT:累加器饱和模式选择位 1=9.31饱和(超饱和) 0=1.31饱和(普通饱和) bit 3 IPL3:中断优先级3状态位(4,5) 1=CPU中断优先级为8或更高(激活陷阱异常) 0=CPU中断优先级为7或更低(未激活陷阱异常) bit2 PSV:数据空间中的PSV使能位 1=使能数据空间中的PSV 0=禁止数据空间中的PSV DS70157B_CN第2-12页 初稿 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 2-12 页 初稿 2006 Microchip Technology Inc. 寄存器 2-2: CORCON,内核控制寄存器 高位字节: U U U R/W-0 R(0)/W-0 R-0 R-0 R/W-0 — — — US EDT DL<2:0> bit 15 bit 8 低位字节: R/W-0 R/W-0 R/W-1 R/W-0 R/C-0 R/W-0 R/W-0 R/W-0 SATA SATB SATDW ACCSAT IPL3 PSV RND IF bit 7 bit 0 bit 15-13 未用 bit 12 US:无符号或有符号乘法器模式选择位 1 = 使能 DSP 乘法操作为无符号模式 0 = 使能 DSP 乘法操作为有符号模式 bit 11 EDT:提前终止 DO 循环控制位 (1) 1 = 在当前迭代结束时终止执行 DO 循环 0 = 无影响 bit 10-8 DL<2:0>: DO 循环嵌套级别状态位 (2, 3) 111 = DO 循环位于 7 级嵌套 110 = DO 循环位于 6 级嵌套 110 = DO 循环位于 5 级嵌套 110 = DO 循环位于 4 级嵌套 011 = DO 循环位于 3 级嵌套 010 = DO 循环位于 2 级嵌套 001 = DO 循环处于激活状态,但并未嵌套 (仅是 1 级) 000 = DO 循环并未激活 bit 7 SATA: ACCA 饱和使能位 1 = 使能累加器 A 饱和 0 = 禁止累加器 A 饱和 bit 6 SATB: ACCB 饱和使能位 1 = 使能累加器 B 饱和 0 = 禁止累加器 B 饱和 bit 5 SATDW: DSP 引擎对数据空间写饱和使能位 1 = 使能数据空间写饱和 0 = 禁止数据空间写饱和 bit 4 ACCSAT:累加器饱和模式选择位 1 = 9.31 饱和 (超饱和) 0 = 1.31 饱和 (普通饱和) bit 3 IPL3:中断优先级 3 状态位 (4, 5) 1 = CPU 中断优先级为 8 或更高 (激活陷阱异常) 0 = CPU 中断优先级为 7 或更低 (未激活陷阱异常) bit 2 PSV:数据空间中的 PSV 使能位 1 = 使能数据空间中的 PSV 0 = 禁止数据空间中的 PSV
第2章编程模型 寄存器2-2: CORCON,内核控制寄存器(续) bit 1 RND:舍入模式选择位 1=使能有偏(常规)舍入 0= 使能无偏(收敛)舍入 bit o IF:整数或小数乘法模式选择位 1=使能整数模式的DSP乘法操作 0=使能小数模式的DSP乘法操作 注 1:该位总是读为0。 2:DL<2:1>为只读位。 3:DO循环嵌套的前两级由硬件处理。 4:可对该位进行读或清零操作,但不能将其置1。 2 5:该位与IPL<2:0>位(SR<7:5>)组合形成CPU中断优先级。 图注: R=可读位 W=可写位 C=可清零位 X=未知 -n=POR时的值 1=置1 0=清零 U=未用位,读作0 2006 Microchip Technology Inc. 初稿 DS70157BCN第2-13页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 2-13 页 第 2 章 编程模型 编程模型 2 寄存器 2-2: CORCON, 内核控制寄存器 (续) bit 1 RND:舍入模式选择位 1 = 使能有偏 (常规)舍入 0 = 使能无偏 (收敛)舍入 bit 0 IF:整数或小数乘法模式选择位 1 = 使能整数模式的 DSP 乘法操作 0 = 使能小数模式的 DSP 乘法操作 注 1:该位总是读为 0。 2:DL<2:1> 为只读位。 3:DO 循环嵌套的前两级由硬件处理。 4:可对该位进行读或清零操作,但不能将其置 1。 5:该位与 IPL<2:0> 位 (SR<7:5>)组合形成 CPU 中断优先级。 图注: R = 可读位 W = 可写位 C = 可清零位 x = 未知 -n = POR 时的值 1 = 置 1 0 = 清零 U = 未用位,读作 0