📄 isr_init.i
字号:
#line 76 "D:\\Program Files\\Analog Devices\\VisualDSP 3.5 16-Bit\\Blackfin\\include\\sys\\exception.h"
#line 94 "D:\\Program Files\\Analog Devices\\VisualDSP 3.5 16-Bit\\Blackfin\\include\\sys\\exception.h"
typedef enum {
ik_err=-1,
ik_emulation,
ik_reset,
ik_nmi,
ik_exception,
ik_global_int_enable,
ik_hardware_err,
ik_timer,
ik_ivg7,
ik_ivg8,
ik_ivg9,
ik_ivg10,
ik_ivg11,
ik_ivg12,
ik_ivg13,
ik_ivg14,
ik_ivg15,
num_interrupt_kind
} interrupt_kind;
typedef struct {
int r0x, r1x, r2x;
struct {
int lb1, lb0, lt1, lt0, lc1, lc0;
int a1, a1x, a0, a0x, cc;
int l3,l2,l1,l0,b3,b2,b1,b0;
int m3;
int m2,m1,m0,i3,i2,i1,i0;
} _inaccessible;
int p5, p4, p3, p2, p1, p0;
int r7, r6, r5, r4, r3, r2, r1, r0;
int fp;
int astat;
} interrupt_regs;
typedef struct {
interrupt_kind kind;
int value;
void *pc;
void *addr;
unsigned status;
interrupt_regs *regsaddr;
} interrupt_info;
typedef void (*ex_handler_fn)(int, int, int);
#line 210 "D:\\Program Files\\Analog Devices\\VisualDSP 3.5 16-Bit\\Blackfin\\include\\sys\\exception.h"
void get_interrupt_info(interrupt_kind, interrupt_info *);
void _ex_report_event(interrupt_info *);
ex_handler_fn register_handler(interrupt_kind, ex_handler_fn);
int raise_interrupt(interrupt_kind kind, int which,
int cmd, int arg1, int arg2);
#line 5 ".\\isr_init.c"
#line 1 "plx9054_bf533_test.h"
#line 17 "plx9054_bf533_test.h"
typedef struct __Plx_dsp_com{
unsigned short L1ToSdramBank;
unsigned long pL1ToSdramAddr;
unsigned long L1ToSdramOffset;
unsigned short NumberOfPpibuf;
unsigned short NumberCalculationbuf;
unsigned short firtPpiInterrupt;
unsigned long pSdramToFPGA;
unsigned long SdramToFPGAOffset;
unsigned short SdramToFPGABank;
}Plx_dsp_com;
typedef struct _DMA_DESC_PTR_LARGE{
unsigned short NDPL;
unsigned short NDPH;
unsigned short SAL;
unsigned short SAH;
unsigned short DMACFG;
unsigned short XCNT;
unsigned short XMOD;
unsigned short YCNT;
unsigned short YMOD;
}DMA_DESC_PTR_LARGE;
typedef struct _DMA_DESC_PTR_SMALL{
unsigned short NDPL;
unsigned short SAL;
unsigned short SAH;
unsigned short XCNT;
unsigned short XMOD;
unsigned short YCNT;
unsigned short YMOD;
}DMA_DESC_PTR_SMALL;
#line 6 ".\\isr_init.c"
#line 1 "D:\\Program Files\\Analog Devices\\VisualDSP 3.5 16-Bit\\Blackfin\\include\\signal.h"
#line 1 "D:\\Program Files\\Analog Devices\\VisualDSP 3.5 16-Bit\\Blackfin\\include\\sys/signal_bf.h"
#pragma once
#pragma system_header /* signal_bf.h */
extern "C" {
void (*interrupt(int, void (*_func)(int))) (int);
}
#line 25 "D:\\Program Files\\Analog Devices\\VisualDSP 3.5 16-Bit\\Blackfin\\include\\signal.h"
typedef int sig_atomic_t;
typedef void _Sigfun(int);
#line 67 "D:\\Program Files\\Analog Devices\\VisualDSP 3.5 16-Bit\\Blackfin\\include\\signal.h"
extern "C" {
_Sigfun * signal(int, _Sigfun *);
}
int raise(int);
#line 7 ".\\isr_init.c"
extern unsigned short *pRead ;
extern unsigned short *pWrite;
extern unsigned short *pSDRam;
extern unsigned short *pInt9054 ;
extern unsigned short *pDspStatus ;
extern unsigned short *pPenfaReg;
extern unsigned short Parameter[10];
int ParameterLength;
int FreqSpeed;
int Penfa;
Plx_dsp_com dsp2plx;
extern void SdramDMAFPGA(unsigned long * Addr);
void plx9054_int(void)
{
*pInt9054 = 0xffff;
__builtin_ssync();
*pInt9054 = 0x0000;
__builtin_ssync();
}
int CommandCheck(unsigned short *pCommand)
{
switch(pCommand[0])
{
case 0x01:
{
if(pCommand[2] == 0x55 )
return 1;
else if( pCommand[2] == 0xaa)
return 2;
}break;
case 0x02:
{
if(pCommand[2] == 0x55 )
return 3;
else if( pCommand[2] == 0xaa)
return 4 ;
}break;
case 0x03:
{
return 5;
}
case 0x04:
{
return 6;
}
case 0x05:
{
return 7;
}
case 0x06:
{
if(pCommand[2] == 0xaa)
return 8;
}break;
case 0x07:
{
return 9;
}
case 0x08:
{
return 10;
}
default :
return 0;
}
return 0;
}
_Pragma("interrupt") void MDMA_INT ( int _r0x, int _r1x, int _r2x )
{
unsigned short MDma_Status;
unsigned short tempL1ToSdramBank;
MDma_Status = *((volatile unsigned short *)0xFFC00EE8);
if(MDma_Status &0x0001)
{
*pDspStatus = 0x55aa;
dsp2plx.SdramToFPGAOffset += 4096*2;
if(dsp2plx.SdramToFPGAOffset ==1024*1024*4*2)
{
dsp2plx.SdramToFPGAOffset = 0;
dsp2plx.SdramToFPGABank +=1;
if(dsp2plx.SdramToFPGABank >3)
{
dsp2plx.SdramToFPGABank = 0;
}
}
*((volatile unsigned short *)0xFFC00EE8) = 0x1;
*((volatile unsigned short *)0xFFC00EA8) = 0x1;
}
MDma_Status = *((volatile unsigned short *)0xFFC00E68);
if(MDma_Status&0x0001)
{
dsp2plx.L1ToSdramOffset += 4096*2;
if(dsp2plx.L1ToSdramOffset ==1024*1024*4*2)
{
dsp2plx.L1ToSdramOffset = 0;
tempL1ToSdramBank = dsp2plx.L1ToSdramBank;
tempL1ToSdramBank++;
if(tempL1ToSdramBank > 3)
tempL1ToSdramBank = 0;
if(tempL1ToSdramBank == dsp2plx.SdramToFPGABank)
tempL1ToSdramBank++;
if(tempL1ToSdramBank > 3)
tempL1ToSdramBank = 0;
dsp2plx.L1ToSdramBank = tempL1ToSdramBank ;
}
*((volatile unsigned short *)0xFFC00E68) = 0x1;
*((volatile unsigned short *)0xFFC00E28) = 0x1;
}
}
_Pragma("interrupt") void DMA0_INT ( int _r0x, int _r1x, int _r2x )
{
unsigned short tempPpiToSdramBank;
*((volatile unsigned short *)0xFFC00C28) = 0x01;
if(dsp2plx.firtPpiInterrupt== 0)
dsp2plx.firtPpiInterrupt = 1;
dsp2plx.NumberCalculationbuf = dsp2plx.NumberOfPpibuf;
dsp2plx.NumberOfPpibuf ++;
if(dsp2plx.NumberOfPpibuf >=3)
dsp2plx.NumberOfPpibuf = 0;
}
_Pragma("interrupt") void DMA_ERR_DMA0_EER_INT ( int _r0x, int _r1x, int _r2x )
{
unsigned short i;
i = *((volatile unsigned short *)0xFFC01004) ;
if((i>>12)&0x01)
{
}
unsigned short Mdma_S0_Irq_Status,Mdma_D0_Irq_Status ;
*((volatile unsigned short *)0xFFC00E48) &= ~0x1;
*((volatile unsigned short *)0xFFC00E08) &= ~0x1;
Mdma_S0_Irq_Status = (*((volatile unsigned short *)0xFFC00E68));
if(Mdma_S0_Irq_Status &0x02)
*((volatile unsigned short *)0xFFC00E68) = 0x02;
Mdma_D0_Irq_Status = (*((volatile unsigned short *)0xFFC00E28));
if(Mdma_D0_Irq_Status &0x02)
*((volatile unsigned short *)0xFFC00E28) = 0x02;
unsigned short Mdma_S1_Irq_Status,Mdma_D1_Irq_Status ;
*((volatile unsigned short *)0xFFC00EC8) &= ~0x1;
*((volatile unsigned short *)0xFFC00E88) &= ~0x1;
Mdma_S1_Irq_Status = (*((volatile unsigned short *)0xFFC00EE8));
if(Mdma_S1_Irq_Status &0x02)
*((volatile unsigned short *)0xFFC00EE8) = 0x02;
Mdma_D1_Irq_Status = (*((volatile unsigned short *)0xFFC00EA8));
if(Mdma_D1_Irq_Status &0x02)
*((volatile unsigned short *)0xFFC00EA8) = 0x02;
}
int precom = 0,com = 0;
_Pragma("interrupt") void PF3_INTA ( int _r0x, int _r1x, int _r2x )
{
int i;
int pLength;
if( com !=5) precom = com;
com = CommandCheck(pRead);
switch(com)
{
case 1 :
{
StartPPI();
}break;
case 2:
{
StopPPI();
}break;
case 3:
{
ParameterLength = 0;
}break;
case 5:
{
if(precom == 3)
{
pLength = pRead[1];
for( i = 0 ; i < pLength; i++)
{
Parameter[i+ParameterLength] = pRead[i+3];
}
ParameterLength += pLength;
}
}break;
case 4:
{
precom = 0;
}break;
case 6:
{
Penfa = pRead[3];
*pPenfaReg = Penfa;
}break;
case 7:
{
if(pRead[2] == 0x55)
{
FreqSpeed = pRead[3];
}
unsigned short Msel,reg;
Msel = (unsigned short)FreqSpeed/15;
*((volatile unsigned short *)0xFFC00000) = 0x0001|((Msel)<<9);
reg = __builtin_cli();
__builtin_idle();
__builtin_sti(reg);
}break;
case 8 :
{
unsigned short status;
}break;
case 9:
{
*pDspStatus = 0;
{
dsp2plx.pSdramToFPGA = (unsigned long)(pSDRam+1024*1024*4*dsp2plx.SdramToFPGABank);
SdramDMAFPGA(dsp2plx.pSdramToFPGA+dsp2plx.SdramToFPGAOffset);
}
}break;
case 10:
{
{
SdramDMAFPGA(dsp2plx.pSdramToFPGA+dsp2plx.SdramToFPGAOffset);
}
}
default: break;
}
i = *((volatile unsigned short *)0xFFC00700) ;
*((volatile unsigned short *)0xFFC00704) = 0X0008;
*((volatile unsigned short *)0xFFC00714) = 0x0008;
*((volatile unsigned short *)0xFFC00718) = 0x0008;
__builtin_ssync();
}
void initPFLAGS(void)
{
*((volatile unsigned short *)0xFFC00730) = 0x0000;
*((volatile unsigned short *)0xFFC00734) = 0X00;
*((volatile unsigned short *)0xFFC0073C) = 0X000;
*((volatile unsigned short *)0xFFC00718) = 0X0008;
*((volatile unsigned short *)0xFFC00710) = 0X0008;
*((volatile unsigned short *)0xFFC00738) = 0X0000;
*((volatile unsigned short *)0xFFC00740) = 0x0008;
}
void Init_Interrupts(void)
{
register_handler(ik_ivg12, PF3_INTA);
register_handler(ik_ivg13,MDMA_INT);
register_handler(ik_ivg7 ,DMA_ERR_DMA0_EER_INT);
register_handler(ik_ivg8 ,DMA0_INT);
*((volatile unsigned long *)0xFFC0010C) = 0x00080100;
*((volatile unsigned long *)0xFFE02104) = 0X00001000;
*((volatile unsigned long *)0xFFC0010C) |= (1<<21);
*((volatile unsigned long *)0xFFC0010C) |= (1<<22);
*((volatile unsigned long *)0xFFE02104) |=(1<<13);
*((volatile unsigned long *)0xFFC0010C) |= (1<<1);
*((volatile unsigned long *)0xFFE02104) |= (1<<7);
*((volatile unsigned long *)0xFFC0010C) |= (1<<8);
*((volatile unsigned long *)0xFFE02104) |= (1<<8);
*((volatile unsigned long *)0xFFC0010C) |= (1<<2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -