예제 #1
0
파일: hardware.c 프로젝트: BwRy/seL4
/**
   DONT_TRANSLATE
 */
BOOT_CODE void
initTimer(void)
{
    int timeout;

    disableWatchdog();
    enableTimers();

    timer->cfg = TIOCP_CFG_SOFTRESET;

    for (timeout = 10000; (timer->cfg & TIOCP_CFG_SOFTRESET) && timeout > 0; timeout--)
        ;
    if (!timeout) {
        printf("init timer failed\n");
        return;
    }

    maskInterrupt(/*disable*/ true, DMTIMER0_IRQ);

    /* Set the reload value */
    timer->tldr = 0xFFFFFFFFUL - TIMER_INTERVAL_TICKS;

    /* Enables interrupt on overflow */
    timer->tier = TIER_OVERFLOWENABLE;

    /* Clear the read register */
    timer->tcrr = 0xFFFFFFFFUL - TIMER_INTERVAL_TICKS;

    /* Set autoreload and start the timer */
    timer->tclr = TCLR_AUTORELOAD | TCLR_STARTTIMER;
}
예제 #2
0
int main()
{
	
	// Chip errata
	CHIP_Init();
	
	// ensure core frequency has been updated
	SystemCoreClockUpdate();
	
	// start clocks
	initClocks();
		
	// init LEDs
	LED_Init();
	
	// init scheduler
	SCHEDULER_Init();
	
	// enable timers
	enableTimers();
	
	// enable interrupts
	enableInterrupts();
	
	// init tasks
	SCHEDULER_TaskInit(&radio_task, radio_task_entrypoint);
	
	// run
	SCHEDULER_Run();
	
}
예제 #3
0
파일: main.c 프로젝트: okosan/ITE-open
void main(void)
{
	PORTA=0x00;
	DDRA=0x00;

	PORTB=0x00;
	DDRB=0x00;

	PORTC=0x00;
	DDRC=0x00;

	PORTD=0x00;
	DDRD=0x00;

	PORTE=0x00;
	DDRE=0x00;

	PORTF=0x00;
	DDRF=0x00;

	PORTG=0x00;
	DDRG=0x00;

	initTimer0();
    initTimer1();
    initTimer2();
    initTimer3();

	enableTimers();

	// External Interrupt(s) initialization
	// INT0-INT7: Off
	EICRA=0x00;
	EICRB=0x00;
	EIMSK=0x00;

	// Analog Comparator initialization
	// Analog Comparator: Off
	// Analog Comparator Input Capture by Timer/Counter 1: Off
	ACSR=0x80;
	SFIOR=0x00;

	// ====================== TRUE INITIALIZATION =============================

    initLeds();
	//initJumpers();

	InitFans();
	// configure Fans
    FanSetPower(&fan1, 5);
	FanSetPower(&fan2, 0);
	FanSetPower(&fan3, 0);
	FanSetPower(&fan4, 0); // max is 27

	FanEnable(&fan2);
	FanEnable(&fan3);
	FanEnable(&fan4);




	InitRailControl();

	InitPsuControl();

	InitPullDownControl();

	//InitTemperature(); // no temperature-based control yet // depend on jumper J1

	InitSignalControl();

	InitADC();
	InitBatChargeControl();

	initPPC_State();

    initUSART();


	#asm("sei")

	while(1)
	{
		// read jumpers
		// read inputs
		// update fans
		// update outputs
		// enter sleep

		/*
		// test fan speed debug
		if (getTicksDelta(lastFanStepTickCount) > FAN_STEP_INTERVAL)
		{
			lastFanStepTickCount = getTickCount();
			debug_fan_power_step++;
			if (debug_fan_power_step > PWR_FAN_MAX)
				debug_fan_power_step = PWR_FAN_MIN;
            FanSetPower(&fan1, debug_fan_power_step);
		};
		*/

        BatChargeUpdate();
		//batChargeState.all_batteries_charged = 1; // !!!
		SignalsIndicateCharged(batChargeState.all_batteries_charged);

		#if 1
        SignalReadUpdate();


		switch (ppcState.mode)
		{
		case(PPC_MODE_WAITING):
		{
			if (InputsTransientHigh(SIGNAL_INDEX_SPINT_POWER))
			{
				setPPC_Mode(PPC_MODE_STARTING);
			};
			break;
		}; // waiting mode state

		case(PPC_MODE_STARTING):
		{
            FanEnable(&fan1);
            switch(ppcState.stage)
			{
			case(0):
                PsuSet(0,0,1,0);
				PsuUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(200);

				break;

			case(1):
                PsuSet(1,0,1,0);
				PsuUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(200);

				break;

			case(2):
                PsuSet(1,0,1,1);
				PsuUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(200);

				break;

			case(3):
                RailSet(1,0);
				RailUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(200);

				break;

			case(4):
                RailSet(1,1);
				RailUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(1000);

				break;

			case(5):
                PullDownSet(1,0,0);
				PullDownUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(100);

				break;

			case(6):
                PullDownSet(0,0,0);
				PullDownUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(100);

				break;

			default:
				setPPC_Mode(PPC_MODE_ACTIVE);
				break;

			};
			ppcState.stage++;
			break;
		}; // starting mode state

		case(PPC_MODE_ACTIVE):
		{
			FanEnable(&fan1);

			if (signalState.current_signal_state[SIGNAL_INDEX_SPINT_POWER] == 0)
			{
				setPPC_Mode(PPC_MODE_PARKING);
			};

			//if (InputsTransientLow(SIGNAL_INDEX_SPINT_POWER))

			break;
		}; // acitve mode state

		case(PPC_MODE_PARKING):
		{
			FanDisable(&fan1);
			switch(ppcState.stage)
			{
			case(0): // turn off PSU power
                PsuSet(0,0,0,0);
				PsuUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(200);

				break;
			case(1): // park computer (pull-in)
                PullDownSet(1,0,0);
				PullDownUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(100);

				break;
			case(2): // park computer (pull-out)
                PullDownSet(0,0,0);
				PullDownUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(1000); // wait before clamping power rail

				break;

			case(3): // turn-off rails
                RailSet(0,0);
				RailUpdateOutput();
				PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;
				delay_ms(200);

				break;
			default:
				setPPC_Mode(PPC_MODE_WAITING);
				break;
			};

			ppcState.stage++;
			break;
		}; // Parking mode state

		}; // MODE Switch




		// This function locks for 0.2 second minimum
		// This must be read in the end of control loop
		/*
		TemperatureReadUpdate();
		if (temperatureState.temperature1 != 0)
		{
			if (temperatureState.temperature1 <= 30)
			{
				FanDisable(&fan1);
			}
			else
			{
				FanEnable(&fan1);
				FanSetPower(&fan1,(unsigned char)(PWR_FAN_MIN + ((signed int)(PWR_FAN_MAX - PWR_FAN_MIN))*temperatureState.temperature1/60));
			};
		}
		else
		{
			FanDisable(&fan1);
		};
		*/


		RailUpdateOutput();
		PsuUpdateOutput();
		PullDownUpdateOutput();

		networkUpdate();

		PORTA = railState.port_value | psuState.port_value | pullDownState.portA_value;

        #endif


		/*
		if (ppcState.mode == PPC_MODE_WAITING)
		{
			#asm("sleep")
		}
		*/
	}



} // main