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

📄 initint.c

📁 一个小的嵌入式os
💻 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 + -