C6455初始化

更新时间:2024-06-11 00:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

6455初始化流程(DSP_FFT)

第一步:首先设置PLL控制寄存器 参考文档:SPRUE56,见附录2

针对本例的设置如下,其他应用可参考。 PLLM_val = 20; 扩频20倍。

PREDIV_val =1; 预分频设置为1,不预分频。 PLLDIV4_val = 8; 设置输出4为8分频; PLLDIV5_val = 4; 设置输出5为4分频; 以下是PLL初始化过程: 1:CSR &=~(0x1); 功能:关闭中断。

2:PLLCTL_1 &= ~(0x00000020);

功能:PLLCTL第5位置0,使能PLLEN。 3:PLLCTL_1 &= ~(0x00000001); 功能:设置为旁路模式。 4:for (i=0 ; i<100 ; i++);

功能:执行空语句,根据要求等待4个最慢周期。 5:PLLCTL_1 |= 0x00000008; 功能:写入PLLRST = 1。 6:PLLM_1 = PLLM_val - 1;

功能:执行输入频率20倍频,在寄存器中的19代表20倍频,因此要减一。 7:PREDIV_1 = (PREDIV_val - 1) | 0x8000; 功能:设置使能,同时设定预分频比例。 8:while( (PLLSTAT_1) & 0x00000001);

功能:执行GO OPERATION是否完成的判断。 9:PLLDIV4_1 = (PLLDIV4_val - 1) | 0x8000; 功能:设置输出4使能及设定分频比例。 10:PLLDIV5_1 = (PLLDIV5_val - 1) | 0x8000; 功能:设置输出5使能及设定分频比例。 11:PLLCMD_1 |= 0x00000001;

功能:开启GO OPERATION 状态。 12:while( (PLLSTAT_1) & 0x00000001);

功能:检测GO OPERATION状态是否完成,即,检测赋值过程是否完成,因为GO OPERATION是赋值过程的标识。 13:for (i=0 ; i<1000 ; i++);

功能:空操作,等待PLL正确重置,128周期。 14:PLLCTL_1 |= (0x00000001); 功能:最后使能PLL mode。

以上14步骤是设置PLL的整个过程。 第二步:设置中断相关的寄存器。 15:ISTP = 0x00900000;

功能:设置中断向量表位置。 16:INTMUX1 = 0x18;

功能:将中断4(INT4)映射到edma3cc_gint。0x18指的是edma3cc_gint这一个中断 17:IER = 0x0013;

功能:设置中断使能,将上面设置的中断4使能,另外加上固定的不可屏蔽中断和reset,因此设置最后8位为0001 0011。 18:PERLOCK = 0x0f0a0b00;

功能:开启PERCFG0的固定设置。 19:PERCFG0 = 0xC0015555;

功能:使能EMAC, Timers, McBSPs, I2C, GPIO等。 20:PERCFG1 = 0x3;

功能:使能DDR和EMIFA 21:GP_BINTEN |= 0x1 ; 功能:使能GPIO中断。

22:GP_SET_RIS_TRIG |= 0x1 ; 功能:GPIO 0上升源触发中断。

23:EMIFA_CONFIGREG_STAT &= ~(0x80000000) ; 功能:设置EMIFA工作在little endian mode。

24:EMIFA_CONFIGREG_CE4CFG |= 0x8000010b ;

功能:设置同步模式,bit位[3:2]为10,表示2个读延时,bit位[1:0]为11表示64bit数据总线,这个根据实际需要设置。 以上步骤设置中断相关。 第三步:设置EDMA

25:EDMA3CC_DCHMAP48 = 0x00000020;

功能:这里写入DCHMAP48中的PAENTRY位置为1,指代的是将PaRAM Set 1映射到48信道/事件,这里的事件与信道是一一对应的,但是PaRAM与信道是可编程的。 注:信道48指代的是GPIO 事件0,需要根据上面的设置来确定。 26:EDMA3CC_EESRH = 0x00010000; 功能:使能信道/事件48。

27:EDMA3CC_IESR = 0x00000003; 功能:使能TCC0和TCC1中断。

28:EDMA3CC_DMAQNUM6 = 0x00000000;

功能:在DMAQNUM6寄存器中设置事件48放置在队列(queue0)中。 29:pEDMA3CC_PaRAM = EDMA3CC_PaRAM1;

功能:设置了pEDMA3CC_PaRAM为一个指向结构体的指针,用于设置PaRAM参数。 30:pEDMA3CC_PaRAM->OPT = 0x00100004;

功能:设置OPT参数,传输完成时产生中断,实行AB同步。 31:pEDMA3CC_PaRAM->SRC = EMIFA_CE4_BASE_ADDR; 功能:设置数据源地址。

32:pEDMA3CC_PaRAM->BCNT_ACNT = 0x00800008;

功能:设置BCNT和ACNT大小,这里BCNT为128,ACNT为8,单位byte。 33:pEDMA3CC_PaRAM->DST = FPGA_DATA_PING; 功能:设置目标地址。

34:pEDMA3CC_PaRAM->DSTBIDX_SRCBIDX = 0x00080008;

功能:设置DSTBIDX和SRCBIDX,用于源区域取数据和目标区域放数据时候数据存放形式时使用。

35:pEDMA3CC_PaRAM->BCNTRLD_LINK = 0x00804060; 功能:当一个传输完成的时候自动链接下一个PaRAM地址。 36:pEDMA3CC_PaRAM->DSTCIDX_SRCCIDX = 0x0;

功能:设置DSTCIDX和SRCCIDX,用于源区域取数据和目标区域放数据时候数据存放形式时使用。由于CCNT为1,所以没有CCNT数据块之间的变化,无论源还是目标区域,这里设置为0;

37:pEDMA3CC_PaRAM->RSVD_CCNT = 0x00000001;

功能:设置CCNT大小,这里仅有一个块,设置CCNT为1。 以下部分是实现连续数据传输时的设置。 pEDMA3CC_PaRAM = EDMA3CC_PaRAM2; pEDMA3CC_PaRAM->OPT = 0x00100004; //TCINTEN=1;TCC=0;SYNCDIM=1; pEDMA3CC_PaRAM->SRC = EMIFA_CE4_BASE_ADDR; pEDMA3CC_PaRAM->BCNT_ACNT = 0x00800008; //ACNT=8;BCNT=128; pEDMA3CC_PaRAM->DST = FPGA_DATA_PING; pEDMA3CC_PaRAM->DSTBIDX_SRCBIDX = 0x00080008; pEDMA3CC_PaRAM->BCNTRLD_LINK = 0x00804060; //LINK=4060, PaRMA SET 3 pEDMA3CC_PaRAM->DSTCIDX_SRCCIDX = 0x0; pEDMA3CC_PaRAM->RSVD_CCNT = 0x00000001; pEDMA3CC_PaRAM = EDMA3CC_PaRAM3; pEDMA3CC_PaRAM->OPT = 0x00101004; //TCINTEN=1;TCC=1;SYNCDIM=1; pEDMA3CC_PaRAM->SRC = EMIFA_CE4_BASE_ADDR; pEDMA3CC_PaRAM->BCNT_ACNT = 0x00800008; //ACNT=8;BCNT=128; pEDMA3CC_PaRAM->DST = FPGA_DATA_PONG; pEDMA3CC_PaRAM->DSTBIDX_SRCBIDX = 0x00080008; pEDMA3CC_PaRAM->BCNTRLD_LINK = 0x00804040; //LINK=4040, PaRMA SET 2 pEDMA3CC_PaRAM->DSTCIDX_SRCCIDX = 0x0; pEDMA3CC_PaRAM->RSVD_CCNT = 0x00000001; 注:于前面的不同仅仅在于目标地址及链接参数的设置。 38:EDMA3CC_EMCR = 0xFFFFFFFF; EDMA3CC_EMCRH = 0xFFFFFFFF; EDMA3CC_ICR = 0xFFFFFFFF; EDMA3CC_ICRH = 0xFFFFFFFF; 功能:对两组标识寄存器组进行清理。 39:CSR |= 0x1;

功能:初始化设置完成,开启中断。

附1:EDMA数据传输

增强型存储器访问EDMA控制器是6455DSP中的一个高效数据传输引擎,其结构适合高速的数据传输。其由传输控制器和通道控制器组成,其中通道控制器是EDMA中用户可编程的部分,支持一系列的复杂传输。EDMA控制器由事件和中断处理寄存器,事件队列编码器,参数RAM等构成,一个事件相当于一个同步信号,由它触发一个EDMA通道以便开始数据的传输。

EDMA同步传输类型:A同步和AB同步,这两种同步的主要区别在于计算

