All pastes #112685 Raw Edit

Unnamed

public text v1 · immutable
·published 2006-08-03 03:31 UTC
rendered paste body
int main(void)
{

	// Initialize the serial port
	USART_Init();
	
	// Initialize encoder data
	Encoders_Init();

	// Initialize gyros
	Gyro_Init();

	// Initialize timers
	Timer_Init();

	// Enable global interrupts, sets l bit of SREG [334]
	sei();

	// Set switches data directional register as input
	// Defined in globals.h
	SW_DDR	=	0x00;
	
	// Set LED DDR as output. LEDs display debug mode
	LED_DDR	=	0xFF;

	// By default have the LEDs off
	LED_PORT	=	0x00;

	if(debug_mode == TRUE)
	{
		// Initialization message
		send_string("AVR board initialized...\r\n");
	}
	
	// Endless loop
	while(1)
	{
		USART_Transmit(0x10);
		USART_Transmit(0x00);
		
		// These values hold the values of the button and
		// the flag thats set when it's decided that it is
		// a valid fresh hit and not the user just holding
		// down the button.
		char button_value, button_push_valid, debug_sw_prev;

		button_value	=	(SW_PIN & 0b10000000)	==	0;

		// Make sure that the user isn't just holding down
		// the button
		button_push_valid	=	button_value && !debug_sw_prev;

		// Set the previous value to the current value, to
		// be used in the next loop.
		debug_sw_prev	=	button_value;
		
		// If this is a valid (not noise/held down) push
		if(button_push_valid)
		{
			// Flip flop modes
			if(debug_mode == TRUE)
			{
				// Lights off = debug mode off
				debug_mode	=	FALSE;
				LED_PORT		=	0xFF;
			}
			else
			{
				// Lights on = debug mode on
				debug_mode	=	TRUE;
				LED_PORT		=	0x00;
			}

		}
		
		// If the interrupt tripped, run the ISR.
		// We run it in the main loop as to not
		// miss as many encoder ticks.
		if(run_timer1_isr	==	TRUE)
		{

			// We sample the gyro every time 
			// (120Hz)
			Sample_Gyro();
			
			// Send a data packet every 3 times
			// (40Hz)
			if(packet_limiter	>=	3)
			{
				// If we are currently in debug mode, send a
				// packet that is easier for humans to read.
				// Else send the normal, RC optimized, packet.
				if(debug_mode == TRUE)
				{
					Send_Debug_Packet();
				}
				else
				{
				//	Send_RC_Packet();
				}
				
				// Reset the packet limiter
				packet_limiter	=	0;
			}
			
			// Reload the timer value so we can
			// control the interrupt frequency
			TCNT1	=	T1_LOAD;
			
			// Increment the limiter
			packet_limiter++;
			
		}

	}

}