Ricardo_Franco escreveu:Ola Senhores.
Caro Rodrigo, achei muito interessante sua sugestão.
Para os demais segue o link com os dispositivos suportados pelo FreeRTOS:
http://www.freertos.org/a00090.html
Ricardo, voce tem participado dos fóruns da Freescale ? Vai conseguir muito boas informações, diretamente de funcionários que desenvolveram os produtos e/ou soluções de software.
eu olhei por cima e achei equivalente em nivel de complexidade... tem alguma vantagem um ou outro?
// -- Função Inicializa IO
boolean InitializeIO(void)
{
const uint_32 output_set[] =
{
LED_1 | GPIO_PIN_STATUS_0,// Pino Inicializa em "0" após reset
LED_2 | GPIO_PIN_STATUS_0,// Pino Inicializa em "0" após reset
LED_3 | GPIO_PIN_STATUS_0,// Pino Inicializa em "0" após reset
LED_4 | GPIO_PIN_STATUS_0,// Pino Inicializa em "0" após reset
GPIO_LIST_END
};
/* Open and set port TC as output to drive LEDs */
output_port = fopen("gpio:write", (char_ptr) &output_set);
if (output_port)
{
ResetOutputs();
}
return (output_port!=NULL);
}
const uint_32 output_set[] =
{
LED_1 | GPIO_PIN_STATUS_0,// Pino Inicializa em "0" após reset
LED_2 | GPIO_PIN_STATUS_0,// Pino Inicializa em "0" após reset
LED_3 | GPIO_PIN_STATUS_0,// Pino Inicializa em "0" após reset
LED_4 | GPIO_PIN_STATUS_0,// Pino Inicializa em "0" após reset
GPIO_LIST_END
};
Marcelo Samsoniuk escreveu:eu olhei por cima e achei equivalente em nivel de complexidade... tem alguma vantagem um ou outro?Ricardo_Franco escreveu:Ola Senhores.
Caro Rodrigo, achei muito interessante sua sugestão.
Para os demais segue o link com os dispositivos suportados pelo FreeRTOS:
http://www.freertos.org/a00090.html
Rodrigo_P_A escreveu:Marcelo Samsoniuk escreveu:eu olhei por cima e achei equivalente em nivel de complexidade... tem alguma vantagem um ou outro?Ricardo_Franco escreveu:Ola Senhores.
Caro Rodrigo, achei muito interessante sua sugestão.
Para os demais segue o link com os dispositivos suportados pelo FreeRTOS:
http://www.freertos.org/a00090.html
A PRIMEIRA e MUITO IMPORTANTE é:
Não é feito somente para freescale!
// -- Função para Ler no Port
int ReadInput(unsigned char Pino)
{
int DummyA = 0;
// -- Vetores para leitura de IO
static const uint_32 swt2[] = {
SWT_2,
GPIO_LIST_END
};
switch(Pino)
{
case 1: ioctl(input_port, GPIO_IOCTL_READ, (char_ptr) &swt2);
if (swt2[0] & GPIO_PIN_STATUS)
{
DummyA = 1;
}
break;
}
return DummyA;
}
Ricardo_Franco escreveu:Ola Senhores.
Estou caminhando com o aprendizado, usando os exemplos da pasta MQX (sugestão do Douglas de outro forum). No exemplo GPIO tem algumas rotinas interessantes e fiz algumas modificações para funcionar com minha rotina.
- Código: Selecionar todos
// -- Função para Ler no Port
int ReadInput(unsigned char Pino)
{
int DummyA = 0;
// -- Vetores para leitura de IO
static const uint_32 swt2[] = {
SWT_2,
GPIO_LIST_END
};
switch(Pino)
{
case 1: ioctl(input_port, GPIO_IOCTL_READ, (char_ptr) &swt2);
if (swt2[0] & GPIO_PIN_STATUS)
{
DummyA = 1;
}
break;
}
return DummyA;
}
Mas a rotina não funciona me retornando sempre "0". Alguém arrisca algum pitaco?
Att.
Ricardo Franco
#define INIT_TASK 5
#define LEDS_TASK 6
#define CHAVES_TASK 7
TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
/* Task number, Entry point, Stack, Pri, String, Auto? */
{INIT_TASK, Init_task, 1500, 9, "init", MQX_AUTO_START_TASK, 0, 0},
{LEDS_TASK, Leds_task, 1500, 10, "leds", 0, 0, 0},
{CHAVES_TASK, Chaves_task, 1500, 10, "chaves", 0, 0, 0},
{0, 0, 0, 0, 0, 0, }
};
// -- Variaveis Globais
static FILE_PTR output_port = NULL;
static FILE_PTR input_port = NULL;
// -- Função para inicializar IO
boolean InicializaIO(void)
{
const uint_32 output_set[] =
{
LED_1 | GPIO_PIN_STATUS_0,
LED_2 | GPIO_PIN_STATUS_0,
LED_3,
GPIO_LIST_END
};
const uint_32 input_read[] =
{
SWT_2,
GPIO_LIST_END
};
output_port = fopen("gpio:write", (char_ptr) &output_set);
input_port = fopen("gpio:read", (char_ptr) &input_read);
}
// -- Função para Ler no Port
int ReadInput(unsigned char Pino)
{
int DummyA = 0;
// -- Vetores para leitura de IO
static const uint_32 swt2[] = {
SWT_2,
GPIO_LIST_END
};
switch(Pino)
{
case 1: ioctl(input_port, GPIO_IOCTL_READ, (char_ptr) &swt2);
if (swt2[0] & GPIO_PIN_STATUS)
{
DummyA = 1;
}
break;
}
return DummyA;
}
// -- Definições de uso Geral
#define LED_1 (GPIO_PORT_TE | GPIO_PIN3)
#define LED_2 (GPIO_PORT_TG | GPIO_PIN5)
#define LED_3 (GPIO_PORT_TE | GPIO_PIN5)
#define SWT_2 (GPIO_PORT_TG | GPIO_PIN6)
// -- Protótipos de uso Geral
extern boolean InicializaIO(void);
extern void SetOutput(unsigned char Pino, boolean Estado);
extern int ReadInput(unsigned char Pino);
if((fd = open(porta,atributo))!=-1)
{
if(ioctl(fd,operacao)!=-1)
{
processa dados...
}
else
{
perror("ioctl: ");
}
close(fd);
}
else
{
perror("open: ");
}
static uint_32 input_read[] =
{
SWT_2,
GPIO_LIST_END
};
ioctl(input_port, GPIO_IOCTL_READ, (char_ptr) & input_read);
if (input_read[0] & GPIO_PIN_STATUS)
Voltar para NXP (ex-FreeScale (ex-Motorola))
Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes