dsPIC30F4011/4012 2.4.2.4 数据空间写饱和 2.4.3 桶形移位寄存器 除了加法器/减法器饱和,对数据空间进行写操作也会饱 桶形移位寄存器在单个周期内可将数据算术或逻辑右移 和,但不会影响源累加器的内容。数据空间写饱和逻辑 或左移最多16位。源操作数可以是两个DSP累加器中 块接受来自舍入逻辑块的一个16位的1.15小数值作为 的任何一个或X总线(支持寄存器或存储器中数据的多 输入,还接受来自源(累加器)和16位舍入加法器的溢 位移位)。 出状态。这些经过组合用来选择适当的1.15小数值作为 移位寄存器需要一个有符号二进制值,用来确定移位操 输出,写入数据存储空间中。 作的幅度(位数)和方向。正值将操作数右移。负值则 如果CORCON寄存器中的SATDW位置1,将检测(经 将操作数左移。值为0则不改变操作数。 过舍入或截取后的)数据是否溢出,并进行相应的调 桶形移位寄存器为40位宽,于是,它为DSP移位操作 整。如果输入数据大于0x007FFF,则写入存储器中的 提供了40位的结果,而为MCU移位操作提供16位的 数据被强制为最大的正1.15值,0x7FFF。如果输入数 结果。来自X总线的数据在桶形移位寄存器中的存放方 据小于0xFF8000,则写入存储器中的数据被强制为最 式是:右移则数据存放在bt16到bit31,左移则存放 大的负1.15值,0x8000。源累加器的MSb(bit39) 在bit0到bit15. 用来决定被检测的操作数的符号。 如果CORCON寄存器中的SATDW位没有置1,则输 入数据都将通过,在任何情况下都不会被修改。 DS70135E_CN第20页 2007 Microchip Technology Inc
dsPIC30F4011/4012 DS70135E_CN 第 20 页 2007 Microchip Technology Inc. 2.4.2.4 数据空间写饱和 除了加法器/减法器饱和,对数据空间进行写操作也会饱 和,但不会影响源累加器的内容。数据空间写饱和逻辑 块接受来自舍入逻辑块的一个 16 位的 1.15 小数值作为 输入,还接受来自源(累加器)和 16 位舍入加法器的溢 出状态。这些经过组合用来选择适当的 1.15 小数值作为 输出,写入数据存储空间中。 如果 CORCON 寄存器中的 SATDW 位置 1,将检测(经 过舍入或截取后的)数据是否溢出,并进行相应的调 整。如果输入数据大于 0x007FFF,则写入存储器中的 数据被强制为最大的正 1.15 值,0x7FFF。如果输入数 据小于 0xFF8000,则写入存储器中的数据被强制为最 大的负 1.15 值, 0x8000。源累加器的 MSb (bit 39) 用来决定被检测的操作数的符号。 如果 CORCON 寄存器中的 SATDW 位没有置 1,则输 入数据都将通过,在任何情况下都不会被修改。 2.4.3 桶形移位寄存器 桶形移位寄存器在单个周期内可将数据算术或逻辑右移 或左移最多 16 位。源操作数可以是两个 DSP 累加器中 的任何一个或 X 总线(支持寄存器或存储器中数据的多 位移位)。 移位寄存器需要一个有符号二进制值,用来确定移位操 作的幅度(位数)和方向。正值将操作数右移。负值则 将操作数左移。值为 0 则不改变操作数。 桶形移位寄存器为 40 位宽,于是,它为 DSP 移位操作 提供了 40 位的结果,而为 MCU 移位操作提供 16 位的 结果。来自 X 总线的数据在桶形移位寄存器中的存放方 式是:右移则数据存放在 bit 16 到 bit 31,左移则存放 在 bit 0 到 bit 15
dsPIC30F4011/4012 3.0 存储器构成 图3-1: dsPIC30F401114012的程序存 储空间映射 注:本数据手册总结了dsPIC30F系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关CPU、外 复位一G0T0指令 000000 设、寄存器说明和一般器件功能的更多信息,请参见 复位一目标地址 000002 《dsPI1C30F系列参考手册》(DS70046E_CN)。有关器件 000004 A 指令集和编程的更多信,息,请参见《dsP1C30F33F程序 员参考手册》(DS70157BCN)。 向量表 3.1 程序地址空间 中断向量表 程序地址空间为4M指令字。它可通过23位PC、表指 令有效地址(Effective Address,EA)或数据空间EA (当按照表31定义的那样,将程序空间映射到数据空 间时)来寻址。注意,为了提供与数据空间寻址的兼容 性,在两个连续的程序字之间,程序空间地址递增量为 00007E 保留 2. 000080 备用向量表 000084 除TBLRD./TBLT指令外,对用户程序空间的所有访问限 0000FE 用户闪存 000100 制在低4M指令字地址范围(0x000000至0x7 FFFFE): 程序存储器 TBLRD/TBLWT使用TBLPAG<T>来决定访问用户空间还是 (16K指令字) 配置空间。在表31“读/写指令”中,bit23允许访问器 007FFE 008000 件D、用户1D和配置位:对于其他情形,bt23始终清零。 保留 (读为0) 7FFBFE 7FFC00 数据EEPROM (1KB) 7FFFFE 800000 保留 8005BE 8005C0 UNITID(32指令字) 8005FE 800600 保留 F7FFFE 器件配置 F80000 奇存器 F8000E F80010 保留 FEFFFE DEVID(2) FF0000 FFFFFE 2007 Microchip Technology Inc. DS70135ECN第21页
2007 Microchip Technology Inc. DS70135E_CN 第 21 页 dsPIC30F4011/4012 3.0 存储器构成 3.1 程序地址空间 程序地址空间为 4M 指令字。它可通过 23 位 PC、表指 令有效地址 (Effective Address, EA)或数据空间 EA (当按照表 3-1 定义的那样,将程序空间映射到数据空 间时)来寻址。注意,为了提供与数据空间寻址的兼容 性,在两个连续的程序字之间,程序空间地址递增量为 2。 除 TBLRD/TBLWT 指令外,对用户程序空间的所有访问限 制在低 4M 指令字地址范围(0x000000 至 0x7FFFFE); TBLRD/TBLWT使用TBLPAG<7>来决定访问用户空间还是 配置空间。在表 3-1“读 / 写指令”中,bit 23 允许访问器 件ID、用户ID和配置位;对于其他情形,bit 23始终清零。 图 3-1: dsPIC30F4011/4012 的程序存 储空间映射 注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件 指令集和编程的更多信息,请参见 《dsPIC30F/33F 程序 员参考手册》(DS70157B_CN)。 复位——目标地址 用户存储空间 000000 00007E 000002 000080 器件配置 用户闪存 程序存储器 008000 007FFE 配置存储空间 数据 EEPROM (16K 指令字) (1 KB) 800000 F80000 寄存器 F8000E F80010 DEVID (2) FEFFFE FF0000 FFFFFE 保留 F7FFFE 保留 7FFC00 7FFBFE (读为 0) 8005FE 800600 UNITID(32 指令字) 8005BE 8005C0 复位——GOTO 指令 000004 保留 7FFFFE 保留 000100 0000FE 备用向量表 000084 保留 中断向量表 向量表
dsPIC30F4011/4012 表3-1: 程序空间地址构成 访问类型 访问空间 程序空间地址 <23> <22:16> <15> <14:1> <0> 指令访问 用户 0 PC<22:1> 0 TBLRD/TBLWT 用户 TBLPAG<7:0> 数据EA<15:0> (TBLPAG<7>=0) TBLRD/TBLWT 配置 TBLPAG<7:0> 数据EA<15:0> (TBLPAG<7>=1) 程序空间可视性 用户 0 PSVPAG<7:0> 数据EA<14:0> 图3-2: 访问程序空间中数据的地址生成 23位 使用程序 0 程序计数器 0 计数器 选择 1 EA 使用程序 0 PSVPAG寄存器 空间可视性 8位 15位 EA 使用 1/0 表指令 TBLPAG寄存器 8位 16位 1 用户1配置| 空间选择 24位EA 1字节 选择 注程序空间可视性不能用来对程序存储器中字的bit<23:16>进行访问。 DS70135E_CN第22页 2007 Microchip Technology Inc
dsPIC30F4011/4012 DS70135E_CN 第 22 页 2007 Microchip Technology Inc. 表 3-1: 程序空间地址构成 图 3-2: 访问程序空间中数据的地址生成 访问类型 访问空间 程序空间地址 <23> <22:16> <15> <14:1> <0> 指令访问 用户 0 PC<22:1> 0 TBLRD/TBLWT 用户 (TBLPAG<7> = 0) TBLPAG<7:0> 数据 EA<15:0> TBLRD/TBLWT 配置 (TBLPAG<7> = 1) TBLPAG<7:0> 数据 EA<15:0> 程序空间可视性 用户 0 PSVPAG<7:0> 数据 EA<14:0> 程序计数器 0 23 位 1 PSVPAG 寄存器 8 位 EA 15 位 使用程序 选择 TBLPAG 寄存器 8 位 EA 16 位 使用 24 位 EA 字节 0 0 1/0 选择 用户 / 配置 空间选择 表指令 使用程序 空间可视性 计数器 注:程序空间可视性不能用来对程序存储器中字的 bit <23:16> 进行访问
dsPIC30F4011/4012 3.1.1 使用表指令访问程序存储器中的数据 器件提供了一组表指令,用来在程序空间和数据空间之 本器件架构取指令时是取24位宽的程序存储器。因此, 间传送字节或字大小的数据(见图3-3和图3-4)。 指令始终是对齐的。不过,由于器件架构是改进型哈佛 1. TBLRDL:表读低位字 架构,数据也可以出现在程序空间中。 字:读程序地址的低位字: 有两种方法可以访问程序空间:通过特殊的表指令,或 P<15:0>映射到D<15:0>。 者通过把16K字程序空间页重新映射到数据空间的上半 字节:读程序地址的LSB中的一个字节: 部分(见第3.1.2节“使用程序空间可视性访问程序存 当字节选择=0时,P<7:0>映射到目标字节: 储器中的数据”)。TBLRDL和TBLWTL指令提供了读 当字节选择=1时,P<15:8>映射到目标字节。 或写程序空间内任何地址的低位字(sw)的直接方法, 2. TBLWTL:表写低位字(闪存编程的详细信息, 无需通过数据空间。TBLRDH和TBLWTH指令是可以把 请参见第6.0节“闪存程序存储器”)。 一个程序空间字的高8位作为数据访问的唯一方法。 3. TBLRDH:表读高位字 对于每个连续的24位程序字,P℃的递增量为2。这使 字:读程序地址的高位字: 得程序存储器地址能够直接映射到数据空间地址。于 P<23:16>映射到D<7:0>:D<15:8>始终=0。 是,程序存储器可以看作是两个16位字宽的地址空间, 字节:读程序地址的MSB中的一个字节: 它们并排放置,具有相同的地址范围。TBLRDL和 当字节选择=0时,P<23:16>映射到目标字节: TBLWT工访问存有数据低位字的空间,而TBLRDH和 当字节选择=1时,目标字节始终=0。 TBLWTH则访问存有数据最高字节的空间。 4. TBLWTH:表写高位字(闪存编程的详细信息, 图3-2说明了如何为表操作和数据空间访问(PSV=1) 请参见第6.0节“闪存程序存储器”)。 创建EA。这里,P<23:0>指的是程序空间字:而 D<15:0>指的是数据空间字。 图3-3: 程序数据表访问(低位字) PC地址 23 16 8 0x000000 00000000 0x000002 00000000 0x000004 00000000 0x000006 00000000 程序存储器 TBLRDL.W TBLRDL.B (Wn<0>=0) “虚拟”字节 (读为0)。 TBLRDL.B(Wn<O>=1) 2007 Microchip Technology Inc. DS70135ECN第23页
2007 Microchip Technology Inc. DS70135E_CN 第 23 页 dsPIC30F4011/4012 3.1.1 使用表指令访问程序存储器中的数据 本器件架构取指令时是取 24 位宽的程序存储器。因此, 指令始终是对齐的。不过,由于器件架构是改进型哈佛 架构,数据也可以出现在程序空间中。 有两种方法可以访问程序空间:通过特殊的表指令,或 者通过把16K字程序空间页重新映射到数据空间的上半 部分(见第 3.1.2 节“使用程序空间可视性访问程序存 储器中的数据”)。 TBLRDL 和 TBLWTL 指令提供了读 或写程序空间内任何地址的低位字(lsw)的直接方法, 无需通过数据空间。TBLRDH 和 TBLWTH 指令是可以把 一个程序空间字的高 8 位作为数据访问的唯一方法。 对于每个连续的 24 位程序字,PC 的递增量为 2。这使 得程序存储器地址能够直接映射到数据空间地址。于 是,程序存储器可以看作是两个 16 位字宽的地址空间, 它们并排放置,具有相同的地址范围。 TBLRDL 和 TBLWTL 访问存有数据低位字的空间,而 TBLRDH 和 TBLWTH 则访问存有数据最高字节的空间。 图 3-2 说明了如何为表操作和数据空间访问(PSV = 1) 创建 EA。这里, P<23:0> 指的是程序空间字;而 D<15:0> 指的是数据空间字。 器件提供了一组表指令,用来在程序空间和数据空间之 间传送字节或字大小的数据 (见图 3-3 和图 3-4)。 1. TBLRDL:表读低位字 字:读程序地址的低位字; P<15:0> 映射到 D<15:0>。 字节:读程序地址的 LSB 中的一个字节; 当字节选择 = 0 时, P<7:0> 映射到目标字节; 当字节选择 = 1 时, P<15:8> 映射到目标字节。 2. TBLWTL:表写低位字 (闪存编程的详细信息, 请参见第 6.0 节 “闪存程序存储器”)。 3. TBLRDH:表读高位字 字:读程序地址的高位字; P<23:16> 映射到 D<7:0> ; D<15:8> 始终 = 0。 字节:读程序地址的 MSB 中的一个字节; 当字节选择 = 0时,P<23:16>映射到目标字节; 当字节选择 = 1 时,目标字节始终 = 0。 4. TBLWTH:表写高位字 (闪存编程的详细信息, 请参见第 6.0 节 “闪存程序存储器”)。 图 3-3: 程序数据表访问 (低位字) 16 8 0 PC 地址 0x000000 0x000002 0x000004 0x000006 23 00000000 00000000 00000000 00000000 程序存储器 “虚拟”字节 (读为 0)。 TBLRDL.W TBLRDL.B(Wn<0> = 1) TBLRDL.B(Wn<0> = 0)
dsPIC30F4011/4012 图3-4: 程序数据表访问(最高字节) TBLRDH.W PC地址 23 16 6 0 0x000000 00000000 0x000002 00000000 0x000004 4 00000000 0x000006 00000000 TBLRDH.B(Wn<O>=0) 程序存储器 “虚拟”字节 (读为0) TBLRDH.B (Wn<O>=1) 3.1.2 使用程序空间可视性访问程序存储器 注意,对于每个程序存储字,PC都将递增2,数据空间 中的数据 地址的低15位将直接映射到相应程序空间地址的低15 位。剩下的位由程序空间可视性页寄存器 可选择将数据空间的高32KB映射到任何16K字程序空 间页。这提供了通过X数据空间对存储的常量数据的透 (PSVPAG<7:0>)提供,如图3-5所示. 明访问,而无需使用特殊指令(即TBLRDL/H和 注: 在表读/写期间,暂时禁止PSV访问。 TBLWTL/H指令)。 对于使用PSV而又在REPEAT循环之外执行的指令: 如果数据空间EA的MSb置1,并且程序空间可视性使 能(方法是在内核控制寄存器CORCON中把PSV位 ·以下指令都需要在规定的执行时间之外额外增加一 个指令周期: 置1)时,就能通过数据空间访问程序空间。CORCON 功能的讨论请参见第2.4节“DSP引率”。 带数据操作数预取的MAC类指令 正在执行的指令,如果要对这个区域进行数据访问的 MOv指令 话,就需要增加一个额外的指令周期,因为需要进行两 -MoV.D指令 次程序存储空间读取操作。 ·其他所有指令都需要在规定的指令执行时间之外额 注意,可寻址数据空间的上半部分始终是X数据空间的 外增加两个指令周期。 一部分。于是,当DSP操作使用程序空间映射来访问 对于使用PSV而又在REPEAT循环之内执行的指令: 这个存储区域时,Y数据空间通常应该存放DSP操作的 ·以下情况都需要在规定的指令执行时间之外额外增 状态(可变)数据,而X数据空间通常应该存放系数 加两个指令周期: (常量)数据。 。在第一次迭代中执行的指令 尽管大于或等于0x8000的每个数据空间地址直接映射 ·在最后一次迭代中执行的指令 到对应的程序存储器地址(见图3-5),但只使用24位 程序字的低16位来存放数据。应该进行恰当的设置,使 ·由于中断而退出循环之前执行的指令 得对高8位进行访问的指令都成为非法指令,以维持器 ·中断得到处理后再次进入循环时执行的指令 件的可靠性。指令编码的详细信息,请参见《dsPIC30F/ ·REPEAT循环的所有其他各次迭代,都允许使用 33F程序员参考手册》(DS70157BCN)。 PSV访问数据的指令在一个周期内执行。 DS70135ECN第24页 2007 Microchip Technology Inc
dsPIC30F4011/4012 DS70135E_CN 第 24 页 2007 Microchip Technology Inc. 图 3-4: 程序数据表访问 (最高字节) 3.1.2 使用程序空间可视性访问程序存储器 中的数据 可选择将数据空间的高32 KB映射到任何16K字程序空 间页。这提供了通过 X 数据空间对存储的常量数据的透 明访问,而无需使用特殊指令 (即 TBLRDL/H 和 TBLWTL/H 指令)。 如果数据空间 EA 的 MSb 置 1,并且程序空间可视性使 能 (方法是在内核控制寄存器 CORCON 中把 PSV 位 置 1)时,就能通过数据空间访问程序空间。CORCON 功能的讨论请参见第 2.4 节 “DSP 引擎”。 正在执行的指令,如果要对这个区域进行数据访问的 话,就需要增加一个额外的指令周期,因为需要进行两 次程序存储空间读取操作。 注意,可寻址数据空间的上半部分始终是 X 数据空间的 一部分。于是,当 DSP 操作使用程序空间映射来访问 这个存储区域时,Y 数据空间通常应该存放 DSP 操作的 状态 (可变)数据,而 X 数据空间通常应该存放系数 (常量)数据。 尽管大于或等于 0x8000 的每个数据空间地址直接映射 到对应的程序存储器地址(见图 3-5),但只使用 24 位 程序字的低 16 位来存放数据。应该进行恰当的设置,使 得对高 8 位进行访问的指令都成为非法指令,以维持器 件的可靠性。指令编码的详细信息,请参见《dsPIC30F/ 33F 程序员参考手册》(DS70157B_CN)。 注意,对于每个程序存储字,PC 都将递增 2,数据空间 地址的低 15 位将直接映射到相应程序空间地址的低 15 位。剩 下 的 位 由 程 序 空 间 可 视 性 页 寄 存 器 (PSVPAG<7:0>)提供,如图 3-5 所示。 对于使用 PSV 而又在 REPEAT 循环之外执行的指令: • 以下指令都需要在规定的执行时间之外额外增加一 个指令周期: - 带数据操作数预取的 MAC 类指令 - MOV 指令 - MOV.D 指令 • 其他所有指令都需要在规定的指令执行时间之外额 外增加两个指令周期。 对于使用 PSV 而又在 REPEAT 循环之内执行的指令: • 以下情况都需要在规定的指令执行时间之外额外增 加两个指令周期: - 在第一次迭代中执行的指令 - 在最后一次迭代中执行的指令 - 由于中断而退出循环之前执行的指令 - 中断得到处理后再次进入循环时执行的指令 • REPEAT 循环的所有其他各次迭代,都允许使用 PSV 访问数据的指令在一个周期内执行。 16 8 0 PC 地址 0x000000 0x000002 0x000004 0x000006 23 00000000 00000000 00000000 00000000 程序存储器 “虚拟”字节 (读为 0) TBLRDH.W TBLRDH.B(Wn<0> = 1) TBLRDH.B(Wn<0> = 0) 注: 在表读 / 写期间,暂时禁止 PSV 访问