sábado, 11 de junio de 2011

CRC KERMIT Y CCITT EN ATMEGA

Cuando se tiene aplicaciones que involucran transmisión de datos siempre es importante tener un medio para detectar errores o para verificar la integridad de dicha información, es aquí donde entra a tallar el Chequeo de Redundancia Cíclica (CRC).

En éste post mostrare un par de rutinas para hacer el calculo del CRC KERMIT Y CRC CCITT en assembler de ATMEL.

Los resultados pueden ser chequeados en On-line CRC calculation

Aquí no hay mucho que decir así que pasare a mostrar las rutinas.

CRC1

Aqui hay dos buques que calcularan el crc de la cadena de texto (“JONATHAN RAUL SEMINARIO”) que se encuentra en la memoria de programa.

CRC2

CRC3

Las rutinas son muy similares, tienen la misma cantidad de instrucciones (22 instrucciones) y son ejecutadas en la misma cantidad de ciclos de instrucción(28 c.i). Si trabajamos con un XTAL=16MHz nos tomará 1.75us calcular el crc de cada byte.


Bueno, eso es todo en éste post…bye !!!

4 comentarios:

  1. I challenge you to update the CRC in 16 instructions (excluding "ret")

    ResponderEliminar
    Respuestas
    1. Creo que si. Te voy a mostrar, pero intenta primero tú mismo. Take a look at the inline assembler for crc_ccitt_update in avr-libc. It's short, but I think you can do even better.

      Eliminar
  2. CCITT:
    EOR CC,CRCH
    MOV CRCH,CRCL
    MOV CRCL,CC
    SWAP CC
    ANDI CC,0x0F
    EOR CRCL,CC
    MOV CC,CRCL
    SWAP CC
    MOV R22,CC
    ANDI CC,0xF0
    ANDI R22,0x0F
    EOR CRCH,CC
    LSL CC
    ROL R22
    EOR CRCL,CC
    EOR CRCH,R22
    RET

    ResponderEliminar