⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isr_init.i

📁 基于adsp-bf533的异性纤维检测算法的实现
💻 I
📖 第 1 页 / 共 3 页
字号:




#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 + -