📄 isr.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 + -