예제 #1
0
/* --------- SPI --------- */
void SPI_MasterInit(void) {
	MOSI_DIR(OUT);
	SCK_DIR(OUT);
	// Set MOSI and SCK output, all others input

	SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR0);
/*
	Enable SPI, Master, set clock rate fck/16

	Page 140
	SPI Control Register – SPCR
	Bit 6 – SPE: SPI Enable
	Bit 4 – MSTR: Master/Slave Select
		(This bit selects Master SPI mode when written to one)
	Bits 1, 0 – SPR1, SPR0: SPI Clock Rate Select 1 and 0
		Relationship Between SCK and the Oscillator Frequency
		fsck = fosc/16; 
*/
}
예제 #2
0
/*
	Main function.
*/
int main(void)
{
	SET(DDRD, _BV(PD7), ON);
	LCD_CD_DIR(OUT);
	SCK_DIR(OUT);
	MOSI_DIR(OUT);
	MISO_DIR(IN);

	LCD_CS_SET(OFF);
	FRAM_HOLD_SET(OFF);
	FRAM_CS_SET(OFF);
	FRAM_WP_SET(OFF);
	// SS pin!
	BAT_LOW_LED_DIR(OUT);

	SPI_ENABLE;
	
	byte rx_data;

	rx_data = FRAM_read_sr();
	FRAM_write_enable();
	rx_data = FRAM_read_sr();

	while (TRUE) {};
/*
	FRAM_write_enable();

	// ~~~~~~~~~~~~~~~~ BEGIN TEST CODE  ~~~~~~~~~~~~~~~~~~~~~~

	byte tx_byte, rx_byte = OFF;;
	while (TRUE) {
		tx_byte = 0x03;

		rx_byte = FRAM_read_sr();

		//writeNumToScreen(rx_byte);

		FRAM_write_enable();
		FRAM_write_byte(FRAM_FRAME_BUFFER_START_MSB, FRAM_FRAME_BUFFER_START_LSB, tx_byte);
		rx_byte = FRAM_read_byte(FRAM_FRAME_BUFFER_START_MSB, FRAM_FRAME_BUFFER_START_LSB);

		BAT_LOW_LED(rx_byte);

		//writeNumToScreen(rx_byte);
		
		
		//_delay_ms(GAME_LOOP_DELAY);
		//_delay_ms(GAME_LOOP_DELAY);
		//_delay_ms(GAME_LOOP_DELAY);
		//_delay_ms(GAME_LOOP_DELAY);
		//_delay_ms(GAME_LOOP_DELAY);
		

		tx_byte = 0x04;
		FRAM_write_enable();
		FRAM_write_byte(FRAM_FRAME_BUFFER_START_MSB, FRAM_FRAME_BUFFER_START_LSB, tx_byte);
		rx_byte = FRAM_read_byte(FRAM_FRAME_BUFFER_START_MSB, FRAM_FRAME_BUFFER_START_LSB);

		BAT_LOW_LED(rx_byte);

		//writeNumToScreen(rx_byte);

		
	}
	
	// ~~~~~~~~~~~~~~~~ END TEST CODE ~~~~~~~~~~~~~~~~~~~~~~ */






/*
	setup();
	clearScreen();
	clearFrameBuffer();
	

	// Initialise variables.
	byte local_button_state[NUM_BUTTONS];
	byte collision_state = FALSE;
	byte row = INITIAL_CURSOR_ROW, col = INITIAL_CURSOR_COL;
	byte pwm_value = OFF;
	byte screen_inverted = FALSE;
	
	PWM_VALUE(pwm_value);



	// Create a state machine based on the button values.
	while (TRUE) {
		
		// Slow down the game for the user.
		_delay_ms(GAME_LOOP_DELAY);
		// Create a local button state variable to avoid bstate changing during one cycle.
		copyButtonState(button_state, local_button_state);

		// ADMINISTRATIVE BUTTONS //

		// RESET THE GAME
		if ( local_button_state[BSTATE_A] ) {
			clearFrameBuffer();
			clearScreen();
			collision_state = FALSE;
			row = INITIAL_CURSOR_ROW;
			col = INITIAL_CURSOR_COL;
			game_state = GAME_STATE_IDLE;
		} 
		// INVERT THE LCD DISPLAY.
		if ( local_button_state[BSTATE_B] ) {
			if (screen_inverted) {
				// Uninvert the screen.
				LCD_command_tx(LCD_CMD_NON_INVERTED); // Display inverse off.
				screen_inverted = FALSE;
			} else {
				LCD_command_tx(LCD_CMD_INVERTED); // Display inverse on.
				screen_inverted = TRUE;
			}
			_delay_ms(GAME_LOOP_DELAY);
			_delay_ms(GAME_LOOP_DELAY);
		} 
		// CHANGE THE BRIGHTNESS OF THE SCREEN
		if ( local_button_state[BSTATE_ACTION] ) {
			if (pwm_value == OFF) {
				pwm_value = ON;
			} else if (pwm_value < PWM_STEP) {
				pwm_value = OFF;
			} else {
				pwm_value -= PWM_STEP;
			}
		
			PWM_VALUE(pwm_value);
		}

		// GAME PLAY BUTTONS //

		// IF COLLISION, GAME HAS BEEN LOST. WAIT UNTIL USER RESET.
		
		if (collision_state) {
			// If a collision occured draw a pattern over the screen.
			drawScreenPattern();
		} else {
			// MOVE CURSOR UP.
			if ( game_state == GAME_STATE_UP ) {
				if (row==0) {
					row = LCD_MAX_ROWS;
				} else {
					row--;
				}
			} 
			// MOVE CURSOR DOWN
			if ( game_state == GAME_STATE_DOWN ) {
				if (row == LCD_MAX_ROWS) {
					row = 0;
				} else {
				row++;
				}
			} 
			// MOVE CURSOR LEFT
			if ( game_state == GAME_STATE_LEFT ) {
				if (col==0) {
					col = LCD_MAX_COLS;
				} else {
					col--;
				}
			} 
			// MOVE CURSOR RIGHT
			if ( game_state == GAME_STATE_RIGHT ) {
				if (col == LCD_MAX_COLS) {
					col = 0;
				} else {
					col++;
				}
			} 
		
			// If the cursor has been moved, check for a collision with the previous path.
			if ( game_state != GAME_STATE_IDLE ) {
				collision_state = checkForCollision(row,col);
			}
			addPixelToFrameBuffer(row, col, ON);
			drawFrameBuffer();
		}
	}
	*/
}