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

📄 interrupt.c

📁 对于DSP自引导程序的一个实例
💻 C
字号:
#include "datatype.h"

#include "timer.c"
#include "EDMA.h"

void INTERRUPT_INITIAL();
interrupt void qdma_isr();
//interrupt void edma_isr();
interrupt void timer0_isr();
//interrupt void timer1_isr();




	int flag;
	volatile int recv_done, recv_buddy_done;
	volatile int Ttimer0;
//	extern unsigned short led_t0;
	
void INTERRUPT_INITIAL()
{
/*
   该程序注意完成按照默认情况完成中断的初始化,如:
   Description: set the interrupt polarity and interrupt selector   */
   
   CSR = 0x100;	         		/* disable all interrupts */
   IER = 0x1;                   /* disable all interrupts */
   ICR = 0xffff; 				/* clear all pending interrupts*/
   
//  *(unsigned volatile int *)EXTPOL = 0x0;  // a low-to-high transition on a interrupt source is recognized as a interrupt
//  *(unsigned volatile int *)MUXL   = 0x250718a4; // Set the fault value

//  31         30 - 26   25 - 21   20 - 16    15      14 - 10   9 - 5    4 - 0 
// Reserved     INSEL9	  INSEL8    INSEL7  Reserved   INSEL6   INSEL5   INSEL4
//   0          01001     01000     00111      0        00110    00101    00100

//  *(unsigned volatile int *)MUXH   = 0x8202d43; // Set the fault value
//  31         30 - 26   25 - 21   20 - 16    15       14 - 10   9 - 5    4 - 0 
// Reserved    INSEL15	 INSEL14   INSEL13  Reserved   INSEL12   INSEL11  INSEL10
//   0          00010     00001     00000      0        01011    01010    00011

}
#if 1
/*------------------------------------------------------------*/
/* qdma_isr() --   interrupt service routine for qdma         */
/*------------------------------------------------------------*/

interrupt void qdma_isr()
{
//  Used_T = (timer0_read()- Start_T)/50 ;		//Used_T is in us
  *(unsigned volatile int *)CIPR |= 0x100;
  *(unsigned volatile int *)TIMER0_CTL |= 0;  /* stop timer0  */
  
  flag = 1;

}
#endif
/*-------------------------------------------------------*/
/* edma_isr() --   interrupt service routine for edma    */
/*-------------------------------------------------------*/

interrupt void edma_isr()
{
#if 0
	if(GET_BIT(CIPR, McBSPr_EDMA_Ch[BUDDY_BSPCH]))
	{
		REG_WRITE(CIPR, (1<<McBSPr_EDMA_Ch[BUDDY_BSPCH]));
		recv_buddy_done=1;
	}
/*	
	else if(GET_BIT(CIPR, McBSPr_EDMA_Ch[SPI_BSPCH]))
	{
		REG_WRITE(CIPR, (1<<McBSPr_EDMA_Ch[SPI_BSPCH]));
		recv_done=1;
	}
*/	
	else if(GET_BIT(CIPR, McBSPr_EDMA_Ch[BABU_BSPCH]))
	{
		REG_WRITE(CIPR, (1<<McBSPr_EDMA_Ch[BABU_BSPCH]));
		recv_done=1;
	}
#endif
#if 1
/*-----------------------------*/
  if (*(DWORD *)CIPR & 0x2000)
    {
     *(DWORD *)CIPR = 0x2000;
     recv_buddy_done=1;
     }
  if (*(DWORD *)CIPR & 0x8000)
    {
     *(DWORD *)CIPR = 0x8000;
     recv_done = 1;
    }
	//flag=1;
/*-----------------------------*/
#endif
}
/*-------------------------------------------------------------------------*/
/* timer0_isr() - interrupt service routine for TIMER1                     */
/*-------------------------------------------------------------------------*/
interrupt void timer0_isr()
{
	TIMER_INTset_ms(0,1);
	
//	timer0_INTset_ms(1);

    Ttimer0 = 1;    
}
/*-------------------------------------------------------------------------*/
/* timer1_isr() - interrupt service routine for TIMER1                     */
/*-------------------------------------------------------------------------*/
/*
interrupt void timer1_isr()
{
  if (led_t0 == 0x8888)
      led_t0 = 0x1111;
  else
      led_t0 = led_t0 <<1;
    
	*(WORD *)FLAG_LED = (~led_t0); 
	
}
*/

⌨️ 快捷键说明

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