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:连锁触发