MCU

BF533的数据地址发生器DAG

0
阅读(3420)

数据地址发生器主要是产生地址让数据从存储器中取出来,地址数据发生器把产生的地址存放在一个DAG寄存器中,让程序间接访问地址,而不是通过一个绝对地址来访问。

DAG提供了几种特殊功能去实现数据访问程序的最小化,具体的功能如下:

1.       提供地址---当数据进行存取时提供相应地址;

2.       提供地址和快速改变---当数据移动时提供地址,然后自动为下一次移动增加或减少存储的地址;

3.       提供地址及其偏移量---从基地址和偏移量中提供地址,从而不用改变基地址指针;

4.       改变地址---在没有进行数据移动的时候也能够增加或减少存储的地址值;

5.       位取反搬运地址---当只要移动数据而不用取反存储地址时,可使用位取反搬运地址;

 

如下图为数据地址发生器的架构:

 数据地址发生器DAG子系统包含有两个DAG算术单元、9个指针寄存器、4个索引寄存器I、4个修改寄存器M和4个基地址寄存器B、4个长度寄存器L。这些寄存器主要用来保存地址值,以便让DAG产生新的地址。寄存器的具体介绍如下:

1.       索引寄存器I,是一个无符号32位索引寄存器,保存着一个指向存储器的地址指针。例如,指令R3=[I0],功能是把指针寄存器I0所指向的存储器地址上的值加载到R3上;索引寄存器能被用在16位或32位的存储器接口上;

2.       修改寄存器M,是一个有符号32位寄存器,它提供一个改变量以便在指针寄存器进行赋值的同时对地址进行修改。例如指令R0=[I0++M1],该指令实现了以下两个功能:(1)加载I0指针所指向的存储器内容到R0上;(2)通过M1修改指针寄存器所指向地址。

3.       基地址寄存器B和长度寄存器L,这两个寄存器将是无符号32位寄存器,用于设置一个循环缓冲器的基地址和地址宽度。

4.       指针寄存器P,FP,USP和SP。这四种指针寄存器均为32位寄存器,存储着一个指向存储器的地址指针。例如指令R3=[P0],该指令把指针寄存器P0所指向的存储器地址内容加载到R3上,赋值后指针寄存器的值不变。

在使用以上寄存器时,不要假设这些寄存器会被自动初始化成0。在系统复位后,以上寄存器均会是一个任意值,所以在使用这些寄存器之前一定要进行初始化操作。