Hardware XOR para PINS DE SALIDA EN MICROCONTROLORES AVR

¿Sabía que muchas fichas AVR tienen un tipo de opción exclusiva de hardware o (xor) cuando se refiere a los niveles lógicos de los pasadores de salida? Si mira en la hoja de datos (la imagen de arriba es una captura de pantalla de una hoja de datos ATTINY13) encontrará una sección para alternar el PIN. Resulta que si establece un puerto como una salida, la escritura de la lógica al Registro PIN correspondiente alterará los niveles lógicos de esa salida. Esto es realmente fácil de descuidar si está escribiendo en C, pero he estado trabajando para aprender un poco de lenguaje ensamblador y he encontrado que esto es muy útil. Sigue leyendo después del descanso y le diré cómo sucedí sobre esta información y para qué es bueno.

Así que en primer lugar, hablemos de por qué esto no importa mucho si está escribiendo en el código C. Normalmente, si desea alternar algunos pines de salida, simplemente escribirá un forro que XOR está con un bitmesk:

1
PORTB ^ = 0xFF;

Esto es un poco de T Shorthand (Aprenda mucho más sobre eso desde mi serie tutorial) que realiza el XOR en los niveles de salida actuales y escribe el resultado de nuevo al puerto. Pero lo mismo se puede hacer en hardware escribiendo la mascar de bits en el registro PINB:

1
PINB = 0xFF;

Realmente no te importa, porque es solo una línea de código. De hecho, es probable que sea más sencillo de XOR el PORTB porque tiene mucho más sentido conceptualmente. Pero el compilador podría terminar usando muchos más ciclos que si hubiera escrito en el registro PIN.

Pasé por esta característica porque estaba parpadeando algunos LEDs como una forma de aprender ensamblador. Tuve este revendedor del código en una rutina de servicio de interrupción:

1
2
3
4
ldi kyreg, 0xff
en IntroG, PORTB
eor introg, myreg
OUT PORTB, INTREG

Carga un mono de bits en un registro, se carga en la lógica actual de PORTB a otro registro, realiza un XOR de los dos y escribe el resultado de nuevo a PORTB. Esto toma cuatro ciclos y requiere dos registros. Toggling Bits es una operación tan rudimentaria. Me sorprendió que no hubiera un comando a Xor Bits directamente, así que comencé a buscar. Me encontré con este breve artículo en Avr Freaks, lo que me indicó en la función de palanca. Ahora pude disminuir el código de mi ensamblador de la siguiente manera:

1
2
LDI IntroG2, 0xFF; Temporarity usa intreg2 como una máscara de bits
PINB, INTREG2; escribir a PINB Effectivley hace un puerto exclusivo o en PORTB

Esto se traduce en el mismo efecto de altura, pero toma solo dos ciclos y requiere el uso de un solo registro.

Lo que encontré muchos interesantes es que no importa cuánto utilice los chips AVR, nunca hay una escasez de sorpresas que esperan en la hoja de datos.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts