Ejemplo n.º 1
0
/*----------------------------------------------------------------------*/
void initEMIOS_0Image(void) 
{ 
	/* eMIOS0初始化80MHz分为10MHz */
		EMIOS_0.MCR.B.GPRE= 7;	/* GPRE+1=分频系数;/* Divide 80 MHz sysclk by 7+1 = 8 for 10MHz eMIOS clk */
		EMIOS_0.MCR.B.GPREN = 1;	/* Enable eMIOS clock */
		EMIOS_0.MCR.B.GTBE = 1;   /* Enable global time base */
		EMIOS_0.MCR.B.FRZ = 1;    /* Enable stopping channels when in debug mode */
	//PA3场中断捕捉上升沿及下降沿
	EMIOS_0.CH[3].CCR.B.MODE = 0x02; // Mode is SAIC, continuous 
	EMIOS_0.CH[3].CCR.B.BSL = 0x01; /* Use counter bus B (default) */
	EMIOS_0.CH[3].CCR.B.EDSEL = 1;  //Both edges
//	EMIOS_0.CH[3].CCR.B.EDPOL=1; //Edge Select falling edge
	EMIOS_0.CH[3].CCR.B.FEN=1;  //interupt enbale
	SIU.PCR[3].R = 0x0102;  // Initialize pad for eMIOS channel Initialize pad for input 
	INTC_InstallINTCInterruptHandler(FieldInputCapture,142,1);  
	
	//PA7行中断捕捉上升沿
	EMIOS_0.CH[7].CCR.B.MODE = 0x02; // Mode is SAIC, continuous 
	EMIOS_0.CH[7].CCR.B.BSL = 0x01; /* Use counter bus B (default) */
	EMIOS_0.CH[7].CCR.B.EDSEL = 0;
	EMIOS_0.CH[7].CCR.B.EDPOL=1; //Edge Select rising edge
	EMIOS_0.CH[7].CCR.B.FEN=1;  //interupt enbale
	SIU.PCR[7].R = 0x0102;  // Initialize pad for eMIOS channel Initialize pad for input 
	INTC_InstallINTCInterruptHandler(RowInputCapture,144,3); 
	
	//C10口二值化入口
	SIU.PCR[42].R = 0x0102;  // C9口二值化入口
}
Ejemplo n.º 2
0
void	IntcInterruptLINFLEXHandlers(void)
 {
  
  /* Configure INTC */
  INTC.MCR.R=0;
  /*ISRs*/
  INTC_InstallINTCInterruptHandler(&LINFlex_0_RX_ISR, LINFLEX0_RX_Vector, 1);
  INTC_InstallINTCInterruptHandler(&LINFlex_0_TX_ISR, LINFLEX0_TX_Vector, 2);
  INTC_InstallINTCInterruptHandler(&Intc_LINFLEX_Err, LINFLEX0_ERR_Vector, 3);
  /* Masking Priority to Zero*/
  INTC.CPR.R = 7;
 }
Ejemplo n.º 3
0
 void	IntcInterruptLINFLEXHandlers(void)
 {
  
  /* Configure options of the INTC */
  INTC.MCR.R=0;
  /* Defines interruption function  */
  INTC_InstallINTCInterruptHandler(&Intc_LINFLEX_Rx, LINFLEX0_RX_Vector, 1);
  INTC_InstallINTCInterruptHandler(&Intc_LINFLEX_Tx, LINFLEX0_TX_Vector, 2);
  INTC_InstallINTCInterruptHandler(&Intc_LINFLEX_Err, LINFLEX0_ERR_Vector, 3);
  /* Masking Priority to Zero*/
  INTC.CPR.R = 0;
 }
Ejemplo n.º 4
0
void initPIT(void) {
                            /* NOTE:  DIVIDER FROM SYSCLK TO PIT ASSUMES DEFAULT DIVIDE BY 1 */
  PIT.PITMCR.R = 0x00000001;       /* Enable PIT and configure timers to stop in debug mode */
  PIT.CH[1].LDVAL.R = 0x7800;       /* PIT1 timeout = 64000 sysclks x 1sec/64M sysclks = 1 msec */
  PIT.CH[1].TCTRL.R = 0x000000003; /* Enable PIT1 interrupt and make PIT active to count */ 
 
  INTC_InstallINTCInterruptHandler((void *)&Pit1ISR,60,0x03);
  
                              /* NOTE:  DIVIDER FROM SYSCLK TO PIT ASSUMES DEFAULT DIVIDE BY 1 */
  PIT.CH[2].LDVAL.R = 300;       /* PIT1 timeout = 64000 sysclks x 1sec/64M sysclks = 1 msec */
  PIT.CH[2].TCTRL.R = 0x000000002; /* Enable PIT1 interrupt and leave PIT inactive to count */ 
 
  INTC_InstallINTCInterruptHandler((void *)&Pit2ISR,61,0x01);
}
Ejemplo n.º 5
0
static void init_INTC_ON(void)
{
	SIU .DIRER.B.EIRE9 = 1;
	SIU .IFEER.B.IFEE9 = 1;
	SIU.PCR[13].R = 0x0900;
	INTC_InstallINTCInterruptHandler(INTC_wakeup, 50, 1);
}
Ejemplo n.º 6
0
/**************************************************************
 *  Name                 :	LIN_init_Intrruptions
 *  Description          :	Initializes interrution that will call when a transmition or 
 *							receptions are detected.
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :
 *  Critical/explanation :    [yes / No]
 **************************************************************/
