Página 1 de 1
FIOxPIN

Enviado:
07 Dez 2010 08:17
por abreu
Olá,
Estou tentando ler um bit ou o port inteiro do LPC2368. O kit utilizado é o MCB2300 junto com o Keil.
A seguir a configuração utilizada:
volatile unsigned long status_1 = 0;
FIO0DIR = 0x000000F0; /configura P0.4 .. P0.7 como saidas
status_1 = FIO0PIN;
Para setar as saídas (P0.4..P0.7) estou utilizando FIOSET e FIO0CLR e está funcionado. Apenas não consigo ler uma ou todas as portas de entrada.
Se alguém tiver uma solução, agradeço
Obrigado,
Edson

Enviado:
07 Dez 2010 08:35
por fabim
cara, você abilitou o Fast Port no PIN MASK ?
eu não uso FIOSET FIOCLR.
tipo,
SET P0.4 = IOPIN0 |= 1<<4;
CLR P0.4 = IOPIN0 &= ~(1<<4);
Na verdade a IDE não vai gera o hex pra rotacionar nada, ela vai simplesmente substituir 1<<4 por 0x00000010 e ~(1<<4) por 0xFFFFFFEF.
para você testar um pino, ele estando como entrada.
IODIR0 = 0x000000F0;
quer ler o bit 20 ?
if(!IOPIN0 & 1<<20)// Se pino ==0
printf("Bt Precionado /0 /N");
else
printf("Bt no Precionado /0 /N");
Você deve ter em mente, que não são todas as portas que possuem o Fast port, e para usar o fast port, você deve abilitar isto, pois por default é IO.
Abraços
FIOxPIN

Enviado:
13 Jan 2011 10:14
por abreu
Realmente vc tem razão. Eu configurei para FAST e então consegui ativar os pinos pelo debug.
Apenas não consegui o mesmo resultado pelo modo default, quero dizer, eu configurei pelo modo IODIR e não consegui setar algumas portas. No exemplo a seguir, não consigo setar a porta P0.6 e P0.7 sendo que no modo FAST eu consigo. Segue programa com o comentario entre parenteses.
/* Funcao de inicializacao das portas */
void PORTS_Init(void) {
// SCS &= ~0x00000001;
// SCS |= 0x00000001; // GPIOM = 1 : Want to use fast I/O
// FIO0DIR = 0x000003C0;
PINSEL0 = 0x00000000; /* funcionalidade padrao dos pinos como I/O */
IODIR0 = 0x000003C0; /* P0.6, P0.7, P0.8 e P0.9 como saidas 000003C0*/
}
int main (void) {
PORTS_Init(); /* inicializa as portas */
IOPIN0 |= 1<<6; (porta não setada)
IOPIN0 |= 1<<7; (porta não setada)
IOPIN0 |= 1<<8; (porta setada)
// IOSET0 = 0x00000040; /* aciona saida P0.6 */ (não funciona)
// IOSET0 = 0x00000080; /* aciona saida P0.7 */ (não funciona)
// IOSET0 = 0x00000100; /* aciona saida P0.8 */ (porta setada)
// IOSET0 = 0x00000200; /* aciona saida P0.9 */ (porta setada)
While (1)
{
}
}