📄 irq.c
字号:
//*******************************************************************//
//Interrupt Service Routine For C language
//*******************************************************************//
#include "SPCE061V004.H"
#define StartAddr 0xA000
extern unsigned int Addr,PlayFlag,StopFlag,StopAddr;
int uiDataLow,uiDataHigh,count=0,check=0,StartFlag;
__asm(".external F_FIQ_Service_SACM_S480");
void BREAK(void) __attribute__ ((ISR));
void BREAK(void)
{
}
void FIQ(void) __attribute__ ((ISR));
void FIQ(void)
{
if(*P_INT_Ctrl&0x2000) //定时器A中断
{
*P_INT_Clear=C_FIQ_TMA; //清除中断标志位
__asm("call F_FIQ_Service_SACM_S480"); //调用S480中断服务函数
}
else if(*P_INT_Ctrl&0x0800) //定时器B中断
*P_INT_Clear=C_FIQ_TMB; //清除中断标志位
else //PWM中断
*P_INT_Clear=C_FIQ_PWM; //清除中断标志位
}
void IRQ0(void) __attribute__ ((ISR));
void IRQ0(void)
{
}
void IRQ1(void) __attribute__ ((ISR));
void IRQ1(void)
{
}
void IRQ2(void) __attribute__ ((ISR));
void IRQ2(void)
{
}
void IRQ3(void) __attribute__ ((ISR));
void IRQ3(void)
{
}
void IRQ4(void) __attribute__ ((ISR));
void IRQ4(void)
{
}
void IRQ5(void) __attribute__ ((ISR));
void IRQ5(void)
{
}
void IRQ6(void) __attribute__ ((ISR));
void IRQ6(void)
{
}
void IRQ7(void) __attribute__ ((ISR));
void IRQ7(void)//UART的中断不需要清除,而是由硬件自动清零
{
check++; //标记中断进入次数
/*当所接收到的数据达到一定值后,暂时定为190,设置播放标志,让S480放音*/
if(check==190)
{
PlayFlag=1;
}
/*UART每次传送的是一个8位的数,而Flash中和S480队列都
需要一个16位的数,所以要将奇数次和偶数次收到的数据拼
接成一个16位的数据。按照凌阳的数据顺序需要将两次收到
的数据进行顺序交换,如:两次收到的数据分别为0xAA,
0x55,则在拼接后为0x55AA,以便写入Flash和S480放音需要*/
//现在假设所传送的数据以0xFFFFFFFF结尾
//以下程序为数据拼接和判断结束部分
if(count==0) // 当收到的数据为奇数次数据时
{
uiDataLow=*P_UART_Data; //将收到的数据保存
count++; //标记下一个收到的数据为偶数次数据
}
else //当收到的数据为偶数次数据时
{
uiDataHigh=*P_UART_Data; //将收到的数据保存
//将奇偶两次收到的数据按照前面所述规则拼接
uiDataLow=uiDataLow|(uiDataHigh<<8);
/*以下的if,else判断是否连续两次拼接后的数据为0xFFFF,表示数传送结束,
当StopFlag为2时,表示发送结束,关闭UART中断*/
if(uiDataLow==0xffff)
{
StopFlag++; //收到一次0xFFFF
if(StopFlag==2)
{
StopAddr=Addr; //结束地址指向当前地址
*P_UART_Command1=0x000C; //关闭UATR接收中断
}
}
else
{
//不是连续接收时,将接到的一次0xFFFF认为是数据,而非结束标志
StopFlag=0;
}
F_FlashWrite1Word(Addr,uiDataLow); //将拼接后的数据写入Flash
Addr++; //将写入地址位下移1位
count=0; //标记下一个收到的数据为奇数次数据
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -