Atmega16 SPI para registrar datos de 32 bits

1

Soy muy nuevo en AVR e incluso para la codificación de microcontroladores. Quería cambiar los datos de 32 bits en SPI de un Atmega16 a un registro de desplazamiento de 32 bits. El registro de desplazamiento en un dispositivo no compatible con SPI. Pero todavía espero utilizar para obtener la transmisión rápida.

Como el AVR tiene solo un registro de datos de 8 bits, solo se puede escribir un byte de datos en él. Así que necesito cambiar nuestros 32 bits de datos. Soy capaz de hacer lo mismo como hacer que el SS # sea bajo > cargar el primer byte de datos - > esperar hasta que se complete la transmisión - > hacer que el SS # sea alto para bloquear los datos. Lo estoy haciendo 4 veces y obteniendo la salida de 32 bits. Pero el problema aquí es que el reloj no es continuo, para cada byte hay un retraso entre la ráfaga del reloj. En este caso, el registro de desplazamiento externo no obtendrá el 32 bit continuamente, ya que por cada byte que estoy haciendo el SS # bajo y alto. Necesito obtener el paquete de datos completo continuamente sin interrupciones. Estoy profundizando en esto para resolver.

Mientras tanto, me sería útil que alguien compartiera alguna idea.

Saludos, Prabhu

    
pregunta Prabhu R

2 respuestas

1

Las transacciones continuas de más de 8 bits no son posibles en ATMega16. Tienes que sondear para SPIF y luego cargar nuevo valor. En otras MCU que tienen un registro de datos con doble búfer, es posible volver a cargar el registro de datos antes de que se vacíe.

No hay necesidad de afirmar SS # entre palabras. Desde el punto de vista estático de SPI, en los modos 1 o 3, el envío de 8 * 4 bits equivale a enviar 1 * 32 bits, incluso cuando se producen con una diferencia de segundos.

    
respondido por el venny
0

Puede mantener el estado actual deseado del registro de desplazamiento en una sola variable uint32_t . Cada vez que es necesario cambiar la salida del registro de turnos, modifica la variable en consecuencia y luego envía la totalidad 32bits; es decir, siempre envía todos los 32 bits, incluso si solo cambia un bit. De esta manera, tendrá una representación consistente del estado del registro de desplazamiento en la memoria y no tendrá que preocuparse por qué byte / bit enviar cuando.

    
respondido por el JimmyB

Lea otras preguntas en las etiquetas