void LIN_init_Intrruptions( void )
{
	//INTC_InstallINTCInterruptHandler(&UART_TXCompleted, LINFLEX2_TX_Vector, PRIORITY10);
	
	
	INTC_InstallINTCInterruptHandler(&LIN_state_Machine, LINFLEX2_RX_Vector, PRIORITY10);
}
Ejemplo n.º 7
0
/*-----------------------------------------------------------------------*/
void init_pit(void)
{
	/* NOTE:  DIVIDER FROM SYSCLK TO PIT ASSUMES DEFAULT DIVIDE BY 1 */
	PIT.PITMCR.R = 0x00000001;	/* Enable PIT and configure timers to stop in debug modem */
	PIT.CH[1].LDVAL.R = 800000;	/* 800000==10ms */
	PIT.CH[1].TCTRL.R = 0x00000003;	/* Enable PIT1 interrupt and make PIT active to count */
	INTC_InstallINTCInterruptHandler(PitISR,60,1);	/* PIT 1 interrupt vector with priority 1 */
}
Ejemplo n.º 8
0
/**
* \brief    PIT Channel Low level configuration
* \author   Abraham Tezmol
* \param    uint8_t channel - Channel to be configured
* \param    tCallbackFunction Callback - Function to invoke upon PIT count to zero event
* \return   void
*/
void PIT_channel_configure(uint8_t channel, tCallbackFunction Callback) 
{
    PIT.CH[channel].LDVAL.R = PIT_CHANNEL_VALUE;      /* PIT1 timeout --> Refer to PIT.h file for calculations */
    PIT_Callback[channel]   = Callback;               /* Initialize callback function */
    
    /* Install Interrupt routine for this specific channel */
    INTC_InstallINTCInterruptHandler(PIT_channel_0_isr,59,5);
}
void TickTimer_SetFreqHz(int Freq)
{
	PIT.PITMCR.B.MDIS_RTI=0;/*turn on PIT just for RTI*/
	PIT.RTI.LDVAL.R=OSC_FREQUENCY*1000000/Freq-1;
	PIT.RTI.TCTRL.B.TIE=1;	/*enable interrupt*/
	PIT.RTI.TCTRL.B.TEN=1;/*turn on RTI*/
	INTC_InstallINTCInterruptHandler(knl_timer_handler,305,1);       
	INTC.CPR.B.PRI = 0;/* Lower INTC's current priority */
}
Ejemplo n.º 10
0
int main(void) {
	int i;
	
	InitModesClocks();
	
	INTC_InitINTCInterrupts();
	
	INTC_InstallINTCInterruptHandler(interrutsion,59,1);
	
	INTC.CPR.R=0;
	
	GPIOport(68);
	GPIOport(69);
	GPIOport(70);
	GPIOport(71);
	
	GPIO_out(68);
	GPIO_out(69);
	GPIO_out(70);
	GPIO_out(71);
	
	
	for( i = 0 ; i < E_TotalTsk ; i++ )
	{
		ar_dynamic[i] = ar_tsk[i].offset;
	}
	
	PITconfig();
	PITchannelinterrupt(0,1);
	PITchanneltimeout(0,64000);
	PITcounterReset(0);
	PITintflagReset(0);
	PITstart(0);
	
	
	
	while(1)
	{
		if(flagISR)
		{
			flagISR = 0;
			
			for( i = 0 ; i < E_TotalTsk ; i++ )
			{
				if( ar_dynamic[i] > 0 )
				{
					ar_dynamic[i]--;
				}
				else 
				{
					ar_dynamic[i] = ar_tsk[i].period;
					ar_tsk[i].tskPtr();
				}
			}
		}
	}
}
Ejemplo n.º 11
0
void initPIT_RTI(void)
{
//  PIT.MCR.R = 0X00000001;             //RTI时钟使能,PIT定时器时钟使能,调试模式停止定时
	PIT .PITMCR.R = 0X00000001; 		   //RTI时钟使能,PIT定时器时钟使能,调试模式停止定时
	PIT .RTI.LDVAL.R = 8000;             //实时中断周期为1ms
	PIT .RTI.TCTRL.R = 0X00000003;       //实时中断使能,定时器使能
	INTC .PSR[305].R = 1;                //实时中断优先级
	INTC_InstallINTCInterruptHandler(RTI_ISR, 305, 1);  //设置中断号

}
Ejemplo n.º 12
0
 void start_PWM_MONITOR(void)
{
    Sys_flag++;
	init_INTC_CP_C();
	INTC_InstallINTCInterruptHandler(INTC_CP_C, 50, 1);
	if(!CP_flag)    // 3周期没有信号
	{
		if(Sys_flag>=3)
			CP_state = ACCP_NOLINK;
	}
}
Ejemplo n.º 13
0
int main(void) {
	INIT();  //initialises the system modes (reloj interno, modos de ejecucion)
	init_leds ();
	STM_config_clock();
	
	
	INTC.CPR.B.PRI = 0;
	INTC_InstallINTCInterruptHandler(function_time,30,1);
	
	scheduler();
}
Ejemplo n.º 14
0
/*functions*/
void init_PIT_RTI(void)
{
	UINT8 i = 0;
	PIT .PITMCR.R = 0X00000001;             //RTI时钟使能,PIT定时器时钟使能,调试模式停止定时
	for (i = 0; i < 4; i++)
	{
		PIT .TIMER[i].LDVAL.R = 64000;       //周期中断定时器通道1中断周期为1ms,
		PIT .TIMER[i].TCTRL.R = 0X00000003;  //周期中断定时器通道1中断使能,定时器使能
		//INTC.PSR[301+i].R = 1;                //周期中断定时器通道1优先级
		INTC_InstallINTCInterruptHandler(isr_pits[i], 301 + i, 2);  //设置中断号
//		INTC_InstallINTCInterruptHandler(RTI_ISR, 302, 1);  //设置中断号
	}
}
Ejemplo n.º 15
0
/*----------------------------------------------------------------------*/
void initEMIOS_0Image(void) 
{ 
	//PA3场中断捕捉上升沿及下降沿
	EMIOS_0.CH[3].CCR.B.MODE = 0x02; // Mode is SAIC, continuous 
	EMIOS_0.CH[3].CCR.B.BSL = 0x01; /* Use counter bus B (default) */
	EMIOS_0.CH[3].CCR.B.EDSEL = 1;  //Both edges
//	EMIOS_0.CH[3].CCR.B.EDPOL=1; //Edge Select falling edge
//	EMIOS_0.CH[3].CCR.B.FEN=1;  //interupt enbale
	SIU.PCR[3].R = 0x0102;  // Initialize pad for eMIOS channel Initialize pad for input 
	INTC_InstallINTCInterruptHandler(FieldInputCapture,142,2);  
	
	//PA7行中断捕捉上升沿
	EMIOS_0.CH[7].CCR.B.MODE = 0x02; // Mode is SAIC, continuous 
	EMIOS_0.CH[7].CCR.B.BSL = 0x01; /* Use counter bus B (default) */
	EMIOS_0.CH[7].CCR.B.EDSEL = 0;
	EMIOS_0.CH[7].CCR.B.EDPOL=1; //Edge Select rising edge
//	EMIOS_0.CH[7].CCR.B.FEN=1;  //interupt enbale
	SIU.PCR[7].R = 0x0102;  // Initialize pad for eMIOS channel Initialize pad for input 
	INTC_InstallINTCInterruptHandler(RowInputCapture,144,3); 
	
	//C10口二值化入口
	SIU.PCR[42].R = 0x0102;  // C9口二值化入口
}
Ejemplo n.º 16
0
void main(void) {
  volatile uint32_t IdleCtr = 0; 
  
  initModesAndClks();      /* Initialize mode entries */
  initPeriClkGen();        /* Initialize peripheral clock generation for LINFlex */
  disableWatchdog();       /* Disable watchdog */
  
  INTC_InitINTCInterrupts();
  EXCEP_InitExceptionHandlers();
  
  INTC.MCR.R=0;
  INTC_InstallINTCInterruptHandler(&Intc_LINFLEX_Rx, 79, 10);
  INTC_InstallINTCInterruptHandler(&Intc_LINFLEX_Tx, 80, 10);
  INTC_InstallINTCInterruptHandler(&Intc_LINFLEX_Err, 81, 10);
  
  
  INTC.CPR.R = 0;
  
  initLINFlex_0(9600);         /* Initialize FLEXCAN 0 as master */
  NormalModeLINFLEX_2();
  
  //transmitLINframe();     /* Transmit one frame from master */
  while (1) {IdleCtr++;}   /* Idle loop: increment counter */
}
Ejemplo n.º 17
0
/*-----------------------------------------------------------------------*/
void init_serial_port_2(void)
{
	LINFLEX_2.LINCR1.B.INIT=1;
	LINFLEX_2.LINCR1.R=0x00000011; 
	LINFLEX_2.LINIER.B.DRIE=1;
#ifndef PERIPH_SET_1_CLK_16M
	LINFLEX_2.LINIBRR.B.DIV_M= 520;
    LINFLEX_2.LINFBRR.B.DIV_F = 83;
#else
	LINFLEX_2.LINIBRR.B.DIV_M= 52;
    LINFLEX_2.LINFBRR.B.DIV_F = 1;
#endif
    LINFLEX_2.UARTCR.B.UART=1;
	LINFLEX_2.UARTCR.R=0x00000033;
	LINFLEX_2.LINCR1.B.INIT=0;
	
	SIU.PCR[40].R = 0x0400;	/* MPC56xxB: Configure port C8 as LIN0TX */
    SIU.PCR[41].R = 0x0103;	/* MPC56xxB: Configure port C9 as LIN0RX */
  	INTC_InstallINTCInterruptHandler(intc_serial_port_2_RX, 119, 5); 
}
Ejemplo n.º 18
0
/*-----------------------------------------------------------------------*/
void init_serial_port_3(void)
{
	LINFLEX_3.LINCR1.B.INIT=1;
	LINFLEX_3.LINCR1.R=0x00000011; 
	LINFLEX_3.LINIER.B.DRIE=1;
#ifndef PERIPH_SET_1_CLK_16M
	LINFLEX_3.LINIBRR.B.DIV_M= 520;
    LINFLEX_3.LINFBRR.B.DIV_F = 83;
#else
	LINFLEX_3.LINIBRR.B.DIV_M= 104;
    LINFLEX_3.LINFBRR.B.DIV_F = 3;
#endif
    LINFLEX_3.UARTCR.B.UART=1;
	LINFLEX_3.UARTCR.R=0x00000033;
	LINFLEX_3.LINCR1.B.INIT=0;
	
	SIU.PCR[74].R = 0x0400;	//LINFLEX_3 TX PE10
    SIU.PCR[75].R = 0x0103;	//LINFLEX_3 RX PE11 涉及到引脚复用
  	SIU.PSMI[31].R = 1;
  	INTC_InstallINTCInterruptHandler(intc_serial_port_3_RX, 122, 5); 
}
Ejemplo n.º 19
0
/*-----------------------------------------------------------------------*/
void init_serial_port_0(void)
{
	LINFLEX_0.LINCR1.B.INIT=1;  //进入初始化模式
	LINFLEX_0.LINCR1.R=0x00000015; 
	LINFLEX_0.LINIER.B.DRIE=1; //允许接收中断
	/*波特率算法baud=Fperiph_clk/(16*LFDIV)
	DIV_M=LFDIV整数部分
	DIV_F=LFDIV小数部分*16  */ 	
//#ifndef PERIPH_SET_1_CLK_16M	//80M
	LINFLEX_0.LINIBRR.B.DIV_M= 17;  //115200	//波特率设置38400:80M-130+3 57600:80M-86+13 115200:80M-43+6  9600:80M-520+13
    LINFLEX_0.LINFBRR.B.DIV_F = 6;		//38400:64M-104+3
//#else
//	LINFLEX_0.LINIBRR.B.DIV_M= 17;	//波特率设置 2400:416+11, 9600:104+3, 10417:96+0, 19200:52+1, 57600:17+6
//    LINFLEX_0.LINFBRR.B.DIV_F = 6;	//波特率设置 115200:8+11, 230400:4+5, 460800:2+3, 921600:1+1
//#endif
    LINFLEX_0.UARTCR.B.UART=1;
	LINFLEX_0.UARTCR.R=0x00000033;//8-bit data、UART mode
	LINFLEX_0.LINCR1.B.INIT=0; //退出初始化模式
	
	SIU.PCR[18].R = 0x0400;    /* MPC56xxB: Configure port B2 as LIN0TX */
    SIU.PCR[19].R = 0x0103;    /* MPC56xxB: Configure port B3 as LIN0RX */
  	INTC_InstallINTCInterruptHandler(intc_serial_port_0_RX,79,5); 
}
Ejemplo n.º 20
0
/*-----------------------------------------------------------------------*/
void init_serial_port_1(void) 
{
	LINFLEX_1.LINCR1.B.INIT=1;	//进入初始化模式
	LINFLEX_1.LINCR1.R=0x00000015;
//#ifndef PERIPH_SET_1_CLK_16M
//	LINFLEX_1.LINIBRR.B.DIV_M= 520; //57600:86&13  9600:520&13
//    LINFLEX_1.LINFBRR.B.DIV_F =13;
//#else
	LINFLEX_1.LINIBRR.B.DIV_M= 26; //38400
    LINFLEX_1.LINFBRR.B.DIV_F = 1;
//#endif

    LINFLEX_1.UARTCR.B.UART=1;
	LINFLEX_1.UARTCR.R=0x00000033;
	
	LINFLEX_1.LINIER.B.DRIE=1;
	
	LINFLEX_1.LINCR1.B.INIT=0;	//退出初始化模式
	
	SIU.PCR[38].R = 0x0400;	/* MPC56xxB: Configure port C6 as LIN1TX */
    SIU.PCR[39].R = 0x0103;	/* MPC56xxB: Configure port C7 as LIN1RX */
    
    INTC_InstallINTCInterruptHandler(intc_serial_port_1_RX, 99, 5);
}
Ejemplo n.º 21
0
void main (void) {      
        volatile uint32_t i = 0;                        /* Dummy idle counter */
        uint8_t success=0;
        uint8_t byteReceived=0;
        uint8_t opcode=0;
        uint8_t payload=0;
        char    msg[32];
        uint8_t msgLength=0;
        clock = 0;
          
        initModesAndClock();  /* MPC56xxP/B/S: Initialize mode entries, set sysclk = 64 MHz*/
        initPeriClkGen();       /* Initialize peripheral clock generation for DSPIs */
        disableWatchdog();    /* Disable watchdog */
        EXCEP_InitExceptionHandlers();          /* Initialize exceptions: only need to load IVPR */
        initADC();
        initPIT();                      /* Initialize PIT1 for 10Hz IRQ, priority 2 */
        initPads();                     /* Initialize software interrupt 4 */
        initEMIOS_0();        /* Initialize eMIOS channels as counter, SAIC, OPWM */
        initEMIOS_1();        /* Initialize eMIOS channels as counter, SAIC, OPWM */
                        
        initEMIOS_0ch0();       /* Initialize eMIOS 0 channel 0 as modulus counter*/
        initEMIOS_0ch23();      /* Initialize eMIOS 0 channel 23 as modulus counter*/
        initEMIOS_0ch8();       /* Initialize eMIOS 0 channel 8 as modulus counter*/
        
        
        //just to make sure the wheels are facing straight
        initDrive();
        Drive();
        
        SIU.PCR[64].R = 0x0100;                         /* Program the drive enable pin of S1 (PE0) as input*/
        while((SIU.PGPDI[2].R & 0x80000000) == 0x80000000); /*Wait until S1 switch is pressed*/
        for(i=0;i<100000;i++);
        while((SIU.PGPDI[2].R & 0x80000000) != 0x80000000); /*Wait until S1 switch is released*/
          
        INTC_InitVector();
        INTC_InstallINTCInterruptHandler(&SwIrq4ISR,4,3);
        INTC_InstallINTCInterruptHandler(&EOC_ISR,62,5);
        INTC_InstallINTCInterruptHandler(&Pit1ISR,60,2);
        INTC_InstallINTCInterruptHandler(&Pit2ISR,61,4);
        INTC_InstallINTCInterruptHandler(&Pit3ISR,127,4);
        
        initSerial();
          
        flag_lineDone = -1;
        initCamera();
        
        initSteeringController();
        
        INTC_InitINTCInterrupts();
        INTC.CPR.B.PRI = 0;          /* Single Core: Lower INTC's current priority */
          
        initDrive();
        
//      setPWMRw(48);
//      setPWMLw(48);
        setDirection(FORWARD);
                
        in = getInBuffer();
        out = getOutBuffer();
                
        MESSAGE("I'm running\n\r");
        fifo_write(&out->fifo,msg,msgLength);
        
        while(isCameraReady()!=STATE_READY);
 
        for(;;)
        {               
                if(!(flag_lineDone==1))
                {
                        Drive();
                        success=0;
                        success = fifo_read(&in->fifo,&byteReceived,1);
                        if(success==1)
                        {
                                if(opcode==0)
                                {
                                        opcode = byteReceived;
                                        MESSAGE("Command Received: ");
                                        fifo_write(&out->fifo,msg,msgLength);
                                }
                                else
                                {
                                        payload = byteReceived;
                                        switch(opcode)
                                        {
                                                case DRIVE:
        //                                              TransmitData("Drive Command\n\r");
                                                        MESSAGE("Drive Command\n\r");
                                                        fifo_write(&out->fifo,msg,msgLength);
                                                        setDirection(payload);
                                                        break;
                                                case SET_SPEED:
        //                                              TransmitData("Set Speed Command\n\r");
                                                        MESSAGE("Set Speed Command\n\r");
                                                        fifo_write(&out->fifo,msg,msgLength);
                                                        setPWMRw(payload);
                                                        setPWMLw(payload);
                                                        break;
                                                case STEERING:
        //                                              TransmitData("Set Steering Command\n\r");
                                                        MESSAGE("Set Steering Command\n\r");
                                                        fifo_write(&out->fifo,msg,msgLength);
                                                        setAngle(payload);
                                                        break;
                                                default:
        //                                              TransmitData("Bad command\n\r");
                                                        MESSAGE("Bad command\n\r");
                                                        fifo_write(&out->fifo,msg,msgLength);
                                                        break;
                                        }
                                        opcode = 0;
                                }
                        }
                }
                
                if(TRANSMISSION_DONE()&&(out->fifo.length>0))
                        Tx();
                
                if(RECEPTION_DONE()&&(in->fifo.length<IN_BUFFER_SIZE))
                        Rx();

        }       
}
Ejemplo n.º 22
0
Archivo: HAL.c Proyecto: edesvin/WiLi
/*==============================================================================
* Function: Init_ISR
*
* Description: Interrupts Configuration for timer PIT.
*
==============================================================================*/
void Init_ISR(void){
	
	INTC_InstallINTCInterruptHandler(ISR_Tick,59,1);	//Software Interrupt
	INTC.CPR.R = 0;

}
Ejemplo n.º 23
0
int main(void) {
	
	volatile T_ULONG lul_InfLoop = 0;
	volatile T_ULONG lul_Validate = 0;
	volatile T_ULONG lul_ValidateUp = 0;
	volatile T_ULONG lul_ValidateDw = 0;
	
	T_UWORD luw_SwDwState;
	T_UWORD luw_SwUpState;
	
	WL_initModesAndClock();
	WL_EIRQ_Init();
	WL_STM_init();
	WL_GPIO_Init();
	init_ext_ints();
	init_PIT();
	
	asm(" wrteei 1");

   	INTC_InstallINTCInterruptHandler(WL_A_Pinch,EIRQ_2,1); /* vector 32 for STM[2] */
	INTC.CPR.R = 0;
  	  

  /* Loop forever */
  for (;;) {
	  /*------------------------------*/
	  luw_SwDwState = GPIO_GetState(SW_DOWN);
	  
	  if (luw_SwDwState == 1)
	  {
		  lul_Validate = WL_CheckValid();
		  if (lul_Validate == 1)
		  {
			  lul_ValidateDw = WL_CheckAutoManualDw();
		  }
		  else
		  {
			  /*DO NOTHING*/
		  }
	  }
	  else
	  {
		  /*DO NOTHING*/
	  }
	  while (luw_SwDwState == 1){
		  
		  if (lul_ValidateDw == 1)
		  {
			  WL_WinMDw();
		  }
		  else
		  {
			  /*DO NOTHING*/
		  }
		  
		  if (lul_ValidateDw == 0)
		  {
			  WL_WinADw();
		  }
		  else
		  {
			  /*DO NOTHING*/
		  }
		  
		  luw_SwDwState = GPIO_GetState(SW_DOWN);
	  }
	  
	  /*------------------------------*/
	  luw_SwUpState = GPIO_GetState(SW_UP);
	  
	  if (luw_SwUpState == 1)
	  {
		  lul_Validate = WL_CheckValid();
		  if (lul_Validate == 1)
		  {
			  lul_ValidateUp = WL_CheckAutoManualUp();
		  }
		  else
		  {
			  /*DO NOTHING*/
		  }
	  }
	  else
	  {
		  /*DO NOTHING*/
	  }
	  
	  while (luw_SwUpState == 1){
		  
		  if (lul_ValidateUp == 1)
		  {
			  WL_WinMUp();
		  }
		  else
		  {
			  /*DO NOTHING*/
		  }
		  
		  if (lul_ValidateUp == 0)
		  {
			  WL_WinAUp();
		  }
		  else
		  {
			  /*DO NOTHING*/
		  }
		  
		  luw_SwUpState = GPIO_GetState(SW_UP);
	  }
	  
	  GPIO_SetState(LED_DOWN, 0);
	  GPIO_SetState(LED_UP, 0);
	  
	  lul_InfLoop++;
	  
	  WL_SetState();
  }
}
Ejemplo n.º 24
0
void main (void) {
	
	T_UWORD luw_i;
	T_UBYTE lub_CountIndice = 0;
	
	initModesAndClock(); 								/* Initialize mode entries and system clock */
	
	INTC_InstallINTCInterruptHandler(isr,59,1);
	INTC.CPR.R = 0;
	
	initGPIO();

	initPIT(ValTMR_0, ValTMR_1);
	
	while (1) {
		
		if(rub_FlagValUpAut || rub_FlagValUpMan){
			if(rub_Fled){
				rub_Fled = 0;
				SIU.GPDO[lub_CountIndice].B.PDO = 1;
				SIU.GPDO[10].B.PDO = 0;
				SIU.GPDO[11].B.PDO = 1;
				lub_CountIndice++;
				if(lub_CountIndice >= 10){
					lub_CountIndice = 10;
					rub_FlagValUpAut = 0;
					rub_FValAutUP = 0;
				}
			}
		}
/******************************************************************************/
		else if(rub_FlagValDownAut || rub_FlagValDownMan){
			if(rub_Fled){
				rub_Fled = 0;
				if(lub_CountIndice <= 1) {
					lub_CountIndice = 1;
					rub_FlagValDownAut = 0;
					rub_FValAutDown = 0;
					SIU.GPDO[11].B.PDO = 1;
				}
				SIU.GPDO[lub_CountIndice-1].B.PDO = 0;
				SIU.GPDO[10].B.PDO = 1;
				SIU.GPDO[11].B.PDO = 0;
				lub_CountIndice--;
				
				if(lub_CountIndice == 0 && rub_FlagValAnPi){
					SIU.GPDO[11].B.PDO = 1;
					PIT.CH[1].TCTRL.B.TEN = 0;
					PIT.CH[1].TCTRL.B.TEN = 1;
					PIT.CH[1].LDVAL.R = ValTMR_1;
					PIT.CH[1].TFLG.B.TIF = 1;
					rub_FlagValAnPi = 0;
					while(!PIT.CH[1].TFLG.B.TIF);
					PIT.CH[1].TFLG.B.TIF = 1;
					rub_Fled = 0;
					rub_FlagValDownAut = 0;
					rub_FlagValDownMan = 0;
					rub_FlagValUpAut = 0;
					rub_FlagValUpMan = 0;
					rub_FValAutDown = 0;
					rub_FValAutUP = 0;
				}
				
			}
		}
		////////////////////////////////////////////////
		else if(!rub_FlagValUpAut && !rub_FlagValUpMan && !rub_FlagValDownAut && !rub_FlagValDownMan){
			rub_Fled = 0;
			SIU.GPDO[10].B.PDO = 1;
			SIU.GPDO[11].B.PDO = 1;
		}
	}
}