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

📄 c6711_intr.c

📁 该代码实现了 两次下载法在dspC6713平台上 烧写flash的操作过程
💻 C
字号:

/*****************************************************************************
* File name :     C6711_INTERRUPT.c
* Description:
******************************************************************************/
#ifndef MASTER_FILE
#define C6711_GLOBALS
//#include "includes.h"
#endif
#include "edma.h"
#include "INTR.H"
#include "TIMER.h"

extern unsigned int framecnt,test_cnt;
extern unsigned char flage,flag8,flag9,flag6,cal_cnt,infoflag,pingpongflag;
extern unsigned char buffer_data0[4096],buffer_data1[4096];
extern unsigned char defectsend[8];
/*******************************************************************************
*                     Function     prototypes
*******************************************************************************/


/******************************************************************************
* function    : intr_init()
* description : Interrupt initialization
******************************************************************************/
void intr_init(void)
{
 INTR_MAP_RESET(); /* Set Interrupt Mapping*/
// CSR=0x101;
// IER=0x4010;       /* Enable INT4 *///4112
// ICR=0xffff;       /* clear all pending interrupts  */
 //(*(unsigned int *)(0xA00004F4))=0x80008;
 
  CSR=0x141;                           /* Disable all interrupts              */
  IER=1;                               /* Disable all interrupts except NMI   */
  ICR=0xffff;                          /* Clear all pending interrupts        */
}

/******************************************************************************
* function    : External_Interrupt4
* description : INT_04#,PCI interrupt service program.
******************************************************************************/
interrupt void External_Interrupt4(void)
{
		unsigned int dst_addr,temp;
		temp=IFR;
		ICR=temp;       /* clear all pending interrupts  */
	 	*(volatile unsigned int *) CIPR = 0x0010;
	 	dst_addr=0x80500000+0x800*framecnt;
	 	EDMA4_channel(dst_addr);
	 	EDMA_Set(4);  
}
/******************************************************************************
* function    : External_Interrupt5
* description : INT_05#
******************************************************************************/
interrupt void External_Interrupt5(void)
{
} 

/******************************************************************************
* function    : External_Interrupt6
* description : INT_06#
******************************************************************************/
interrupt void External_Interrupt6(void)
{
} 
/******************************************************************************
* function    : External_Interrupt7
* description : INT_07#
******************************************************************************/
interrupt void External_Interrupt7(void)
{
} 
/******************************************************************************
* function    : EDMA_Interrupt	(void ) 
* description : INT_08#,EDMA controller interrupt's handlers
*               Acts on an interrupt when the EDMA channel issues an interrupt
******************************************************************************/
interrupt void EDMA_Interrupt(void)            
{
unsigned int buffer_addr;
unsigned int temp;//temp_addr,i,oldtemp,dst_addr
//near unsigned int tempint;
*(volatile unsigned int *) ECR = 0xffff;
temp=*(volatile unsigned int *) CIPR;
*(volatile unsigned int *) CIPR = temp;//0xffff;  //清除EDMA事件悬挂reg 必要步骤

	//不可以用0xffff全部清除 否则屏蔽掉 8 9了 
	if(temp&0x0010)
	{
		flage=1;
		ICR=0xffff;       /* clear all pending interrupts  */
		
		EDMA8_channel(framecnt);//2k data from sdram to pci 
		EDMA_Set(8);
		framecnt=framecnt+1;
		test_cnt+=1;
		infoflag=0;
// if(framecnt>=128) framecnt=0;
	 	
	}
	if(temp&0x0040)
		{
		 flag6=1; 
		 }
if((temp&0x0100)&&(infoflag==0))// framecnt/8==0 pc
	{
	 flag8=1; 
	 infoflag=1;
	 if((framecnt&0x07)==0)
		 {
			 buffer_addr=0xA0007FFC;
			 temp=framecnt>>3;
			 if(temp>=8) temp=temp-8;
			 (*(unsigned int *)(buffer_addr))=defectsend[temp];		 
		 	buffer_addr=0xA00004F8;
		 	(*(unsigned int *)(buffer_addr))=0x1001010;
		 }	 	 
	 if(framecnt&0x01)//为奇数
	 	{
		 pingpongflag=!pingpongflag;
		 
		 if(pingpongflag)//framecnt%4==0
		 {	
		 buffer_addr=0x20000;
		 cal_cnt=framecnt>>1;
		 if(framecnt>=64) //err change
		 	{
		 	cal_cnt-=32;
		 	buffer_addr=0;
		 	}
		 buffer_addr+=0x80500000+cal_cnt*64;
		 		
		 EDMA6_channel(buffer_addr,(unsigned int)buffer_data1);
		 EDMA_Set(6);
		 } 
		 else //framecnt%2==0
		 {
		 buffer_addr=0x20000;
		 cal_cnt=framecnt>>1;
		 if(framecnt>=64) 
		 	{
		 	cal_cnt-=32;
		 	buffer_addr=0;
		 	}
		 buffer_addr+=0x80500000+cal_cnt*64;
		
		 EDMA6_channel(buffer_addr,(unsigned int)buffer_data0);
		 EDMA_Set(6);
		 }
	 }
	 
	 if(framecnt>=128)//再次启动 计算过程//后128k
	 	{
	 	 framecnt=0;
	 	}	 
	} 
//*(volatile unsigned int *) CIPR = 0xffff;	
//if(temp&0x0200)
//	flag9=1; 
	
}

/* END OF FILE */


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -