TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: LABmouse en 30 de Octubre de 2010, 19:37:16

Título: Varias Dudas de Freescale en ASM
Publicado por: LABmouse 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???
Título: Re: Equivalente de "goto $-5 "de Microchip en Freescale
Publicado por: ema en 30 de Octubre de 2010, 20:06:50
Me parece que con esto basta.

Código: [Seleccionar]
BNE    *-4
Saludos
Título: Re: Equivalente de "goto $-5 "de Microchip en Freescale
Publicado por: LABmouse en 30 de Octubre de 2010, 20:10:38
Pues..SI SEÑOR!!!

MUCHISIMAS GRACIAS!!!!! esto se merece  :-/
Título: Re: Varias Dudas de Freescale en ASM
Publicado por: LABmouse 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?
Título: Re: Varias Dudas de Freescale en ASM
Publicado por: scientist 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
Título: Re: Varias Dudas de Freescale en ASM
Publicado por: RICHI777 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.


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 !


Título: Re: Varias Dudas de Freescale en ASM
Publicado por: LABmouse 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)
Título: Re: Varias Dudas de Freescale en ASM
Publicado por: RICHI777 en 01 de Noviembre de 2010, 10:13:37
Excelente !!!

Saludos !
Título: Re: Varias Dudas de Freescale en ASM
Publicado por: LABmouse 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


Título: Re: Varias Dudas de Freescale en ASM
Publicado por: RICHI777 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 !