Exemplo n.º 1
0
void LED_blink(uint8_t LED)
{
	PIN_toggle(LED);
	delay_ms(25);
	PIN_toggle(LED);
	delay_ms(25);
	return;
}
Exemplo n.º 2
0
uint8_t spi_transfer(uint8_t message)
{
	uint8_t* reg_ptr;
	uint8_t timeout = SPI_TIMEOUT;
	uint8_t receive_char;
	uint8_t i, temp, temp2;
	
	reg_ptr = SPDR_BASE;
	
	// Commence the SPI message.
	SS_set_low();
	*reg_ptr = message;
		
	reg_ptr = SPSR_BASE;

	while(!(*reg_ptr & SPI_SPSR_SPIF))		// Check if the transmission has completed yet.
	{
		if(!timeout--)
		{
			//SS_set_high();
			return 0x00;						// Something went wrong, so the function times out.
			if(SELF_ID != 1)
			{
				PIN_toggle(LED2);
			}
		}
	}	

	
	reg_ptr = SPDR_BASE;
	receive_char = *reg_ptr;
	
		//SS_set_high();
		
		delay_cycles(10);
	// I was assuming that SPI messages would be received MSB first.
	// Comment out the following if that is not the case.
	
	//temp = 0, temp2 = 0;
	//
	//for (i = 0; i < 8; i ++)
	//{
		//temp2 = receive_char << (7 - i);	// reverses the order of the bits.
		//temp2 = temp2 >> 7;
		//temp2 = temp2 << (7 - i);		
		//temp += temp2;
	//}
	
	return receive_char;					// Transmission was successful, return the character that was received.
}
void decode_command(uint8_t* command_array)
{		
	uint8_t i, command  = *(command_array + 5);
	uint8_t req_by = (*(command_array + 7)) >> 4;

	switch(command)
	{
		case REQ_RESPONSE :
			if(SELF_ID != 1)
			{
				PIN_toggle(LED3);
			}
			send_now = 1;
		case REQ_DATA :
			if(SELF_ID != 1)
			{
				PIN_toggle(LED1);
			}
			send_data = 1;
			for (i = 0; i < 8; i ++)
			{
				data_req_arr[i] = *(command_array + i);
			}
		case REQ_HK :
			if(SELF_ID != 1)
			{
				PIN_toggle(LED2);
			}
			send_hk = 1;
		case REQ_READ:
			read_response = 1;
			for (i = 0; i < 8; i ++)
			{
				read_arr[i] = *(command_array + i);
			}
		case REQ_WRITE:
			write_response = 1;
			for (i = 0; i < 8; i ++)
			{
				write_arr[i] = *(command_array + i);
			}
		case SET_SENSOR_HIGH:
			set_sens_h = 1;
			for (i = 0; i < 8; i ++)
			{
				sensh_arr[i] = *(command_array + i);
			}
		case SET_SENSOR_LOW:
			set_sens_l = 1;
			for (i = 0; i < 8; i ++)
			{
				sensl_arr[i] = *(command_array + i);
			}
		case SET_VAR:
			set_varf = 1;
			for (i = 0; i < 8; i ++)
			{
				setv_arr[i] = *(command_array + i);
			}
		case SET_TIME:
			CURRENT_MINUTE = *(command_array);
		case SEND_TM:
			new_tm_msgf = 1;
			for (i = 0; i < 8; i ++)
			{
				new_tm_msg[i] = *(command_array + i);
			}
		case TM_PACKET_READY:
			if((!current_tm_fullf) && (!receiving_tmf))
				start_tm_packet();
		case TC_TRANSACTION_RESP:
			tc_transfer_completef = *command_array;
		case OK_START_TC_PACKET:
			start_tc_transferf = 1;
		default:
			return;
	}
	return;
}