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

📄 intprg.c

📁 瑞萨(Renesas)M16C系列芯片上实现接受摇控板控制的程序
💻 C
字号:
/***********************************************************************/
/*                                                                     */
/*  FILE        :intprg.c                                              */
/*  DATE        :Sun, Jul 27, 2008                                     */
/*  DESCRIPTION :define the top address of the interrupt vectors.      */
/*  CPU GROUP   :62P                                                   */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.4.8).     */
/*                                                                     */
/***********************************************************************/

/***************************************************************************
 *  COMPILER for M16C/60
 *  Copyright(c) 2004 Renesas Technology Corp.
 *  And Renesas Solutions Corp.,All Rights Reserved.  
 *  intprg.c : define variable vector table for M16C/62P
 *
 *
 * $Date: 2006/09/13 05:32:07 $
 * $Revision: 1.7 $
 **************************************************************************/
#include "sfr62p.h"
#include "cstartdef.h"

unsigned int count;

/////////////////
volatile unsigned char IR_data=0; 				//char  data 
volatile unsigned char IR_OK=0;					//interrupt sever success flag:0==>failed  1===>success
volatile unsigned char IR_DATA[4]={0x00,0x00,0x00,0x00};	//IR frame 4 char data

volatile unsigned char width=0;					//32_bits frame counter
static unsigned int width_pre=0;				//pre_frame width counter


void delay_100us_asm(void)		
{
	#pragma ASM
	wait_100us:
	MOV.B:S  #240,R0L
	WAIT_L100:
	NOP
	NOP
	NOP
	ADJNZ.B #-1,R0L, WAIT_L100
	RTS
	#pragma ENDASM
}

void PIN_2_0_light(void)						//Test segment:LED control
{	
	pd2=0xff;
	p2 =0xff;
	p2_0=0;
}
void PIN_2_1_light(void)
{
	pd2=0xff;
	p2 =0xff;
	p2_1=0;

}
void PIN_2_2_light(void)
{
	pd2=0xff;
	p2 =0xff;
	p2_2=0;
	
}
void PIN_2_3_light(void)
{
	pd2=0xff;
	p2 =0xff;
	p2_3=0;
	
}
void PIN_2_4_light(void)
{
	pd2=0xff;
	p2 =0xff;
	p2_4=0;
	
}
void PIN_2_5_light(void)
{
	pd2=0xff;
	p2 =0xff;
	p2_5=0;
	
}
void PIN_2_6_light(void)
{
	pd2=0xff;
	p2 =0xff;
	p2_6=0;
	
}
void PIN_2_7_light(void)
{
	pd2=0xff;
	p2 =0xff;
	p2_7=0;
	 
}
/////////////////

// BRK				(software int 0)
#pragma interrupt	_brk(vect=0)
void _brk(void){}

// vector 1 reserved
// vector 2 reserved
// vector 3 reserved

// INT3				(software int 4)
#pragma interrupt	_int3(vect=4)
void _int3(void){}

// TIMER B5			(software int 5)
#pragma interrupt	_timer_b5(vect=5)
void _timer_b5(void){}

// TIMER B4,UART1 bus collision (software int 6)
#pragma interrupt	_timer_b4(vect=6)
void _timer_b4(void){}

// TIMER B3,UART0 bus collision (software int 7)
#pragma interrupt	_timer_b3(vect=7)
void _timer_b3(void){}

// SI/O4 or INT5		(software int 8)
#pragma interrupt	_int5(vect=8)
void _int5(void){}

// SI/O3 or INT4		(software int 9)
#pragma interrupt	_int4(vect=9)
void _int4(void){}

// UART2 Bus Collision		(software int 10)
#pragma interrupt	_uart2_bus_collision(vect=10)
void _uart2_bus_collision(void){}

// DMA0				(software int 11)
#pragma interrupt	_dma0(vect=11)
void _dma0(void){}

// DMA1				(software int 12)
#pragma interrupt	_dma1(vect=12)
void _dma1(void){}

// input key			(software int 13)
#pragma interrupt	_input_key(vect=13)
void _input_key(void){}

// A-D				(software int 14)
#pragma interrupt	_ad_converter(vect=14)
void _ad_converter(void){}

// uart2 trance/NACK2		(software int 15)
#pragma interrupt	_uart2_trance(vect=15)
void _uart2_trance(void){}

// uart2 receive/ACK2		(software int 16)
#pragma interrupt	_uart2_receive(vect=16)
void _uart2_receive(void){}

#if defined (__STANDARD_IO__) && (defined(__FOUSB__) ||  defined(__E8__))
// uart0 can't be used
#else
// uart0 trance,NACK0		(software int 17)
#pragma interrupt	_uart0_trance(vect=17)
void _uart0_trance(void){}
#endif

// uart0 receive,ACK0		(software int 18)
#pragma interrupt	_uart0_receive(vect=18)
void _uart0_receive(void){}

#if defined(__STANDARD_IO__) || defined(__FOUSB__) || defined(__E8__)
// uart1 can't be used
#else
// uart1 trance,NACK1		(software int 19)
#pragma interrupt	_uart1_trance(vect=19)
void _uart1_trance(void){}
#endif

// uart1 receive,ACK1		(software int 20)
#pragma interrupt	_uart1_receive(vect=20)
void _uart1_receive(void){}

