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

📄 isr.c

📁 ARM的串口源码
💻 C
字号:
   //*********************************************************************
   //				  VANDER  PROPRIETARY
   //		
   //		COPYRIGHT (c)   2006 BY VANDER ENGINEERING LTD.
   //              --  ALL RIGHTS RESERVED  --
   //
   //
   // File Name:	ISR.c
   // Author:		Willie Hu
   // Created:		23 Mar 06
   // Modified:
   // Revision:		1.0
   // Description:  Interrupt operation layer
   //*********************************************************************/

#include "common.h"
#include "rbccmd.h"
#include "HAL.H"
#include "SL811.H"
#include "HPI.H"

extern FLAGS bFlags;
extern unsigned char UARTBUF[UARTBUF_LENGTH];
extern Command_Def Command;
extern C026_Def code026;			
extern WAVdata_Def WAVdata;
extern unsigned char *WAVSEND;
extern unsigned long WAVreadcount;
extern unsigned short BCDcodeTemp;
extern unsigned long setpointer;
/*
void IRQ_UART0(void) __irq 		 //for 232test
{
	unsigned char *pBuf = (unsigned char *)&code026.arrow;  //Low Bit at Head
	unsigned long cnt,timecount;

	if(!(0x04 == (U0IIR&0X0F)))return;
	timecount = 0;
	for(cnt=0;cnt<4;cnt++)
	{
	 while (!(U1LSR & 0x01)&&++timecount<100005);
	 if(timecount>100000)	
		{
		 bFlags.bits.bUartInDone=1;
		 VICVectAddr = 0;
		 return;
		}	
	  *(pBuf+cnt)=U0RBR;
	  timecount=0;
	}
	bFlags.bits.bUartInDone=1;
	VICVectAddr = 0;			    //中断处理结束,清中断信息
}

void IRQ_UART0(void) __irq 
{
//	unsigned char rcv_buf;
//	if(0x04 == (U0IIR&0X0F))
//		{	
//			rcv_buf = U0RBR;			 //从接收寄存器接收数据
  //  		ComSendByte(rcv_buf);
	//		if(rcv_buf == 1)
	//			tempt = 1;
	//	}
	VICVectAddr = 0x00;			 //中断处理结束
}
*/
void FIQ_Handler(void) __irq		  //P0_15,EINT2,for I2S
{
	union{
 		 signed char c[2];
  		 signed short add;	
		 }temp;
	union{
		 signed char c[4];
		 signed long add;	
		 }temp1;

	temp.c[0] =  WAVdata.databuf[WAVreadcount];
	temp.c[1] =  WAVdata.databuf[WAVreadcount+1];
	temp.add  += 0x8000;
	temp1.c[2] = temp.c[0];
	temp1.c[3] = temp.c[1];
	IO1PIN = temp1.add;

	WAVreadcount = WAVreadcount+2;		//计数已经读到BUF的位置
	if(WAVreadcount > WAVdata.sendready)	 //提示前台程序继续重新填充WAVBUF
						WAVdata.sendover = 1;
	if(WAVreadcount >= WAVdata.sendlen) //BUF读完后重新计数并且置回指针,从BUF头重新读起
	{
	 WAVreadcount = 0;
//	 WAVSEND = WAVdata.databuf;
	}
	EXTINT = (1<<EINT2);		 //清除中断标志
}


void IRQ_EINT0(void) __irq		 //P0_14,for 487
{

}

void IRQ_EINT1(void) __irq		 //P0_3,for SL811
{	
	SL811Write(IntStatus,INT_CLEAR);
	EXTINT = (1<<EINT1);		 //清除中断标志
	VICVectAddr = 0;			 //清除中断地址
}

void IRQ_EINT3(void) __irq		 //P0_20,for CON
{
	unsigned short BCDcode;
	unsigned char i;
//	disable_INT();				 //关闭FIQ和IRQ中断	
	IO0SET = 1<<MUTE;	
	IO0CLR = (1<<CON_CS);//OE=0,CON_CS=0
	IO1DIR = 0;					 //P1口设置为输入
	BCDcode = (unsigned short)(IO1PIN>>16);	   //接受BCD码
	IO1DIR = 0xffff0000;		 //P1口设置为输出
	IO0SET = (1<<CON_CS);//OE=1,CON_CS=1
	IO0CLR = 1<<MUTE;



	if(!((BCDcode == 0xffff)|(BCDcode == BCDcodeTemp)))		//若BCDcode为0xffff或者和前一个码相同,则退出中断
	{
	 BCDcodeTemp = BCDcode;				 		//缓存信号,用来判断是否是同一信号反复接入
	 BCDcode = 0xffff - BCDcode;				//由于信号是低有效,所以进行转换
	 for(i=0;i<8;i++)
	 {
	  Command.Parameter[i] = 0x20;//把文件名设为空格
	 }
	 Command.Parameter[8] = 0x57;//w
	 Command.Parameter[9] = 0x41;//a
	 Command.Parameter[10] = 0x56;//v

	 switch(BCDcode)							 //由信号来设置文件名
	 {
	  case 0x0001:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x31;
		break;
	  case 0x0002:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x32;
		break;
	  case 0x0004:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x33;
		break;
	  case 0x0008:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x34;
		break;
	  case 0x0010:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x35;
		break;
	  case 0x0020:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x36;
		break;
	  case 0x0040:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x37;
		break;
	  case 0x0080:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x38;
		break;
	  case 0x0100:
	  	Command.Parameter[0] = 0x30;
		Command.Parameter[1] = 0x39;
		break;
	  case 0x0200:
	  	Command.Parameter[0] = 0x31;
		Command.Parameter[1] = 0x30;
		break;
	  case 0x0400:
	  	Command.Parameter[0] = 0x31;
		Command.Parameter[1] = 0x31;
		break;
	  case 0x0800:
	  	Command.Parameter[0] = 0x31;
		Command.Parameter[1] = 0x32;
		break;
	  case 0x1000:
	  	Command.Parameter[0] = 0x31;
		Command.Parameter[1] = 0x33;
		break;
	  case 0x2000:
	  	Command.Parameter[0] = 0x31;
		Command.Parameter[1] = 0x34;
		break;
	  case 0x4000:
	  	Command.Parameter[0] = 0x31;
		Command.Parameter[1] = 0x35;
		break;
	  case 0x8000:
	  	Command.Parameter[0] = 0x31;
		Command.Parameter[1] = 0x36;
		break;
	  default:
	  	break;
	 }
	 if(Findfile())				  //判断U盘中是否有此音档
	 {
	  bFlags.bits.bUartInDone = 1;
	  setpointer = 0;			  //设置指针,使音档从头播放
	 }
	 else
	  bFlags.bits.bUartInDone = 0;
	} 
	EXTINT = (1<<EINT3);
	VICVectAddr = 0x00;
//	enable_INT();
}

⌨️ 快捷键说明

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