dsPIC30F4011/4012 4.2.1 起始地址和结束地址 4.2.2 W地址寄存器选择 模寻址机制要求指定起始和结束地址,并将它们装入16 模寻址和位反转寻址控制寄存器MODCON<15:0>包含 位模缓冲区地址寄存器中:XMODSRT、XMODEND、 使能标志以及指定W地址寄存器的W寄存器字段。 YMODSRT和YMODEND(见表3-3). XWM和YWM字段选择对哪些寄存器进行模寻址。如 注: Y空间模寻址的EA计算使用字长度的数据 果XWM=15,则禁止X RAGU和X WAGU模寻址。 (每个EA的LSb始终清零)。 类似地,如果YWM=15,则禁止YAGU模寻址。 循环缓冲区的长度没有直接指定。它由相应的起始和结束 要对其进行模寻址的X地址空间指针W寄存器(XWM) 地址之差决定。循环缓冲区最大长度为32K字(64KB)。 存储在MODCON<3:0>中(见表3-3)。当XWM被设 置为除15之外的任何值且XMODEN位 (MODCON<15>)置1时,X数据空间的模寻址被使 能。 要进行模寻址的Y地址空间指针W寄存器(YWM)存 储在MODCON<7:4>中。当YWM被设置为除15之外 的任何值且YMODEN位(MODCON<14>)置1时, Y数据空间的模寻址被使能。 图41: 模寻址操作示例 字节 地址 MOV #0x1100,w0 MOV WO,XMODSRT ;set modulo start address MOV #0x1163,w0 MOV WO,MODEND ;set modulo end address 0x1100 MOV #0x8001,0 MOV WO,MODCON ;enable Wl,X AGU for modulo MOV #0x0000,0 ;WO holds buffer fill value MOV #0x1110,w1 ipoint wl to buffer DO AGAIN,#0x31 ;fill the 50 buffer locations MOV w0,[w1++] ;fill the next location AGAIN: INC WO,WO ;increment the fill value 0x1163 起始地址=0x1100 结束地址=0x1163 长度=0x0032字 2007 Microchip Technology Inc. DS70135ECN第35页
2007 Microchip Technology Inc. DS70135E_CN 第 35 页 dsPIC30F4011/4012 4.2.1 起始地址和结束地址 模寻址机制要求指定起始和结束地址,并将它们装入 16 位模缓冲区地址寄存器中:XMODSRT、XMODEND、 YMODSRT 和 YMODEND (见表 3-3)。 循环缓冲区的长度没有直接指定。它由相应的起始和结束 地址之差决定。循环缓冲区最大长度为 32K 字(64 KB)。 4.2.2 W 地址寄存器选择 模寻址和位反转寻址控制寄存器 MODCON<15:0> 包含 使能标志以及指定 W 地址寄存器的 W 寄存器字段。 XWM 和 YWM 字段选择对哪些寄存器进行模寻址。如 果 XWM = 15,则禁止 X RAGU 和 X WAGU 模寻址。 类似地,如果 YWM = 15,则禁止 Y AGU 模寻址。 要对其进行模寻址的X地址空间指针W寄存器(XWM) 存储在 MODCON<3:0> 中(见表 3-3)。当 XWM 被设 置为除 15 之外的任何值且 XMODEN 位 (MODCON<15>)置 1 时, X 数据空间的模寻址被使 能。 要进行模寻址的 Y 地址空间指针 W 寄存器(YWM)存 储在 MODCON<7:4> 中。当 YWM 被设置为除 15 之外 的任何值且 YMODEN 位 (MODCON<14>)置 1 时, Y 数据空间的模寻址被使能。 图 4-1: 模寻址操作示例 注: Y空间模寻址的EA计算使用字长度的数据 (每个 EA 的 LSb 始终清零)。 0x1100 0x1163 起始地址 = 0x1100 结束地址 = 0x1163 长度 = 0x0032 字 字节 地址 MOV #0x1100,W0 MOV W0, XMODSRT ;set modulo start address MOV #0x1163,W0 MOV W0,MODEND ;set modulo end address MOV #0x8001,W0 MOV W0,MODCON ;enable W1, X AGU for modulo MOV #0x0000,W0 ;W0 holds buffer fill value MOV #0x1110,W1 ;point W1 to buffer DO AGAIN,#0x31 ;fill the 50 buffer locations MOV W0, [W1++] ;fill the next location AGAIN: INC W0,W0 ;increment the fill value
dsPIC30F4011/4012 4.2.3模寻址的应用 如果位反转缓冲区的长度为M=2N字节,则数据缓冲 模寻址可以应用于任何与W寄存器相关的有效地址 区起始地址的最后“N”位必须为零。 (EA)计算中。重要的是要意识到,地址边界检查功能 XB<14:0>是位反转地址修改量或“中心点”(pivot 不仅会检查地址是否正好在地址边界上,而且会检查地 poit),通常是一个常数。对于FFT计算,其值等于 址是否小于或大于上限(对于递增缓冲区)、是否低于 FFT数据缓冲区长度的一半。 下限(对于递减缓冲区)。因此,地址变化可能会越过 边界,但仍然可以正确调整。 注: 所有位反转EA的计算都使用字长度数据 (每个EA的LSb始终清零)。为了产生兼 注: 只有在使用执行前修改或执行后修改寻址 容(字节)地址,要相应地调整XB的值。 模式来计算有效地址时,模修正有效地址 使能位反转寻址时,仅对预递增或后递增的寄存器间接 才被写回寄存器。如果使用了地址偏移量 寻址模式、且仅对字长度数据写入,才会进行位反转寻 (例如,W7+W2]),会进行模地址修正, 址。对于任何其他寻址模式或对于字节长度数据,不会 但寄存器的内容保持不变。 进行位反转寻址,而是生成正常的地址。在进行位反转 寻址时,W地址指针的增量将始终加上地址修改量 4.3 位反转寻址 (XB),与寄存器间接寻址模式相关的偏移量将被忽 位反转寻址用来简化基2FFT算法的数据重新排序。它 略。此外,由于要求是字数据,EA的LSb被忽略(且 为XAGU所支持,仅限于数据写入。 始终清零)。 地址修改量可以是常数或寄存器的内容,可视为将其位 注 不应同时使能模寻址和位反转寻址。如果 顺序反转。源地址和目标地址仍然是正常的顺序。于 用户试图这么做的话,对于X WAGU,位 是,唯一需要反转的操作数就是地址修改量。 反转寻址将优先,X WAGU模寻址将被禁 止。然而,在X RAGU中,模寻址继续起 4.3.1 位反转寻址的实现 作用。 当发生以下情况时,使能位反转寻址: 如果通过将BREN位(XBREV<15>)置1使能了位反 1.MODCON寄存器中BM(W寄存器选择)的 转寻址,那么,在写XBREV寄存器之后,不应立即进 值是除15以外的任何值(不能使用位反转寻址 行要使用被指定为位反转指针的W寄存器的间接读操 作。 访问堆栈),且 2.XBREV寄存器中的BREN位置1,且 3.使用的寻址模式是预递增或后递增的寄存器间接 寻址模式。 图4-2: 位反转地址示例 正常顺序的地址 b15b14b13b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b10 围绕二进制值的中心 左右交换位位置 b15b14b13b12 b11 b10 b9 b8 b7 b6 b5 b1 b2 b3 b40 位反转地址 中心点 XB=0x0008,对于16字位反转缓冲区 DS70135E_CN第36页 2007 Microchip Technology Inc
dsPIC30F4011/4012 DS70135E_CN 第 36 页 2007 Microchip Technology Inc. 4.2.3 模寻址的应用 模寻址可以应用于任何与 W 寄存器相关的有效地址 (EA)计算中。重要的是要意识到,地址边界检查功能 不仅会检查地址是否正好在地址边界上,而且会检查地 址是否小于或大于上限 (对于递增缓冲区)、是否低于 下限 (对于递减缓冲区)。因此,地址变化可能会越过 边界,但仍然可以正确调整。 4.3 位反转寻址 位反转寻址用来简化基 2 FFT 算法的数据重新排序。它 为 X AGU 所支持,仅限于数据写入。 地址修改量可以是常数或寄存器的内容,可视为将其位 顺序反转。源地址和目标地址仍然是正常的顺序。于 是,唯一需要反转的操作数就是地址修改量。 4.3.1 位反转寻址的实现 当发生以下情况时,使能位反转寻址: 1. MODCON 寄存器中 BWM (W 寄存器选择)的 值是除 15 以外的任何值 (不能使用位反转寻址 访问堆栈),且 2. XBREV 寄存器中的 BREN 位置 1,且 3. 使用的寻址模式是预递增或后递增的寄存器间接 寻址模式。 如果位反转缓冲区的长度为 M = 2N 字节,则数据缓冲 区起始地址的最后 “N”位必须为零。 XB<14:0> 是位反转地址修改量或 “中心点”(pivot point),通常是一个常数。对于 FFT 计算,其值等于 FFT 数据缓冲区长度的一半。 使能位反转寻址时,仅对预递增或后递增的寄存器间接 寻址模式、且仅对字长度数据写入,才会进行位反转寻 址。对于任何其他寻址模式或对于字节长度数据,不会 进行位反转寻址,而是生成正常的地址。在进行位反转 寻址时, W 地址指针的增量将始终加上地址修改量 (XB) ,与寄存器间接寻址模式相关的偏移量将被忽 略。此外,由于要求是字数据,EA 的 LSb 被忽略(且 始终清零)。 如果通过将 BREN 位(XBREV<15>)置 1 使能了位反 转寻址,那么,在写 XBREV 寄存器之后,不应立即进 行要使用被指定为位反转指针的 W 寄存器的间接读操 作。 图 4-2: 位反转地址示例 注: 只有在使用执行前修改或执行后修改寻址 模式来计算有效地址时,模修正有效地址 才被写回寄存器。如果使用了地址偏移量 (例如,[W7+W2]),会进行模地址修正, 但寄存器的内容保持不变。 注: 所有位反转 EA 的计算都使用字长度数据 (每个 EA 的 LSb 始终清零)。为了产生兼 容(字节)地址,要相应地调整 XB 的值。 注: 不应同时使能模寻址和位反转寻址。如果 用户试图这么做的话,对于 X WAGU,位 反转寻址将优先, X WAGU 模寻址将被禁 止。然而,在 X RAGU 中,模寻址继续起 作用。 b3 b2 b1 0 b2 b3 b4 0 围绕二进制值的中心 位反转地址 XB = 0x0008,对于 16 字位反转缓冲区 b7 b6 b5 b1 b11 b10 b9 b8 b7 b6 b5 b4 b11 b10 b9 b8 b15 b14 b13 b12 b15 b14 b13 b12 正常顺序的地址 中心点 左右交换位位置
dsPIC30F4011/4012 表4-2: 位反转地址序列(16项) 正常地址 位反转地址 A3 A2 A1 A0 十进制 A3 A2 A1 A0 十进制 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 8 0 0 1 0 2 0 1 0 0 4 0 0 1 1 3 0 0 12 0 1 0 0 4 0 0 1 0 2 0 1 0 1 5 1 0 1 0 10 0 1 1 0 6 0 1 1 0 6 0 1 1 7 1 1 1 0 14 1 0 0 0 8 0 0 0 1 1 1 0 0 1 9 1 0 0 1 9 1 0 1 0 10 0 1 0 1 5 1 0 1 1 11 0 1 13 1 1 0 0 12 0 0 1 1 1 1 0 1 13 1 0 1 1 11 1 1 0 14 0 1 7 1 1 1 15 1 1 1 15 表4-3: XBREV寄存器的位反转地址修改量 缓冲区大小(字) XB<14:0>位反转地址修改量* 32768 0x4000 16384 0x2000 8192 0x1000 4096 0x0800 2048 0x0400 1024 0x0200 512 0x0100 256 0x0080 128 0x0040 64 0x0020 32 0x0010 16 0x0008 8 0x0004 4 0x0002 2 0x0001 *缓冲区大小的修改量大于1024字将超出dsP1C30F4011/4012器件上的可用数据存储空间。 2007 Microchip Technology Inc. DS70135ECN第37页
2007 Microchip Technology Inc. DS70135E_CN 第 37 页 dsPIC30F4011/4012 表 4-2: 位反转地址序列 (16 项) 表 4-3: XBREV 寄存器的位反转地址修改量 正常地址 位反转地址 A3 A2 A1 A0 十进制 A3 A2 A1 A0 十进制 0000 0 0000 0 0001 1 1000 8 0010 2 0100 4 0011 3 1100 12 0100 4 0010 2 0101 5 1010 10 0110 6 0110 6 0111 7 1110 14 1000 8 0001 1 1001 9 1001 9 1010 10 0101 5 1011 11 1101 13 1100 12 0011 3 1101 13 1011 11 1110 14 0111 7 1111 15 1111 15 缓冲区大小 (字) XB<14:0> 位反转地址修改量 * 32768 0x4000 16384 0x2000 8192 0x1000 4096 0x0800 2048 0x0400 1024 0x0200 512 0x0100 256 0x0080 128 0x0040 64 0x0020 32 0x0010 16 0x0008 8 0x0004 4 0x0002 2 0x0001 *缓冲区大小的修改量大于 1024 字将超出 dsPIC30F4011/4012 器件上的可用数据存储空间
dsPI1C30F4011/4012 注 DS70135E_CN第38页 2007 Microchip Technology Inc
dsPIC30F4011/4012 DS70135E_CN 第 38 页 2007 Microchip Technology Inc. 注:
dsPIC30F4011/4012 5.0 中断 注: 当中断条件产生时,不管相应的中断允许 注:本数据手册总结了dsP1C30F系列器件的功能,但是不 位状态如何,中断标志位都将置1。用户软 应把本手册当作无所不包的参考手册来使用。有关CPU、外 件应在允许一个中断前,先将相应的中断 设、寄存器说明和一般器件功能的更多信息,请参见 标志位清零。 《dsPIC30F系列参考手册》(DS70046ECN)。有关器件 指令集和编程的更多信,息,请参见《dsP1C30F33F程序 用户可以通过PCx寄存器,为所有中断源分配7个优先 员参考手册》(DS70157BCN)。 级中的一个,优先级从1到7。每个中新源都与一个中 断向量相关,如表5-1所示。优先级7和1分别代表最 dsP1C30F4011/4012有30个中断源和4个处理器异常 高和最低的可屏蔽优先级。 (陷阱),它们必须按照优先级机制来进行仲裁。 CPU负责读取中断向量表(Interrupt Vector Table, 注 中断源优先级指定为0,等同于禁止该中 VT),并把中断向量中的地址传送给程序计数器。中断 断。 向量从程序数据总线向程序计数器的传送,是经由程序 如果NSTDIS位(INTCON1<15>)置1,则禁止中 计数器输入侧24位宽的多路开关来进行的。 嵌套。因此,如果正在处理一个中断,将禁止处理新的 中断向量表(VT)和备用中断向量表(AVT)的位置 中断,即使新中断的优先级比当前正在处理的中断优先 靠近程序存储器的开始(0x000004)。VT和AVT如 级高。 图5-1所示. 注: 一旦NSTDIS位置为1,IPL位就变为只读。 在中断和处理器异常提交给处理器内核之前,中断控制 某些中断具有专门的控制位,用于控制诸如边沿或电平 器负责它们的预处理。使用集中式的特殊功能寄存器对 触发中断、电平变化中断这样的功能。这些功能的控制 外设中断和陷阱进行允许、优先级分配和控制: 仍然由产生中断的外设模块负责。 ·1FS0<15:0>、1FS1<15:0>和1FS2<15:0> 对于某些指令,在其执行期间如果 DISI 位 这三个寄存器中保存所有的中断请求标志。这些标 (INTCON2<14>)保持置1的话,那么可以用DIsI指 志由其对应的外设或外部信号置1,标志的清除则 令来禁止优先级为6或更低的中断的处理。 通过软件完成。 处理中断时,PC中装入存放在程序存储器中相应中断 1EC0<15:0>、1EC1<15:0>和1EC2<15:0> 向量存储单元中的地址。VT中有63个不同的向量(见 这三个寄存器中保存所有的中断允许控制位。这些 控制位用来单独允许来自外设或外部信号的中断。 图5-2)。这些向量存放在程序存储器从0x000004到 0x0000FE的存储单元中(见图5-2)。这些存储单元中 ·1PC0<15:0>.PC11<7:0> 存有24位地址,为了保持鲁棒性,如果在正常执行期间 与这些中断中的每一个中断有关的用户可分配优先 PC试图取任何这些字的话,就会产生地址错误陷阱。这 级,集中存放在这12个寄存器中。 避免了执行随机数据:P℃递减时意外进入向量空间、 1PL<3:0> 意外地把数据空间地址映射到了向量空间,或者P℃到 当前CPU优先级显式地存放在PL位中。PL<3> 达可用程序存储空间的末尾继而返回到0x000000,都将 在CORCON寄存器中,而IPL<2:0>则存放在处 执行随机数据。执行GoT0指令跳转到向量空间,也将 理器内核的状态寄存器(SR)中。 产生地址错误陷阱。 ·NTCON1<15:0>和INTCON2<15:0> 全局中断控制功能由这两个寄存器提供。 INTCON1包含处理器异常的控制和状态标志。 INTCON2寄存器控制外部中断请求信号的行为和 AIVT的使用. @2007 Microchip Technology Inc. DS70135ECN第39页
2007 Microchip Technology Inc. DS70135E_CN 第 39 页 dsPIC30F4011/4012 5.0 中断 dsPIC30F4011/4012 有 30 个中断源和 4 个处理器异常 (陷阱),它们必须按照优先级机制来进行仲裁。 CPU 负责读取中断向量表(Interrupt Vector Table, IVT),并把中断向量中的地址传送给程序计数器。中断 向量从程序数据总线向程序计数器的传送,是经由程序 计数器输入侧 24 位宽的多路开关来进行的。 中断向量表(IVT)和备用中断向量表(AIVT)的位置 靠近程序存储器的开始 (0x000004)。 IVT 和 AIVT 如 图 5-1 所示。 在中断和处理器异常提交给处理器内核之前,中断控制 器负责它们的预处理。使用集中式的特殊功能寄存器对 外设中断和陷阱进行允许、优先级分配和控制: • IFS0<15:0>、 IFS1<15:0> 和 IFS2<15:0> 这三个寄存器中保存所有的中断请求标志。这些标 志由其对应的外设或外部信号置 1,标志的清除则 通过软件完成。 • IEC0<15:0>、 IEC1<15:0> 和 IEC2<15:0> 这三个寄存器中保存所有的中断允许控制位。这些 控制位用来单独允许来自外设或外部信号的中断。 • IPC0<15:0>...IPC11<7:0> 与这些中断中的每一个中断有关的用户可分配优先 级,集中存放在这 12 个寄存器中。 • IPL<3:0> 当前 CPU 优先级显式地存放在 IPL 位中。 IPL<3> 在 CORCON 寄存器中,而 IPL<2:0> 则存放在处 理器内核的状态寄存器 (SR)中。 • INTCON1<15:0> 和 INTCON2<15:0> 全局中断控制功能由这两个寄存器提供。 INTCON1 包含处理器异常的控制和状态标志。 INTCON2 寄存器控制外部中断请求信号的行为和 AIVT 的使用。 用户可以通过IPCx寄存器,为所有中断源分配7个优先 级中的一个,优先级从 1 到 7。每个中断源都与一个中 断向量相关,如表 5-1 所示。优先级 7 和 1 分别代表最 高和最低的可屏蔽优先级。 如果 NSTDIS 位 (INTCON1<15>)置 1,则禁止中断 嵌套。因此,如果正在处理一个中断,将禁止处理新的 中断,即使新中断的优先级比当前正在处理的中断优先 级高。 某些中断具有专门的控制位,用于控制诸如边沿或电平 触发中断、电平变化中断这样的功能。这些功能的控制 仍然由产生中断的外设模块负责。 对于某些指令,在其执行期间如果 DISI 位 (INTCON2<14>)保持置 1 的话,那么可以用 DISI 指 令来禁止优先级为 6 或更低的中断的处理。 处理中断时, PC 中装入存放在程序存储器中相应中断 向量存储单元中的地址。IVT 中有 63 个不同的向量(见 图 5-2)。这些向量存放在程序存储器从 0x000004 到 0x0000FE 的存储单元中(见图 5-2)。这些存储单元中 存有 24 位地址,为了保持鲁棒性,如果在正常执行期间 PC 试图取任何这些字的话,就会产生地址错误陷阱。这 避免了执行随机数据; PC 递减时意外进入向量空间、 意外地把数据空间地址映射到了向量空间,或者 PC 到 达可用程序存储空间的末尾继而返回到0x000000,都将 执行随机数据。执行 GOTO 指令跳转到向量空间,也将 产生地址错误陷阱。 注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件 指令集和编程的更多信息,请参见 《dsPIC30F/33F 程序 员参考手册》(DS70157B_CN)。 注: 当中断条件产生时,不管相应的中断允许 位状态如何,中断标志位都将置 1。用户软 件应在允许一个中断前,先将相应的中断 标志位清零。 注: 中断源优先级指定为 0,等同于禁止该中 断。 注: 一旦NSTDIS位置为1,IPL位就变为只读