|
求助!!!
状态:以前开发板上cpld配有与2812配套的 .pof文件,烧进去,可以用的,改为自己写的CPLD程序后完全没反应,下面是自己写的CPLD程序和开发板2812部分程序资料。
管脚连接:使用TOP2812开发板,cpld接2812的A12--A7,cs01,XWE#,RD#,R/W#,XREADY,数据D0--D7。
目的:2812 向0x2800的地址写数据,cpld 接受数据后相应的控制 led。
cpld部分代码:
module xintftest(cs01,xwe,xrd,clk,D,A,led);
input clk; //时钟输入,30M
input xwe,xrd,cs01; //写信号,读信号,片选
input [7:0] D; //数据信号
input [12:7] A; //地址信号
output [7:0] led; //LED输出
reg [7:0] led;
reg [7:0] sram; //缓存
always @ (xwe or xrd or cs01 or D or A)
begin
if((cs01==1'b0) && (A==6'b010000)) //2812写数据的地址为0x2800,cpld接2812的A12--A7
begin
if( !xwe )
begin
sram <= D;
end
end
end
always @ (posedge clk)
begin
led <= sram;
end
endmodule
2812部分代码:
#include "DSP28_Device.h"
#define LedADDR *(unsigned int *)0x2800 //8个发光二极管寄存器地址
unsigned int Count,Flag;
/////////////////对应位低电平点亮该位发光二极管
const Uint16 LedCode[9]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};
interrupt void ISRTimer0(void);
void main(void)
{
InitSysCtrl(); //初始化系统
DINT; //关中断
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl(); //初始化PIE
InitPieVectTable(); //初始化PIE中断矢量表
InitPeripherals(); //初始化外设
InitGpio();
EALLOW;
PieVectTable.TINT0 = &ISRTimer0;
EDIS;
Count = 0; //初始化变量
Flag=0;
ConfigCpuTimer(&CpuTimer0, 10, 1000000); //设置CPU
StartCpuTimer0();
IER |= M_INT1; //开中断
PieCtrl.PIEIER1.bit.INTx7=1;
EINT; // 允许INTM
ERTM; // 允许DBGM
LedADDR=0x00; // 点亮全部8个LED灯
for(;;)
{ ; }
}
interrupt void ISRTimer0(void)
{
PieCtrl.PIEACK.bit.ACK7=1;
LedADDR = LedCode[Count]; //依次点亮灯,置相应位低电平
if (Flag==0) Count++; else Count--;
if (Count>=8)//循环
{
Flag=1; }
if (Count<=0)//循环
{
Flag=0;
}
}
Xintf初始化:
// All Zones:
// Timing for all zones based on XTIMCLK = SYSCLKOUT/2
XintfRegs.XINTCNF2.bit.XTIMCLK = 1; // XTIMCLK = SYSCLKOUT/2
XintfRegs.XINTCNF2.bit.CLKOFF = 1; // DISABLE XCLKOUT
XintfRegs.XINTCNF2.bit.WRBUFF = 0; // NO WRITE BUFFER
XintfRegs.XINTCNF2.bit.CLKMODE = 1; // XCLKOUT = XTIMCLK/2
// Zone 0
// Ignore XREADY for Zone 1 accesses
// Change read access lead/active/trail timing
XintfRegs.XTIMING0.bit.USEREADY = 0;
XintfRegs.XTIMING0.bit.XSIZE = 3; // ALWAYS WRITE TO 11BIT
XintfRegs.XTIMING0.bit.XWRACTIVE = 3;
XintfRegs.XTIMING0.bit.XWRTRAIL=7;
XintfRegs.XTIMING0.bit.XWRLEAD=3;
XintfRegs.XTIMING0.bit.XRDLEAD = 3;
XintfRegs.XTIMING0.bit.XRDACTIVE =7;
XintfRegs.XTIMING0.bit.XRDTRAIL = 3;
// Double lead/active/trial timing for Zone 1
XintfRegs.XTIMING0.bit.X2TIMING=1; |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|