La mejor manera de manejar 100 GPIO en AT32UC3C0128C

1

Quiero monitorear 100 pines GPIO en el AT32UC3C0128C e indicar los cambios en el USART (transceptor RS-485).

En el fragmento de código a continuación, he establecido uno de los pines como entrada con el pull up interno activado.

#include <asf.h>
#include <gpio.h>
#include "PinDefine.h"
int temp;
int main (void)
{
    /* Insert system clock initialization code here (sysclk_init()). */

    board_init();
    gpio_enable_pin_pull_up(AVR32_PIN_PA04);
    GPIO_DIR_INPUT(AVR32_PIN_PA04);

    gpio_enable_pin_pull_up(AVR32_PIN_PA05);
    GPIO_DIR_INPUT(AVR32_PIN_PA06);

    if (gpio_get_pin_value(AVR32_PIN_PA00) == true)
    {

    }


    /* Insert application code here, after the board has been initialized. */
}

Entiendo que necesito configurar cada pin (copiar y pegar ejercicio). ¿Cuál es la mejor manera para que yo pueda monitorear el GPIO, sin tener un 100% de declaraciones de%? Todavía no he descubierto el USART.

Cualquier sugerencia será apreciada. Gracias. (nuevo en la codificación)

    
pregunta JOHNDOE

1 respuesta

0

Nunca he usado los chips Atmel, así que no tome el ejemplo como está.

Mientras Long y Chris señalaron en los comentarios, puedes usar el acceso directo al registro

Recomendaría leer primero el capítulo 23 de hoja de datos con la sección gpio.

Para pullups (use set register para evitar problemas con otras funciones):

AVR32_GPOI.port[0].puers = bit_pattern_0
AVR32_GPOI.port[1].puers = bit_pattern_1
AVR32_GPOI.port[2].puers = bit_pattern_2
AVR32_GPOI.port[3].puers = bit_pattern_3

donde bit_pattern_x es una palabra sin signo de 32 bits que contiene la configuración de extracción para el puerto PINX, que se controla mediante el bit 0, el código PIN01 se controla mediante el bit 1 y así sucesivamente. Poner bit a uno activa el pullup.

Es similar a los registros de dirección pero usa un registro claro por la misma razón:

AVR32_GPOI.port[0].oderc = bit_pattern_0
AVR32_GPOI.port[1].oderc = bit_pattern_1
AVR32_GPOI.port[2].oderc = bit_pattern_2
AVR32_GPOI.port[3].oderc = bit_pattern_3

Es posible que primero debas desbloquear los puertos usando AVR32_GPOI.port [0] .lockc [x]

Ahora lees los 32 pines a la vez, leyendo AVR32_GPOI.port [x] .pwr

Puede enviar los datos tal como están, simplemente enmascarados por bit_pattern_x, al host o recorrer los bits utilizando el mismo patrón de bits para omitir los pines no utilizados.

    
respondido por el Dorian

Lea otras preguntas en las etiquetas