SRCCIDX/DSTCIDX及SRCBIDX/DSTBIDX值的计算。

参数体PaRAM的说明

EDMA通道控制器基于RAM结构,其通道有一个参数表来配置,包含源/目标地址,计数器,索引等,每一个包含8个字,其配置可实现灵活的乒乓操作,自动重装等。在PaRAM中有3个重要的参数ACNT,BCNT,CCNT,说明如下:

ACNT: The 1st dimension in a transfer consists of ACNT contiguous bytes.

BCNT: The 2nd dimension in a transfer consists of BCNT arrays of ACNT bytes.Each array transfer in the 2nd dimension is separated from each other by an index programmed using SRCBIDX or DSTBIDX.

CCNT: The 3rd dimension in a transfer consists of CCNT frames of BCNT arrays of ACNT bytes. Each transfer in the 3rd dimension is separated from the previous by an index programmed using SRCCIDX or DSTCIDX.

Figure 2-4. Definition of ACNT, BCNT, and CCNT

换言之,这三个参数可以认为是组成数据块的长宽高,但要注意在实际应用过成中的处理。如上面的框图中假设数据是连续的每一个ACNT为2byte,BCNT为10,CCNT为10的时候,也可以这样处理,将ACNT设定为20,BCNT设定为10,CCNT设定为1也是可以的,所以在设定3个参数的时候应根据实际需要设置。

下面是通道参数的具体描述: 1:OPT通道选通参数

PRIV:特权级别,分为管理员级(1)和用户级(0)。 PRIVID:在PaRAM中设定的外设特权等级。 ITCCHEN:中间链传输完成使能 TCCHEN:全部链传输使能

ITCINTEN:中间传输完成中断使能,触发中断 TCINTEN:传输全部完成中断使能,触发中断

TCC:传输完成代码,用来链接事件传输和产生中断

TCCMODE:传输完成代码模式,指示了在什么时候认为传输已经完成,用来链接事件传输

和产生中断

FWID:FIFO宽度

STATIC:静态设置,用于TR提交以后PaRAM Set是否更新或者链接到新的PaRAM Set DAM:目标地址模式,地址增量模式(0)或常数地址模式(1) SAM:源地址模式,地址增量模式(0)或常数地址模式(1)

SRC:信道数据源地址

ACNT,BCNT,CCNT:无符号的源数据参数,标识数据的结构和大小 DST:信道数据目标地址

SRCBIDX,DSTBIDX,SRCCIDX,DSTCIDX:指代的是BCNT和CCNT源及目标地址之

间的间隔

BCNTRLD:A同步模式下当BCNT减到0以后自动重装BCNT次数 LINK:一个PaRAM Set传输以后自动链接到的下一个PaRAM Set 下面举例说明重要参数ACNT,BCNT,CCNT和SRCBIDX,DSTBIDX,SRCCIDX,DSTCIDX的设置,传输数据如下:

其中每一个小方格代表的是2个byte

TI文档举例上使用的ACNT代表一行,BCNT代表多少列,由此可见ACNT=16*2=20H, BCNT=12=CH,这样就可以全部表示要传输的数据,所以CCNT只要设置为1即可,起始地址A0000788h,目标地址00800000h,在本例中不用重新转载数据,所以BCNTRLD设置为0,由于只有一个数据块CCNT,所以不存在各个CCNT之间的间隔举例,所以SRCBIDX,SRCCIDX设置为0,只有一个传输块,所以当本传输块传完的时候,应该链接到NULL区,即FFFFh,表示一个空的PaRAM Set,传输结束。由于采用了AB同步的传输,BCNT之间的间隔表示为第一个BCNT的第一个byte与第二个BCNT的第二个byte之间的距离,在源数据区这个距离是640*2,即1280个byte,所以SRCBIDX=500h,在目标区域,数据连续存放,故目标区域的间隔距离为16*2,即32个byte,所以DSTBIDX=20h,至此数据设置完成,如下图所示:

初始化DMA传输主要有3种方式: 1:事件触发

通过外部设备,系统或者外部产生的事件来触发传输请求TR 2:连锁触发

可以使用指定的传输任务完成来触发新的EDMA通道提交传输请求 3:手动触发或CPU触发

通过修改事件设置寄存器,使用CPU手动触发一个传输请求。 初始化QDMA传输主要有2种方式: 1:自动触发传输请求

在QCHMAPn中写入对应的触发字 2:链接触发传输请求

