?? c6711_intr.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 + -