/************************************************
Experiencia 1: Faz piscar os LEDs
Sistemas Embarcados 2010/2
Marcos Augusto Stemmer
*************************************************/
#include <arch/nxp/lpc24xx.h>
#define SW1 (1<<26)
#define SW2 (1<<27)
/* A rotina espera tem um loop para gastar tempo */
/* Esta maneira de esperar nao e' recomendada porque o tempo nao pode ser determinado */
void espera(long int k)
{
volatile int x;
while(k--){
	x++; x--;
	}
}

int main (void)
{
int mask, dir;
FIO4DIR = 0x7f8000;	/* Bits 0 a 7 ligados nos LEDs: devem ser saidas */
dir=mask=0;
do	{
	espera(60000);		/* Gasta tempo */
	if(!(FIO4PIN & SW1)) dir=1; /* Botao SW1: Faz deslocar para a direita */
	if(!(FIO4PIN & SW2)) dir=0; /* Botao SW2: Faz deslocar para a esquerda */
	FIO4SET = 0x7f8000;	/* Apaga todos os LEDs */
	FIO4CLR = (mask << 15);	/* Liga um LED da sequencia */
	if(dir)	{
		mask >>= 1;	/* Desloca LED ligado para a direita */
		if(!mask) mask = 0x80;	/* Volta para o inicio */
		}
	else	{
		mask <<= 1;	/* Desloca para a esquerda */
		if(!(mask & 0xff)) mask=1;
		}
	} while(1);
return 0;
}

/* Estas rotinas sao chamados pelo crt.S. 
Devem existir, mas ainda nao estao sendo usadas */
void UNDEF_Routine(){}
void SWI_Routine(){}
void FIQ_Routine(){}