当链接发生的时候写入触发字触发传输 常用寄存器描述:

DCHMAPn:设置信道与PaRAM Set的对应关系,如DCHMAP48赋值为0x00000020指代

的就是将信道48与PaRAM Set 1对应

EESR,EESRH:事件使能设置寄存器组,指代的是0-63事件 IESR;中断使能设置寄存器,用于设置是否使能中断

DMAQNUMn:事件队列寄存器,用于设置事件/信道与传输队列(queue)之间的关系 EMCR,EMCRH:事件丢失清除寄存器,有事件在传输的过程中被侦测到丢失,将在EMR,

EMRH寄存器中对应位设置为1,不能自动清除掉,必须在寄存器EMCR,EMCRH设置清除

ICR,ICRH:中断清除寄存器,在传输的过程中被侦测到发生中断,将在IPR,IPRH寄存

器中对应位设置为1,不能自动清除掉,必须在寄存器ICR,ICRH设置清除

结合例子说明EDMA寄存器的基本设置: 1:EDMA3CC_DCHMAP48 = 0x00000020;

功能:这里写入DCHMAP48中的PAENTRY位置为1,指代的是将PaRAM Set 1映射到48信道/事件,这里的事件与信道是一一对应的,但是PaRAM与信道是可编程的。 注:信道48指代的是GPIO 事件0,实际中需要根据上面的设置来确定。 2:EDMA3CC_EESRH = 0x00010000; 功能:使能信道/事件48。

3:EDMA3CC_IESR = 0x00000003; 功能:使能TCC0和TCC1中断。

4:EDMA3CC_DMAQNUM6 = 0x00000000;

功能:在DMAQNUM6寄存器中设置事件48放置在队列(queue0)中。 5:pEDMA3CC_PaRAM = EDMA3CC_PaRAM1;

功能:设置了pEDMA3CC_PaRAM为一个指向结构体的指针,用于设置PaRAM参数。 6:pEDMA3CC_PaRAM->OPT = 0x00100004;

功能:设置OPT参数,传输完成时产生中断,实行AB同步。 7:pEDMA3CC_PaRAM->SRC = EMIFA_CE4_BASE_ADDR; 功能:设置数据源地址。

8:pEDMA3CC_PaRAM->BCNT_ACNT = 0x00800008;

功能:设置BCNT和ACNT大小,这里BCNT为128,ACNT为8,单位byte。 9:pEDMA3CC_PaRAM->DST = FPGA_DATA_PING; 功能:设置目标地址。

10:pEDMA3CC_PaRAM->DSTBIDX_SRCBIDX = 0x00080008;

功能:设置DSTBIDX和SRCBIDX,用于源区域取数据和目标区域放数据时候数据存放形式时使用。

11:pEDMA3CC_PaRAM->BCNTRLD_LINK = 0x00804060;

功能:当一个传输完成的时候自动链接下一个PaRAM地址。 12:pEDMA3CC_PaRAM->DSTCIDX_SRCCIDX = 0x0;

功能:设置DSTCIDX和SRCCIDX,用于源区域取数据和目标区域放数据时候数据存放形式时使用。由于CCNT为1,所以没有CCNT数据块之间的变化,无论源还是目标区域,这里设置为0;

13:pEDMA3CC_PaRAM->RSVD_CCNT = 0x00000001;

功能:设置CCNT大小,这里仅有一个块,设置CCNT为1。

附2:PLL功能描述及设置

PLL用于6455芯片产生内部工作或外设相应的时钟,PLL包含有可配置的倍频和分频控制器,PLL控制器提供灵活的倍频器和分频器用于调整输入的时钟,调整后的时钟将被送入DSP核,外设和DSP的其他模块。

PLL控制器包含一个输入和多个输出时钟。 CLKIN:外部晶振输入时钟

AUXCLK:直接从CLKIN引入的信号时钟

SYSCLK1 to SYSCLK16:系统域时钟,每一个包含自己的分频器

PLL工作于旁路模式bypass mode和PLL 模式PLL mode,工作模式决定与寄存器PLLCTL中的PLL enable bit和PLLENSRC bit,6455默认的工作模式是旁路模式bypass mode。 旁路模式指的是外部输入的时钟不经过倍频和分频器的处理,直接进入各个子系统时钟域进行处理,PLL模式指的是外部输入的时钟要经过倍频和分频器的处理,完成后的时钟进入各个子系统时钟域进行再处理。 寄存器及相应bit位说明:

