如题,系统 : dsp 是通过fifo采集数据,两者之间有一个数据锁存器。dsp 利用GPIO 来实现控制采集传输数据从FIFO到dsp ,但是通过串口下载固件后。EMIFA工作不正常。 采集数据全为零 。用示波器检查,数据锁存器有数据经过。所以肯定是DSP EMIFA 工作不正常导致, 挂着仿真器,一切正常。求教如何配置固件EMIFA .
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
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
}
楼主用的是PSP的driver, 可从这里下载:http://www.ti.com/tool/biossw-c6747
如果不是太熟悉PSP,可以用BSL提供的基本函数。C6747的BSL及EVM的其它资料可以从可以从这里下载:
http://support.spectrumdigital.com/boards/evmomapl137/revg/