void pinInit(void) {
	UP_BUTTON_DIR(IN);
	UP_PULL_UP;

	DN_BUTTON_DIR(IN);
	DN_PULL_UP;

	LT_BUTTON_DIR(IN);
	LT_PULL_UP;

	RT_BUTTON_DIR(IN);
	RT_PULL_UP;

	AA_BUTTON_DIR(IN);
	AA_PULL_UP;

	BB_BUTTON_DIR(IN);
	BB_PULL_UP;

	MISO_DIR(IN);
	csFM_DIR(OUT);

	wpFM_DIR(OUT);
	wpFM_STATE(HIGH);
	// This active low pin prevents write operations to the memory array or the status register.

	holdFM_DIR(OUT);
	holdFM_STATE(HIGH);
}
Example #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();
		}
	}
	*/
}