Autor Tema: Varias Dudas de Freescale en ASM  (Leído 2916 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Varias Dudas de Freescale en ASM
« en: 30 de Octubre de 2010, 19:37:16 »
Hola

Sucede que estoy enfrentando unos retos con el JM60 en asm y requiero usar un salto de linea en asm pero sin tener que decirle una etiqueta.

Ejemplo:

    
Código: ASM
  1. loop:
  2.     nop        
  3.     aix #-1    
  4.     cphx #0    
  5.     bne loop    
  6.     rts

Eso anterior funciona bien, pero quiero cambiar el tener que escribir la etiqueta bne loop.

En microchip, cuando trabajaba en asm, usaba por ejemplo goto $-4, el compilador entendia que era saltar a 4 instrucciones atrás, pero en Freescale no me lo permite hacer.


Intente de la siguiente forma pero marca error al compilar.
Código: ASM
  1. loop:
  2.     nop        
  3.     aix #-1    
  4.     cphx #0    
  5.     bne $-4  
  6.     rts

Ustedes saben como hacerlo???
« Última modificación: 30 de Octubre de 2010, 20:38:33 por LABmouse »

Desconectado ema

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1078
Re: Equivalente de "goto $-5 "de Microchip en Freescale
« Respuesta #1 en: 30 de Octubre de 2010, 20:06:50 »
Me parece que con esto basta.

Código: [Seleccionar]
BNE    *-4
Saludos

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Equivalente de "goto $-5 "de Microchip en Freescale
« Respuesta #2 en: 30 de Octubre de 2010, 20:10:38 »
Pues..SI SEÑOR!!!

MUCHISIMAS GRACIAS!!!!! esto se merece  :-/

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Varias Dudas de Freescale en ASM
« Respuesta #3 en: 30 de Octubre de 2010, 20:42:31 »
Hola,

Pues la pregunta anterior, nace de la necesidad de crear una macro para retardo en useg.. Esta macro pretendo hacerla en asm para que funcione, pero me esta dando un poco de problema.

Cuando se quiera usar, se escribira lo siguiente:

Código: ASM
  1. delay_us(100);

y en un.h estara definido lo siguiente:



Código: ASM
  1. #define delay_us(time)\
  2. { \
  3.     __asm ( "pshh" );       /* (2 c: 83.33 ns)*/ \
  4.     __asm ( "pshx" );       /* (2 c: 83.33 ns)*/ \
  5.     __asm ( "ldhx time" );  /* (3 c: 125 ns)*/ \
  6.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  7.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  8.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  9.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  10.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  11.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  12.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  13.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  14.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  15.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  16.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  17.     __asm ( "nop" );        /* (1 c: 41.67 ns)*/ \
  18.     __asm ( "aix #-1" );    /* (2 c: 83.33 ns)*/ \
  19.     __asm ( "cphx #0" );    /* (3 c: 125 ns)*/ \
  20.     __asm ( "bne *-16" );   /* (3 c: 125 ns)*/ \
  21.     __asm ( "pulx" );       /* (3 c: 125 ns)*/ \                            
  22.     __asm ( "pulh" );       /* (3 c: 125 ns)*/ \
  23.     }


pero al compilar me da un error y pues no se porque me ha de dar error... ¿sera alguna configuración adicional a Codewarrior?

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Varias Dudas de Freescale en ASM
« Respuesta #4 en: 31 de Octubre de 2010, 02:44:42 »
checate en el foro de freescale, recuerdo haber visto una libreria como la que deseas, la escribio bigmac, lamento no poder pasarte el link directo, pero ando algo deprisa, saludos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Varias Dudas de Freescale en ASM
« Respuesta #5 en: 31 de Octubre de 2010, 13:38:12 »
Hola Ernesto, lamentablemente no puedo ayudarte ya que el CodeWarrior es bastante confuso en el manejo de macros. Algunas consideraciones a tomar en cuenta usando macros de esta manera.

  • Al ser una macro el compilador pega el código de la macro al ser invocada, si esta macro se usa 100 veces entonces el código se multiplicara x 100
  • Esta macro es dependiente de la velocidad de clock, si cambias de micro o velocidad de clock es necesario ajustar las instrucciones
  • Dudo que se pueda usar el parametro de la macro asi como lo haces, me parece que es necesario escribir/leer desde una variable global

Yo lo que hago, es usar el Proccess Expert con la velocidad de clock corresponiende y copio el código que genere este y lo meto dentro de una función. Lamento mucho no poder ayudarte tal cual lo queres vos.

Saludos !



Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Varias Dudas de Freescale en ASM
« Respuesta #6 en: 01 de Noviembre de 2010, 01:07:26 »
Hola RICHI77, Si que se puede usar el argumento de la macro tal cual como intento hacerlo. El problema estaba en la manera de empaquetar varias lineas de código en una macro, y ya esta funcionando..

Pronto les muestro el resultado.

SALUDOS!

PD:

Aca un ejemplo de como crear una macro de varias lineas de codigo y usando un argumento de entrada para la macro.

Código: C
  1. #define setup_adc_clock(mode)       \
  2. do {                                \
  3.   if(mode==ADC_OFF) ADCSC1=0x1F;    \
  4.   else ADCCFG=(mode|(ADC_MODE<<2)); \
  5. }while(0)
« Última modificación: 01 de Noviembre de 2010, 10:40:55 por LABmouse »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Varias Dudas de Freescale en ASM
« Respuesta #7 en: 01 de Noviembre de 2010, 10:13:37 »
Excelente !!!

Saludos !

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Varias Dudas de Freescale en ASM
« Respuesta #8 en: 01 de Noviembre de 2010, 10:14:27 »
Hola!, tengo otra pregunta.

Como se puede empaquetar un archivo.h para que el compilador lo vea como una librería.lib y la persona no pueda el contenido de esta misma pero si usarle sus funciones..
 :P



Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Varias Dudas de Freescale en ASM
« Respuesta #9 en: 01 de Noviembre de 2010, 11:50:30 »
Hola, por lo que tengo entendido el CodeWarrior en su versión libre no permite crear librerias. Creo que lo podes hacer en las versiones pagas. Por otra parte si lo queres es ocultar en una libreria el manejo de la macro que inicio este tema, no se puede ya que al ser una macro debe ir en un archivo header.

Saludos !