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

📄 new_interup.c

📁 使用DSP的DM642中EDMA中断服务程序
💻 C
字号:
#include <csl_irq.h>
#include <csl_edma.h>
#include <tistdtypes.h>


extern cregister volatile unsigned int CSR;
extern cregister volatile unsigned int IRP;
extern cregister volatile unsigned int IER;
// Address of interrupt selector registers
#define EXTPOL	(0x019C0008)

extern  EDMA_Handle hEdmaMcaspWrite; // McASP Write
extern EDMA_Handle hEdmaMcaspRead;  // McASP Read


extern unsigned short xmtDataBuf[4];  
extern unsigned short rcvDataBuf[4];  



void interruptReset()
{
	IRQ_resetAll();
	IRQ_nmiDisable();
	EDMA_resetAll();
	
	return;
}

void interruptInit()
{
	// ReAllocate Interrupt Vector Table Base Address
	IRQ_setVecs((void*)0x000001C00);
	
	

	// interrupt selector init, MUXH, MUXL
	*(int *)EXTPOL = 0x000000C3; // EXTPOL, falling edge -> '1', rising edge -> '0'
	IRQ_map(IRQ_EVT_EDMAINT, 8);
    IRQ_map(IRQ_EVT_EXTINT6, 6);
    IRQ_map(IRQ_EVT_EXTINT5, 5);
    
	// Clear spurious interrupt flag caused by IRQ_map()
	IRQ_clear(IRQ_EVT_EDMAINT); // IFR
	IRQ_clear(IRQ_EVT_EXTINT6);
	IRQ_clear(IRQ_EVT_EXTINT5);

	// CPU interrupt control register
	IRQ_nmiEnable(); // IER
	IRQ_enable(IRQ_EVT_EDMAINT); // IER
	IRQ_enable(IRQ_EVT_EXTINT7); 
	IRQ_enable(IRQ_EVT_EXTINT6); 

	// enable EDMA interrupt
	EDMA_intEnable(EDMA_CHA_REVT0); //read
	EDMA_intEnable(EDMA_CHA_XEVT0); //write

	
	// clear EDMA interrupt
	EDMA_intClear(EDMA_CHA_REVT0);
	EDMA_intClear(EDMA_CHA_XEVT0);

	
	IRQ_globalEnable(); // CSR

	return;
}

interrupt void int5() //read
{ 
  EDMA_setChannel(hEdmaMcaspRead);
  return;
}
/*
interrupt void int6() // write
{
   EDMA_setChannel(hEdmaMcaspWrite);
    return;
}
*/ 
 
 
 
interrupt void edmaIsr()
{
    int i,Fread_flag;	
	if (EDMA_intTest(EDMA_CHA_REVT0)) // read 
	{
		EDMA_intClear(EDMA_CHA_REVT0); // CIPRL
        for(i=0;i<4;i++)
		{
		 xmtDataBuf[i]=rcvDataBuf[i];
		}
		
	// ------------start transmit the data to aic23 ------------ 
	}

	EDMA_setChannel(hEdmaMcaspWrite); // write dsp1 to dsp2 fifo 
/*	if (EDMA_intTest(EDMA_CHA_XEVT0)) // read pang, negtive modulation
	{
		EDMA_intClear(EDMA_CHA_XEVT0); // CIPRL

*/	    


	return;
 }

⌨️ 快捷键说明

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