📄 initint.c
字号:
/*
*********************************************************************************************************
* File Name:InitInt.C
* Description: 初始化中断优先级等设置,请仔细控制此处的开中断.
* 中断处理程序采用IRQ关键字,但是Cn.oS的
* 却不是阿,你们可以在核心代码中看到
* Author: kaka (sn.kaka@yahoo.com).
*********************************************************************************************************
*/
#include "44b0x.h"
#include "LCD_Dis.h"
#include "uart.h"
#include "gps_head.h"
#include "shell.h"
extern int kaka;
extern char shell_y;
extern int Cn_start;
extern Cn_oS_Delay_Manager(void);
void InitInt (void)
{
#define V 0 // 0 = Vectored interrupt mode 1 = Non-vectored interrupt mode
#define I 0 // 0 = IRQ interrupt enable
#define F 1 // 0 = FIQ interrupt enable (Not allowed vectored interrupt mode) 1 = Reserved
INTCON = ((V<<2)+(I<<1)+F);
// EINT0 EINT1 EINT2 EINT3 EINT4567 TICK ZDMA0 ZDMA1 BDMA0 BDMA1 WDT UERR0/1 TIMER0 TIMER1 TIMER2 TIMER3 TIMER4 TIMER5 URXD0 URXD1 IIC SIO UTXD0 UTXD1 RTC ADC.
// 0 = IRQ mode 1 = FIQ mode
//INTMOD = ((0<<25)+(0<<24)+(0<<23)+(0<<22)+(0<<21)+(0<<20)+(0<<19)+(0<<18)+(0<<17)+(0<<16)+(0<<15)+(0<<14)+(0<<13)+(0<<12)+(0<<11)+(0<<10)+(0<<9)+(0<<8)+(0<<7)+(0<<6)+(0<<5)+(0<<4)+(0<<3)+(0<<2)+(0<<1)+0);
// 0 = Service available 1 = Masked
//test for open the uart receiv interrupt 20080520 //INTMSK = ((0<<26)+(0<<25)+(0<<24)+(0<<23)+(0<<22)+(0<<21)+(0<<20)+(1<<19)+(1<<18)+(1<<17)+(1<<16)+(1<<15)+(1<<14)+(1<<13)+(1<<12)+(1<<11)+(1<<10)+(1<<9)+(1<<8)+(1<<7)+(1<<6)+(1<<5)+(1<<4)+(1<<3)+(1<<2)+(1<<1)+1);
INTMSK = ((0<<26/*ALL*/)+(1<<25/*EINT0*/)+(1<<24/*EINT1*/)
+(1<<23/*EINT2*/)+(1<<22/*EINT3*/)+(1<<21/*EINT4567*/)
+(1<<20/*TICK1*/)+(1<<19/*ZDMA0*/)+(1<<18/*ZDMA1*/)
+(1<<17/*BDMA0*/)+(1<<16/*BDMA1*/)+(1<<15/*WDT*/)
+(1<<14/*UERR0/1*/)+(1<<13/*TIMER0*/)+(1<<12/*TIMER1*/)
+(1<<11/*TIMER2*/)+(1<<10/*TIMER3*/)+(1<<9/*TIMER4*/)
+(0<<8/*TIMER5*/)+(0<<7/*URXD0*/)+(1<<6/*UTXD1*/)
+(1<<5/*INT_IIC*/)+(1<<4/*INT_SIO*/)+(1<<3/*UTXD0*/)
+(1<<2/*UTXD1*/)+(1<<1/*RTC*/)+1)/*ADC*/;
// IRQ priority of slave register
I_PSLV = 0x1b1b1b1b;
// IRQ priority of master register
I_PMST = 0x00001f1b;
// IRQ interrupt service pending clear register
I_ISPC =0x0; // I_ISPR; // Clear all pending.
// FIQ interrupt service pending clear register
F_ISPC = 0x0;//F_ISPR; // Clear all pending.
EXTINTPND = 0x0f; // External(4,5,6,and 7) interrupt pending Register. cleared by writing 1.
}
/*
********************************************************************************************************
* End.
********************************************************************************************************
*/
void __irq HandlerEINT0(void)
{
//Clear_lcd;
//PutString(5,5,"预取指中止 EINT0!congratulant ,kaka !! good job good job!");
EXTINTPND=0xf;
I_ISPC=0x3FFFFFF;
//while(1);
}
void __irq HandlerEINT1(void)
{
//Clear_lcd;
//while(1);
EXTINTPND=0xf;
I_ISPC=0x3FFFFFF;
}
void __irq HandlerEINT2(void)
{
//while(1);
EXTINTPND=0xff;
I_ISPC=0xffffffff;
}
void __irq HandlerEINT3(void)
{
//while(1);
EXTINTPND=0xf;
I_ISPC=0x3FFFFFF;
}
void __irq HandlerEINT4567(void)
{
//while(1);
EXTINTPND=0xf;
I_ISPC=0x3FFFFFF;
}
void __irq HandlerIRQ(void)
{
//while(1);
EXTINTPND=0xf;
I_ISPC=0x3FFFFFF;
}
void __irq HandlerFIQ(void)
{
//while(1);
EXTINTPND=0xf;
I_ISPC=0x3FFFFFF;
}
void __irq ISR_Timer5 (void)
{
kaka++;
Cn_oS_Delay_Manager();
//PDATE ^= (1<<5);
I_ISPC |= (1 << 8); /* clear the pending bit. */
}
void TEST(void)
{
I_ISPC |= (1 << 8);
}
void __irq HandlerURXD0(void)
{
Cn_start=1;
gps_char=uart_getc();
if((gps_flag_temp==0)&(gps_flag_for_gps_gga_factory!=0)) /*如果为0,说明主程序已经将上一祯信息读走*/
{
gps_flag=0;
if(gps_char=='$')
{
gps_clear_array(); /*clean the gps depot*/
gps_flag2=1;
gps_count=0;
}
if(gps_flag2==1)
{
gps_a[gps_count]=gps_char;
gps_count++;
if(gps_char=='*')
{
gps_flag2=0;
gps_count=0;
gps_flag_temp=1; /*完成一祯信息后将其置为1,此时中断程序不在将信息写入*/
}
}
}
I_ISPC=0x3FFFFFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -