TI中文支持网
TI专业的中文技术问题搜集分享网站

6747固件下载后,EMIF读写不正常

如题,系统 : dsp 是通过fifo采集数据,两者之间有一个数据锁存器。dsp 利用GPIO 来实现控制采集传输数据从FIFO到dsp ,但是通过串口下载固件后。EMIFA工作不正常。 采集数据全为零 。用示波器检查,数据锁存器有数据经过。所以肯定是DSP EMIFA 工作不正常导致, 挂着仿真器,一切正常。求教如何配置固件EMIFA .

Tony Tang:

检查一下EMIFA的pinmux配置(可以对照gel文件里相应的配置部分)

yang jing:

回复 Tony Tang:

您好,pinmux检查过了。没有问题。是通过AISGEN for D800K003这个软件调试的bin文件。然后通过串口下载固件到dsp。在这个AISGEN 配置文件中,PLL  PINMUX  串口都配置正常。唯一不正常的就是EMIFA . 在我的项目中, emifA 连接的不是SDRAM ,仅仅是 一个锁存器,在锁存器另一端是FIFO 。所以在aisgen 中没有配置EMIFA . 是否应该配置呢???此外只要dsp挂着仿真器,就一切正常。

Tony Tang:

回复 yang jing:

PSC里使能EMIF了吗?

Jacob1:

回复 Tony Tang:

你好,挂仿真器和脱机是完全不同的。尤其是挂着仿真器的话可以用GEL文件进行初始化,而烧写过程中GEL文件没有任何作用的,需要将这些初始化添加到程序中。

建议你load symble烧写的out文件,单步调试一下看看与仿真情况下的EMIF的寄存器状态是否一样,查找哪里有问题。

yang jing:

回复 Jacob1:

jacob, 您好

首先非常感谢您的指教,关于那个烧写后emifA读写不正常。 我已经在程序中配置了各个寄存器。也配置了PSC. 但依然找不到问题的关键。此外,在我的程序中,没有用到GEL文件。一直是手动配置寄存器的。 下面给您附上程序部分代码,求指教。

#include <stdio.h>

#include <math.h>

#include <c6x.h>

#include <ti/pspiom/cslr/cslr_cache.h>

#include <ti/pspiom/cslr/csl_types.h>

#include <ti/pspiom/cslr/cslr_dspintc.h>

#include <ti/pspiom/cslr/soc_C6747.h>

#include <ti/pspiom/cslr/cslr_uart.h>

#include <ti/pspiom/cslr/cslr_syscfg_C6747.h>

#include <ti/pspiom/cslr/cslr_psc_C6747.h>

#include <ti/pspiom/cslr/cslr_gpio.h>

#include <ti/pspiom/cslr/cslr_pllc_C6747.h>

#include <ti/pspiom/cslr/cslr_spi.h>

#include <ti/pspiom/cslr/cslr_emifa2.h>

#define AEMIF_AWCCR             (*( unsigned int* )( 0x68000004 ))

#define AEMIF_A1CR              (*( unsigned int* )( 0x68000010 ))

#define AEMIF_A2CR              (*( unsigned int* )( 0x68000014 ))

#define AEMIF_A3CR              (*( unsigned int* )( 0x68000018 ))

#define AEMIF_A4CR              (*( unsigned int* )( 0x6800001C ))

#define AEMIF_NANDFCR           (*( unsigned int* )( 0x68000060 ))

CSL_SyscfgRegsOvly   sysRegs  = (CSL_SyscfgRegsOvly)(CSL_SYSCFG_0_REGS);

CSL_PscRegsOvly      psc0Regs = (CSL_PscRegsOvly)(CSL_PSC_0_REGS);

CSL_PscRegsOvly      psc1Regs = (CSL_PscRegsOvly)(CSL_PSC_1_REGS);                                                                                              

CSL_UartRegsOvly     uartRegs = (CSL_UartRegsOvly)(CSL_UART_1_REGS);

CSL_EmifaRegsOvly    emifaRegs = (CSL_EmifaRegsOvly)(CSL_EMIFA_0_REGS);

void device_init(void)

{

   //—————————–PSC———————————//

   // TURN ON POWER SLEEP CONTROL BY EMIFA

psc0Regs->MDCTL[CSL_PSC_EMIFA] = CSL_FMKT( PSC_MDCTL_NEXT, ENABLE )

                           | CSL_FMKT( PSC_MDCTL_LRST, DEASSERT );

psc0Regs->PTCMD = CSL_FMKT(  PSC_PTCMD_GO0, SET );

while ( CSL_FEXT( psc0Regs->MDSTAT[CSL_PSC_EMIFA], PSC_MDSTAT_STATE )

      != CSL_PSC_MDSTAT_STATE_ENABLE );

// TURN ON POWER SLEEP CONTROL BY UART

psc1Regs->MDCTL[CSL_PSC_UART1] = CSL_FMKT( PSC_MDCTL_NEXT, ENABLE )

                           | CSL_FMKT( PSC_MDCTL_LRST, DEASSERT );

psc1Regs->PTCMD = CSL_FMKT(  PSC_PTCMD_GO0, SET );

while ( CSL_FEXT( psc1Regs->MDSTAT[CSL_PSC_UART1], PSC_MDSTAT_STATE )

      != CSL_PSC_MDSTAT_STATE_ENABLE );

// TURN ON POWER SLEEP CONTROL BY GPIO

psc1Regs->MDCTL[CSL_PSC_GPIO] = CSL_FMKT( PSC_MDCTL_NEXT, ENABLE )

                           | CSL_FMKT( PSC_MDCTL_LRST, DEASSERT );

psc1Regs->PTCMD = CSL_FMKT(  PSC_PTCMD_GO0, SET );

while ( CSL_FEXT( psc1Regs->MDSTAT[CSL_PSC_GPIO], PSC_MDSTAT_STATE )

      != CSL_PSC_MDSTAT_STATE_ENABLE );

   //———-PIN MUX———–//

sysRegs->KICK0R = 0x83e70b13;

sysRegs->KICK1R = 0x95A4F1E0;    

sysRegs->PINMUX0  = 0x00000011;  

sysRegs->PINMUX1  = 0x88888888;  

sysRegs->PINMUX2  = 0x00888888;  

sysRegs->PINMUX5  = 0x88888880;  

sysRegs->PINMUX6  = 0x88888888;  

sysRegs->PINMUX7  = 0x00000008;

sysRegs->PINMUX8  = 0x20011000;  

sysRegs->PINMUX9  = 0x00000002;  

sysRegs->PINMUX11 = 0x00001100;  

sysRegs->PINMUX13 = 0x11000000;

sysRegs->PINMUX14 = 0x11111111;  

sysRegs->PINMUX15 = 0x11111111;

sysRegs->PINMUX16 = 0x11111111;  

sysRegs->PINMUX17 = 0x11111111;

sysRegs->PINMUX18 = 0x11111111;  

sysRegs->PINMUX19 = 0x00000001;

   //——–REGISTER EMIFA——–//

emifaRegs->AWCC      = 0xff;

emifaRegs->CE2CFG    = 0x00300601;

emifaRegs->NANDF1ECC = 0x01;

}

void main ()

{

   device_init();

   init_gpio();

   init_uart();

while (1)

{

    CMain();

 } //end while

}

yang jing:

回复 Tony Tang:

Tony TANG ,您好,

 我在程序中已经是能了PSC0-3

whagiew zhang:

回复 yang jing:

时序呢?有没有影响?

yang jing:

回复 whagiew zhang:

受到影响。

yang jing:

回复 Jacob1:

谢谢,您的建议。问题找到了。是硬件问题。已经解决。谢谢大家关注。

赞(0)
未经允许不得转载:TI中文支持网 » 6747固件下载后,EMIF读写不正常
分享到: 更多 (0)