1:PLLCTL:PLL控制寄存器,用于设置工作模式

PLLENSRC:PLL源使能比特,置0表示使能PLLEN 比特位,这时设置PLLEN才有效,

置1时直接选择外部时钟源为输入,即旁路模式,此时设置PLLEN没有效果。

PLLRST: PLL复位比特,该比特在初始化设置的时候使用。

PLLEN: PLL使能比特,该比特设置选用旁路模式还是PLL模式,该模式设置的前提

是PLLENSRC比特位必须为0,否则设置不起作用。

2:PLLM:倍频控制寄存器,用于设置倍频系数

PLLM: 5-0比特位设置倍频系数,最大可以设置64倍。 3:PREDIV:预分频控制寄存器,用于倍频后的分频

PREDEN: 预分频使能比特,如果系统工作在PLL模式下,不管是否分频,该位必须设

置为1,否则没有时钟输出。

RATIO: 预分频系数比特,控制分频比例,最大可设置32分频。 4:PLLDIVn:各个子系统分频控制寄存器,n为1-16。

DnEN: 第n个子系统分频器使能,如果要使用该子系统时钟输出,不管是否分频,

该比必须设置为1.

RATIO: 子系统分频系数比特,控制分频比例,最大可设置32分频。 5:PLLCMD:PLL控制器指令寄存器,用于初始GO OPERATION操作

GOSET: 设置为1表示开始初始化GO OPERATION操作,设置为0没有效果。 6:ALNCTL:PLL对齐控制寄存器,

ALNn: 比特位0-15指代的是1-16个子系统域是否对齐,设置为0表示在GO

OPERATION操作期间该子系统时钟与其他系统时钟不必对齐,设置为1表

示在GO OPERATION操作期间该子系统时钟与其他系统时钟对齐。

7:DCHANGE:子系统时钟状态改变寄存器,用于指示是否在GO OPERATION期间改变

子系统时钟频率。

SYSn: 设置为1表示在GO OPERATION期间子系统时钟将变为由分频器寄存器

更改以后的时钟,设置为0表示不更改,在结束的时候才更改。

8:CKEN:AUXCLK使能标志寄存器,用于控制是否使能AUXCLK。 AUXEN:设置0不使能,设置为1使能。

以上是所需要设置的寄存器,下面的是状态寄存器:

9:PLLSTAT:GO OPERATION操作状态寄存器,标识GO OPERATION操作是否在进行。 10:CKSTAT:标识AUXCLK时钟是否开启。 11:SYSTAT:标识个子系统时钟是否开启。

初始化过程:

PLL和PLL控制器在重置以后可由程序初始化,PLL控制寄存器仅仅有CPU或仿真设置, 其他主机如HPI或PCI不能设置PLL控制寄存器,并且初始化应该在程序运行的开始,在设置其他外设之前设置。 一,PLL模式下的初始化: 1:关闭中断寄存器CSR。

2:PLLCTL第5位置0,使能PLLEN。 3:设置为旁路模式。

4:执行空语句,根据要求等待4个最慢周期。 5:写入PLLRST = 1。 6:执行输入倍频频率。

7:设置使能,同时设定预分频比例。

8:执行GO OPERATION是否完成的判断。 9:设置个子系统输出使能及设定分频比例。 10:开启GO OPERATION 状态。 11: 检测GO OPERATION状态是否完成,即,检测赋值过程是否完成,因为GO OPERATION是赋值过程的标识。

12:空操作,等待PLL正确重置,128周期。 13:最后使能PLL mode。 14:使能中断寄存器CSR。 二,旁路模式下的初始化: 1:关闭中断寄存器CSR。

2:PLLCTL第5位置0,使能PLLEN。 3:设置为旁路模式。

4:执行空语句,根据要求等待4个最慢周期。 5:写入PLLRST = 1。

6:设置个子系统输出使能及设定分频比例。 7:开启GO OPERATION 状态。 8: 检测GO OPERATION状态是否完成,即,检测赋值过程是否完成,因为GO OPERATION是赋值过程的标识。

9:空操作,等待PLL正确重置,128周期。 10:最后使能PLL mode。

11:使能中断寄存器CSR。

注:旁路模式下的初始化与PLL模式的初始化区别在于旁路模式无需设置倍频及预分频。

本文来源:https://www.bwwdw.com/article/p3a6.html

Top