// TIMER A0			(software int 21)
#pragma interrupt	_timer_a0(vect=21)
void _timer_a0(void){
	count++;
	if(count>50){
		p2^=0xff;
		count=0;
	}
}

// TIMER A1			(software int 22)
#pragma interrupt	_timer_a1(vect=22)
void _timer_a1(void){}

// TIMER A2			(software int 23)
#pragma interrupt	_timer_a2(vect=23)
void _timer_a2(void){}

// TIMER A3			(software int 24)
#pragma interrupt	_timer_a3(vect=24)
void _timer_a3(void){}

// TIMER A4			(software int 25)
#pragma interrupt	_timer_a4(vect=25)
void _timer_a4(void){}

// timer b0			(software int 26)
#pragma interrupt	_timer_b0(vect=26)
void _timer_b0(void){}

// timer b1			(software int 27)
#pragma interrupt	_timer_b1(vect=27)
void _timer_b1(void){}

// timer b2			(software int 28)
#pragma interrupt	_timer_b2(vect=28)
void _timer_b2(void){}

// int0				(software int 29)
#pragma interrupt	_int0(vect=29)
void _int0(void){//p2^=0xff;
	asm("fclr i");		/*disable the whole inetrupt*/	
	
	if(p8_2==0)			/*Test the Port 8.4 */
		{
//***************************************************************************************** Test the pre_code		
				width_pre=0;
				while(p8_2==0)			/*Test the Port 8.4 */
				{
					delay_100us_asm();	/*time count */
					width_pre++;
				}
				if(width_pre<80||width_pre>95)	/*<8.0ms or >9.5ms is failed */
				{
					ir_int0ic=0;	/*enable interrupt int2*/
					asm("fset i");	/*enable the whole inetrupt */
					return;
				}
				width_pre=0;
				while(p8_2==1)			/*Test the Port 8.4 */
				{
					delay_100us_asm();	/*time count */
					width_pre++;
				}
				if(width_pre<40||width_pre>50)	/*<4.0ms or >5.0ms is failed */
				{
					ir_int0ic=0;	/*enable interrupt int2*/
					asm("fset i");	/*enable the whole inetrupt */
					return;
				}
//***************************************************************************************** TEST 32 bits		
				width_pre=0;
				while(width_pre<32)
				{
					width_pre++;
					pd8_2=0;				 
					while(p8_2==0);		/*Test the Port 8.4 */
					width=0;			
					while(p8_2==1)		/*Test the Port 8.4 */
					{
						delay_100us_asm(); /*time count */
						++width;	
					}
					
					IR_data<<=1;
					  if (width > 8) 		/*set time 8.4ms*/
					IR_data|=0x01;			/*set as 1*/	
					
					if (width_pre==8)   
						IR_DATA[0] = IR_data;	/*system code*/
					if (width_pre==16)
						IR_DATA[1] = IR_data;	/*system code*/
					if (width_pre==24)
						IR_DATA[2] = IR_data;	/*user code*/
					if (width_pre==32)
						IR_DATA[3] = IR_data;	/*user code*/
				}

				if(IR_DATA[2]!=~IR_DATA[3])	
				{	
					ir_int0ic=0;	/*enable interrupt int*/
					asm("fset i");	/*enable the whole inetrupt*/ 
					return;
				}
				IR_OK=1;			/*decode success*/
				
				if(IR_OK ==1)		 
			{
			   
				IR_OK=0;			
				
				switch(IR_DATA[2])	/* change the Key variable */
				{
					case 0xE8 :{PIN_2_0_light(); break;	}//power off/on
				 	case 0x48 :{PIN_2_1_light(); break;	}//vol ++
				 	case 0xA8 :{PIN_2_2_light(); break; }//vol --
				 	case 0x98 :{PIN_2_3_light(); break; }//channel ++
					case 0x18 :{PIN_2_4_light(); break; }//channel --
				 	default :  {PIN_2_5_light(); break;	}//default
				}
			}
				
				
		}
	
	ir_int0ic=0;	/*enable interrupt int2*/
	asm("fset i");	/*enable the whole inetrupt */
}

// int1				(software int 30)
#pragma interrupt	_int1(vect=30)
void _int1(void){p2^=0xff;}

// int2				(software int 31)
#pragma interrupt	_int2(vect=31)
void _int2(void){p2^=0xff;}


// software int 32 for user or MR30
// software int 33 for user or MR30
// software int 34 for user or MR30
// software int 35 for user or MR30
// software int 36 for user or MR30
// software int 37 for user or MR30
// software int 38 for user or MR30
// software int 39 for user or MR30
// software int 40 for user or MR30
// software int 41 for user or MR30
// software int 42 for user or MR30
// software int 43 for user or MR30
// software int 44 for user or MR30
// software int 45 for user or MR30
// software int 46 for user or MR30
// software int 47 for user or MR30
// software int 48 for user
// software int 49 for user
// software int 50 for user
// software int 51 for user
// software int 52 for user
// software int 53 for user
// software int 54 for user
// software int 55 for user
// software int 56 for user
// software int 57 for user
// software int 58 for user
// software int 59 for user
// software int 60 for user
// software int 61 for user
// software int 62 for user
// software int 63 for user

⌨️ 快捷键说明

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