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.

C28345的XINTF无法写入数据到数据总线

各位开发者:

    大家好。我使用C28345的XINTF连接FPGA,从FPGA读取数据能够成功,但无法写数据到FPGA中,XINTF的数据总线都是高电平,可能的原因是什么?程序如下:

#include "DSP28x_Project.h" 
#include "DSP2834x_GlobalPrototypes.h"

#define LENGTH 2700
#define EXTREME_LENGTH 1350

#define FPGA_data (0x100000) // zone 6首地址

Uint16 original_value[LENGTH];

// 统计XINT1中断触发的次数
volatile Uint32 Xint1Count;

// 数据处理后,需要输出的最大值对应的索引
Uint16 output_index = 0;

Uint16 isr_count = 0;
Uint16 deal_count = 0;

// 判断每次读数是否成功的标志量
Uint16 flag = 0;
volatile Uint16* dest;
volatile Uint16* source;
void init_zone6(void);
interrupt void xint1_isr(void);

// 对采集的数据进行处理
void DataDeal();

void main(void)
{
Uint32 TempX1Count;

InitSysCtrl();

InitGpio(); // Skipped for this example

DINT;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();


EALLOW; 
PieVectTable.XINT1 = &xint1_isr;
EDIS;

init_zone6();

Xint1Count = 0;


PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; 
IER |= M_INT1; 
EINT; 

EALLOW;

GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO12 = 0; 

EDIS;

EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0xC; // Xint1 is GPIO12
EDIS;

XIntruptRegs.XINT1CR.bit.POLARITY = 1; // Rising edge interrupt

XIntruptRegs.XINT1CR.bit.ENABLE = 1; // Enable Xint1

TempX1Count = Xint1Count;

isr_count = 0;
deal_count = 0;

for(;;)
{
}

}


void init_zone6(void)
{
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;

InitXintf16Gpio();

EALLOW;

XintfRegs.XINTCNF2.bit.XTIMCLK = 0;
XintfRegs.XINTCNF2.bit.WRBUFF = 0;

XintfRegs.XTIMING6.bit.XWRLEAD = 3;
XintfRegs.XTIMING6.bit.XWRACTIVE = 6;
XintfRegs.XTIMING6.bit.XWRTRAIL = 3;

XintfRegs.XTIMING6.bit.XRDLEAD = 2;
XintfRegs.XTIMING6.bit.XRDACTIVE = 6;
XintfRegs.XTIMING6.bit.XRDTRAIL = 0;

XintfRegs.XTIMING6.bit.X2TIMING = 0;

XintfRegs.XTIMING6.bit.USEREADY = 0;
XintfRegs.XTIMING6.bit.READYMODE = 0;

XintfRegs.XTIMING6.bit.XSIZE = 3;
EDIS;

asm(" RPT #7 || NOP");
}


interrupt void xint1_isr(void)
{
output_index = 500;

source = (volatile Uint16*)0x0100000;
*source = output_index;

++deal_count;
isr_count = *source;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}