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连接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;
}