Resumen de contenidos para Parallax Propeller P8X32A
Página 1
Manual del Micro Controlador Propeller Versión en Español 1.1...
Página 2
Si el producto tiene un defecto, Parallax Inc. a su conveniencia reparara o remplazara la mercancía o reembolsara el monto de la compra. Antes de regresar un producto a Parallax se debe llamar a Parallax y obtener un numero de RMA (Autorización de Regreso de Material).
Página 3
ESTIPULACIONES DE REPONSABILIDAD LEGAL Parallax Inc. no se hace responsable por incidentes especiales o daños resultantes de cualquier violación de garantía o cualquier otra teoría legal incluyendo perdidas de ganancias, tiempo perdido, daños o reemplazos de equipo o propiedad, así como cualquier costo de recuperación, reprogramación o reproducción de cualquier dato almacenado en o usado con los productos...
Página 8
Tabla de Contenido Configuración ........................248 Control de Cog......................248 Control de Proceso .......................248 Condiciones ........................248 Control de Flujo......................250 Efectos ..........................250 Acceso de Memoria Principal ..................250 Operaciones Comunes ....................250 Constantes ........................252 Registros ........................253 Operadores Unarios......................253 Operadores Binarios .....................254 ................255 LEMENTOS DE ENGUAJE NSAMBLADOR Definiciones de Sintaxis....................255 códigos Operacionales y sus Tablas ................256...
Gracias por comprar un Chip Propeller. ¡En breve estarás programando en poco tiempo! Los chips Propeller son micro controladores increíblemente capaces; el muy anticipado resultado de ocho años de trabajo y esfuerzos de Chip Gracey y el equipo entero de Parallax Inc.
Página 12
Prefacio Cambios importantes incluyen: TESTN Se agrego una instrucción del Ensamblador Propeller; (ver página 347) Las siguientes secciones se escribieron para clarificar: ADDSX en página 268 ADDX en página 270 CALL en página 274 CMPSX en página 283 CMPX en página 286 JMPRET...
1: Introducción al Chip Propeller Capítulo 1: Introducción al Chip Propeller Este capítulo describe el hardware del chip Propeller. Para entender completamente y usar el Propeller efectivamente es importante entender primero su arquitectura. Este capítulo presenta los detalles del hardware tales como tipos de paquetes, tamaños, descripciones de pins y funciones.
Introducción al Chip Propeller Tipos de Encapsulados El chip Propeller está disponible en los tipos de paquetes mostrados aquí: P8X32A-D40 40-pin DIP P8X32A-Q44 P8X32A-M44 44-pin LQFP 44-pin QFN Pagina 14 · Manual Propeller v1.1...
1: Introducción al Chip Propeller Descripción de Pins Tabla 1-1: Descripciones de Pins Nombre Dirección Descripción Propósito General Puerto A E/S. Puede proporcionar 40 mA a 3.3 VDC. Disparo Lógico es ≈ ½ VDD; 1.65 VDC @ 3.3 VDC. Los pins mostrados tienen un propósito especial al encender o reiniciar P0 –...
Introducción al Chip Propeller Especificaciones Tabla 1-2: Especificaciones Modelo P8X32A Requerimientos de potencia 3.3 volts DC. (Max consumo de corriente debe limitarse a 300 mA). Velocidad de Reloj Externo DC a 80 MHz (4 MHz a 8 MHz con Clock PLL corriendo) Velocidad de Reloj de Sistema DC a 80 MHz 12 MHz o 20 kHz (aproximado;...
1: Introducción al Chip Propeller Conexiones de Hardware La Figura 1-1 muestra un ejemplo del cableado que proporciona acceso al hospedaje y EEPROM que accesa el chip Propeller. En este ejemplo el acceso al hospedaje se logra a través del Propeller Plug (un convertidor serial USB a TTL). Figura 1-1: Ejemplo del diagrama de conexiones que permite programar el Propeller y una EEPROM externa de 32 Kbyte así...
Introducción al Chip Propeller Procedimiento de Inicio Una vez que se enciende (+100 ms), RESn va de bajo-alto o se reinicia el software: 1. El chip Propeller inicia su reloj interno en modo lento (≈ 20 kHz), se retrasa por 50 ms (retraso de reinicio), cambia el reloj a modo rápido (≈...
1: Introducción al Chip Propeller completo sobre cosas como velocidad del reloj interno, uso de E/S, configuración de registros y cuando y cuantos cogs corren en determinado tiempo. Todo esto variable mientras corre ya que es controlado por la aplicación, incluyendo la velocidad del reloj interno. Procedimiento de apagado Cuando el Propeller queda en modo de apagado el reloj interno se detiene y al mismo tiempo detiene los Cogs, así...
Introducción al Chip Propeller Diagrama de Bloques Figura 1-2: Diagrama de Bloques del Chip Propeller Pagina 20 · Manual Propeller v1.1...
Página 21
1: Introducción al Chip Propeller La relación Cog y Hub es crítica para el chip Propeller. El Hub controla al Cog que tiene acceso a los recursos mutuamente exclusivos, tales como RAM/ROM principal, configuración de registros, etc. El Hub le da acceso exclusivo a cada cog en determinado momento de forma “round robin”...
Introducción al Chip Propeller Recursos Compartidos Hay dos tipos de recursos compartidos en el Propeller: 1) Común y 2) Mutuamente exclusivos. Los recursos comunes pueden accesarse en cualquier momento por cualquier número de cogs. Los recursos mutuamente exclusivos pueden accesarse por todos los cogs pero solo por un Cog a la vez.
Página 23
1: Introducción al Chip Propeller desarrollador a entregar tiempos determinados, consumos de potencia y respuesta a la aplicación desarrollada. Cada cog tiene su propia RAM, llamada RAM cog, a cual contiene 512 registros de 32 bits cada uno. La RAM cog es de propósito general excepto los últimos 16 registros, los cuales son de propósito especial como se describe en la Tabla 1-3.
Introducción al Chip Propeller Note 2: Para ensamblador Propeller solo legible como registro fuente (ej., dest, source); leer modificar-escribir no es posible como registro destino. Ver lenguaje ensamblador PHSA, PHSB sección en pag 344. Note 3: Reservado para uso futuro. Cada registro de propósito especial puede accesarse vía: 1) Su dirección física de registro (Ensamblador Propeller), 2) Su nombre predefinido (Spin o Ensamblador Propeller), o...
Página 25
1: Introducción al Chip Propeller Figura 1-3: Interacción Cog-Hub – Mejor escenario La Figura 1-4 muestra el peor escenario; la instrucción del hub estaba lista en el ciclo inmediato posterior después de iniciar la ventana de acceso al Cog 0; perdió el acceso. El Cog espera a la siguiente ventana de acceso al Hub (15 ciclos después) y entonces ejecuta la instrucción (7 ciclos) para un total de 22 ciclos para esa instrucción.
Introducción al Chip Propeller Pins E/S El Propeller tiene 32 pins de E/S, 28 de los cuales son enteramente de propósito general. Cuatro pins E/S (28-31) tienen un propósito especial al inicio y después estan disponibles para propósito general; ver la sección de Procedimiento de Inicio en la pagina 18. Después de iniciar cualquier pin E/S puede usarlo cualquier cog en cualquier momento ya que los pins de E/S son recursos comunes.
Introducción al Chip Propeller Registro CLK El registro CLK es el control de la configuración del reloj del sistema; determina la fuente y las características del reloj del sistema. El Registro CLK configura el oscilador RC, el Reloj PLL, el cristal oscilador y los circuitos selectores de reloj. (Ver Figura 1-2: Diagrama de Bloques del Chip Propeller en Pág.
Página 29
1: Introducción al Chip Propeller Tabla 1-7: PLLENA del Registro CLK (Bit 6) Efecto RCFAST RCSLOW Deshabilita el circuito PLL. Los parámetros de la declaración _CLKMODE configura PLLENA de esta forma. Habilita el circuito PLL. Cada uno de los parámetros PLLxx del la declaración _CLKMODE configura PLLENA de esta forma al momento de compilación.
Introducción al Chip Propeller Tabla 1-10: CLKSELx del Registro CLK (Bits 2:0) CLKSELx _CLKMODE Reloj Fuente Notas Parámetros Maestro Sin partes externas. RCFAST ~12 MHz Interno Rango de 8 MHz a 20 MHz. Baja potencia. Sin partes externas. RCSLOW ~20 kHz Interno Rango de 13 kHz a 33 kHz.
1: Introducción al Chip Propeller 32 KB de RAM principal es de propósito general y es el destino de la aplicación Propeller ya sea descargándolo de un host o subiéndolo de una memoria externa EEPROM de 32 KB. Los 32 KB de ROM principal incluye el código y datos de recursos vitales para las funciones del Propeller: definición de caracteres, Log, Anti-Log y tablas de seno así...
Introducción al Chip Propeller ROM Principal La segunda mitad de la memoria principal es ROM. Este espacio se usa para definición de caracteres, funciones matemáticas, el cargador de inicio y el interprete Spin. Definiciones de Caracteres La primera mitad de la ROM esta dedicada a un set de 256 caracteres. Cada definición de carácter es de 16 pixeles de ancho por 32 pixeles de altura.
Página 33
1: Introducción al Chip Propeller Los pares de caracteres se mezclan renglón por renglón de tal forma que cada 16 pixeles horizontales están espaciados con sus vecinos para que el carácter par tome los bits 0, 2, 4, ...30, y el carácter impar toma los bits 1, 3, 5, ...31. Los pixeles de la izquierda extrema están en los bits mas bajos mientras que los pixeles de la extrema derecha están en los bits mas altos como se muestra en la Figura 1-7.
Introducción al Chip Propeller ® La herramienta Propeller incluye y usa la fuente Parallax True Type la cual sigue los diseños de la fuente Propeller integrada en el hardware. Con esta fuente y la herramienta Propeller usted puede incluir esquemáticos, diagramas de tiempo y otros diagramas justo en el código fuente de la aplicación.
Página 35
1: Introducción al Chip Propeller El interprete spin obtiene y ejecuta la aplicación Propeller desde la RAM principal. Esto puede guiar a iniciar cogs adicionales para correr mas código spin o código ensamblador Propeller según lo requiera la aplicación. Ver Procedimiento , pagina 18.
2: Referencia de Lenguaje Spin Capítulo 2: Referencia del Lenguaje Spin Este capitulo describe todos los elementos del lenguaje Spin del chip Propeller y se puede usar como mejor referencia para elementos individuales de lenguaje Spin. Para un tutorial del uso del lenguaje use el tutorial de Lenguaje Spin de las herramientas en línea y luego regrese a esta parte para mas detalles.
Referencia de Lenguaje Spin Estructura de Objetos/Spin Cada objeto Propeller en un archive Spin que tiene una estructura inherente que consiste en hasta seis bloques diferentes de propósito especial: . Estos bloques se muestran abajo (en el orden que típicamente aparecen en los objetos) junto con el paquete de elementos que se usan en cada uno..
Página 39
2: Referencia de Lenguaje Spin PUB/PRI: Métodos Públicos y Privados definen rutinas Spin Pág. 186/185). ABORT FLOAT Operadores* ROUND p 49 p 111 p 202 p 147 BYTE FRQA OUTA p 54 p 114 p 179 p 204 BYTEFILL FRQB OUTB STRCOMP p 60...
Referencia de Lenguaje Spin Lista Categórica de Lenguaje Spin Propeller Los elementos marcados con un súper script “a” también están disponibles en Ensamblador Propeller. Asignación de Bloques Declara un Bloque Constante; p 87. Declara un Bloque Variable; p 215. Declara un Bloque de Referencia de Objeto; p 145. Declara un Bloque de Método Publico;...
2: Referencia de Lenguaje Spin PLL8X _CLKMODE Constant para : Tiempo de Frecuencia Externa 8; p 71. PLL16X _CLKMODE Constant para : Tiempo de Frecuencia Externa 16; p 71. Control de Cog COGID Identificación de Cog Actual (0-7); p 78. COGNEW Iniciar el Siguiente Cog Disponible;...
Referencia de Lenguaje Spin REPEAT Ejecuta un Bloque de código repetidamente un numero finito o infinito ...FROM con opción a contador opcional, intervalos, salidas y condiciones continuas; p 192..TO ...STEP ...UNTIL ...WHILE NEXT REPEAT Salta el resto de bloque hasta la siguiente instrucción;...
2: Referencia de Lenguaje Spin Instrucciones STRING Declara expresiones cadena; tiempo de compilación; p 209. CONSTANT Declara expresiones constantes; tiempo de compilación; p 94. FLOAT Declara expresiones punto flotante; tiempo de compilación; p 111. ROUND Redondea expresiones de punto flotante a enteros; p 202. TRUNC Abrevia expresiones de punto flotante a decimales;...
Referencia de Lenguaje Spin Constantes TRUE Lógico verdadero: -1 ($FFFFFFFF); p 96. FALSE Lógico Falso: 0 ($00000000) ; p 96. POSX Máximo entero positivo: 2,147,483,647 ($7FFFFFFF); p 96. NEGX Máximo entero negativo: -2,147,483,648 ($80000000); p 96. Valor de punto flotante para PI: ~3.141593 ($40490FDB); p 96. Variable RESULT Variable de resultado predeterminado para métodos...
2: Referencia de Lenguaje Spin Operadores Binarios NOTA: Todos los operadores a la derecha son operadores de asignación. --y-- Transferencia de constantes (Bloque ); p 152. --y-- Transferencia de variable (Bloque ); p 153. --o-- Suma; p 153. --o-- Resta; p 154. --o-- Multiplica y regresa los 32 bits bajos (firmado);...
Referencia de Lenguaje Spin Símbolos sintaxicos %1010 Indicador de número binario, como ; p 211. %%2130 Indicador de numero cuaternario, como ; p 211. $1AF Indicador hexadecimal, como o ensamblador “aquí” ; p 211. " "Hello" Indicador de Cadena ; p 211. Delimitador grupo en valores constantes, o símbolo guión bajo;...
2: Referencia de Lenguaje Spin Elementos de Lenguaje Spin El resto de este capitulo describe los elementos del lenguaje spin, mostrados arriba, en orden alfabético. Algunos elementos se explican con el contexto de otros para mayor claridad; use las páginas de referencia de la lista categórica para ver los comentarios. Muchos elementos están disponibles en spin y ensamblador Propeller.
Referencia de Lenguaje Spin Definiciones Sintaxicas Además de las descripciones detalladas, las siguientes páginas contienen definiciones de sintaxis para elementos y describe en términos cortos las opciones del elemento. Las definiciones de sintaxis usan símbolos especiales para indicar cuando y como se usan. NEGRITAS Negrita mayúsculas deben escribirse como se muestra.
ABORT 2: Referencia de Lenguaje Spin – ABORT Instrucción: Sale de un método abortando con un Valor opcional de regreso. ((PUB PRI)) ABORT Valor Regresa: Ya sea en RESULT actual, o Valor si se proporciona. Valor es una expresión opcional y se regresa cuando se aborta un método Explicación ABORT ABORT...
Página 50
ABORT – Referencia de Lenguaje Spin RETURN o alcanzando el final del método) la pila de llamada disminuirá. A esto se le llama “empujar” a la pila y “jalar” de la pila respectivamente. RETURN La instrucción jala la información mas reciente de la pila de llamada para facilitar el regreso al llamador inmediato;...
Página 51
ABORT 2: Referencia de Lenguaje Spin – MayAbort ABORT RETURN El tipo de salida que usa , no es conocido automáticamente por la RETURN llamada de la trampa; podría suceder para ser el destino de una instrucción . Por lo tanto el código debe escribirse de tal forma que detecte que tipo se utilizo.
Página 52
ABORT – Referencia de Lenguaje Spin PUB DriveMotors(Direction) <código para manejar motores> if MotorStuck abort FALSE 'Si el motor se detiene, abortar <mas código> Main Move El ejemplo de arriba muestra tres métodos de varios niveles lógicos, (“alto nivel”), DriveMotors Main (“nivel medio”) y (“bajo nivel”).
Página 53
ABORT 2: Referencia de Lenguaje Spin –...
BYTE – Referencia de Lenguaje Spin BYTE instrucción: Declara un símbolo de tamaño byte, datos de tamaño alineado a byte, o lecto escritura de un byte en memoria principal. BYTE Symbol [Count] BYTE Symbol Data [Count] ((PUB...
BYTE 2: Referencia de Lenguaje Spin – Rango de Byte La memoria que es tamaño byte (8 bits) puede contener un valor que es una posible combinación de 2 bits (Ej., uno de 256 combinaciones). Esto le da a los valores de byte un rango de 0-255.
BYTE – Referencia de Lenguaje Spin MyData byte 64, $AA, 55 'Byte alineado y datos tamaño byte MyString byte "Hello",0 'Una cadena de bytes (caracteres) MyData MyString Los ejemplos mencionados declaran dos símbolos de datos, . Cada símbolo de datos apunta al inicio del byte alineado y datos de tamaño byte en memoria MyData principal.
BYTE 2: Referencia de Lenguaje Spin – MyStr elemento de seguido inmediatamente a $1B. Note que la dirección de inicio ($18) es arbitraria y puede cambiar según se modifique el código o si el objeto mismo se incluye en otra aplicación. 64 $AA 55 “H”...
Página 58
BYTE – Referencia de Lenguaje Spin Para mayor explicación de como se acomodan los datos en memoria, ver la sección de Declaración de Data(Sintaxis 1) en Pág. 103. Una Referencia de Memoria Alternativa Hay aun otra forma de accesar los datos del código mostrado arriba; usted puede referenciar los símbolos de datos directamente.
Página 59
BYTE 2: Referencia de Lenguaje Spin – WordVar.byte[1] := 100 'Activa el Segundo byte de WordVar a 100 LongVar.byte := 25 'Activa el primer byte de LongVar a 25 LongVar.byte[0] := 25 'Igual que arriba LongVar.byte[1] := 50 'Activa el Segundo byte de LongVar a 50 LongVar.byte[2] := 75 'Activa el tercer byte de LongVar a 75 LongVar.byte[3] := 100...
BYTEFILL – Spin Language Reference BYTEFILL instrucción: Llena los bytes de la memoria principal con un valor. ((PUB PRI)) BYTEFILL (StartAddress, Value, Count ) StartAddress es una expresión indicando la localidad del primer byte de memoria para llenar con un Value. ...
BYTEMOVE 2: Spin Language Reference – BYTEMOVE instrucción: Copia bytes de una región a otra en memoria principal. ((PUB PRI)) BYTEMOVE (DestAddress, SrcAddress, Count ) DestAddress es una expresión especificando la localidad de memoria principal en donde copiar el primer byte de la fuente.. ...
CASE – Referencia de Lenguaje Spin CASE instrucción: Compara una expresión contra otra expresión y ejecuta el bloque si encuentra que ambas expresiones coinciden. ((PUB PRI)) CASE CaseExpression MatchExpression : Statement(s) MatchExpression : Statement(s) ...
Página 63
CASE 2: Referencia de Lenguaje Spin – los indicadores. Presionando Ctrl + I nuevamente deshabilitara esta función. Vea la ayuda de la herramienta Propeller para una lista completa de accesos rápidos. Usando CASE CASE es practico cuando una de muchas acciones necesitan desarrollarse dependiendo del valor de una expresión.
CASE – Referencia de Lenguaje Spin X + Y Existe un importante concepto respecto a este ejemplo. Si es 10 o 15, se activa P0 o si X + Y X + Y es 25, se activa P1, o se es 20 a 30, se activa P2, etc.
CHIPVER 2: Spin Language Reference – CHIPVER instrucción: Obtener el numero de la Versión del chip Propeller . ((PUB PRI)) CHIPVER Regresa: Numero de la versión del chip Propeller. Explicación CHIPVER La instrucción lee y regresa el numero de la versión del chip Propeller. Por ejemplo: V := chipver Este ejemplo activa al numero de la version del chip Propeller, 1 en este caso.
CLKFREQ – Referencia de Lenguaje Spin CLKFREQ instrucción: Frecuencia de reloj del sistema; frecuencia en la que esta corriendo cada cog. ((PUB PRI)) CLKFREQ Regresa: La frecuencia actual del reloj de sistema en Hz. Explicación CLKFREQ El valor de regreso de es la frecuencia actual del reloj de sistema determinada por el modo de reloj actual (tipo oscilador, ganancia y parámetros PLL) y el pin de frecuencia CLKFREQ...
Página 67
CLKFREQ 2: Referencia de Lenguaje Spin – CLKSET CLKFREQ instrucción . Los objetos que son sensitivos al tiempo deberán verificar puntos estratégicos para ajustar a los nuevos parámetros automáticamente. CLKFREQ vs. _CLKFREQ CLKFREQ _CLKFREQ CLKFREQ esta relacionado a, pero no es el mismo que es una instrucción _CLKFREQ que regresa la frecuencia actual del reloj del sistema mientras...
_CLKFREQ – Referencia de Lenguaje Spin _CLKFREQ Constante: Pre-definido, constante activada una vez para especificar la frecuencia del reloj de sistema. _CLKFREQ = expresión expresión es una expresión entera que indica la frecuencia del reloj del sistema al inicio de la aplicación. Explicación _CLKFREQ especifica la frecuencia del reloj del sistema al inicio.
Página 69
_CLKFREQ 2: Referencia de Lenguaje Spin – _CLKMODE = XTAL2 _CLKFREQ = 10_000_000 Estas dos declaraciones activan el modo clock para un cristal externo de media velocidad, no se activa multiplicador Clock PLL, y la frecuencia del reloj del sistema a 10 MHz. El valor de _XINFREQ se activa automáticamente a 10 MHz, también por estas declaraciones.
CLKMODE – Spin Language Reference CLKMODE instrucción: Activación del modo clock actual. ((PUB PRI)) CLKMODE Regresa: Modo clock actual. Explicación La activación del modo clock es un valor de tamaño byte, determinado por la aplicación al tiempo de compilación desde el registro CLK. Ver Registro CLK, Pág. 28, para una explicación de las activaciones posibles.
_CLKMODE 2: Referencia de Lenguaje Spin – _CLKMODE Constante: Una constante de tiempo pre definida ajustable para especificar el nivel de aplicación en los parámetros del modo clock . _CLKMODE = expresión expresión es un expresión entero hecha para uno o dos parámetros de modo de clock constantes mostrados en la Tabla 2-3.
Página 72
_CLKMODE – Referencia de Lenguaje Spin Tabla 2-4: Expresiones Validas de Modo Clock y Valores de Registro CLK expresión Valida Valor de Registro CLK expresión Valida CLK Register Value XTAL1 + PLL1X 0_1_1_01_011 RCFAST 0_0_0_00_000 XTAL1 + PLL2X 0_1_1_01_100 RCSLOW 0_0_0_00_001 XTAL1 + PLL4X 0_1_1_01_101...
Página 73
_CLKMODE 2: Referencia de Lenguaje Spin – multiplicara por 16 (el clock PLL siempre multiplica por 16) pero se usara el bit resultado de 8x; el reloj de sistema deberá ser 4 MHz * 8 = 32 MHz. _CLKMODE = XINPUT + PLL2X Esta instrucción active el modo clock para un oscilador externo conectado a X1 solamente y habilita el circuito clock PLL para activar el reloj del sistema usando el resultado 2x.
CLKSET – Referencia de Lenguaje Spin CLKSET instrucción: Activa ambos modos clock y frecuencia del reloj del sistema en tiempo real. ((PUB PRI)) CLKSET (Mode, Frequency) Mode es una expresión entero que se escribirá al registro CLK para cambiar el modo clock.
Página 75
CLKSET 2: Referencia de Lenguaje Spin – cristal oscilador se deja en el estado actual, sin importar si esta encendido o apagado. Ver el objeto Clock en la librería Propeller para métodos y tiempos de modificación de clock. NOTA: Toma aproximadamente 75 µs al Propeller desarrollar la acción de cambio entre fuentes de reloj.
– Referencia de Lenguaje Spin Registro: Registro Contador del Sistema. ((PUB PRI)) Regresa: El valor actual del contador del sistema 32-bit. Explicación El registro contiene el valor actual en el contador del sistema global de 32 bits. El contador del sistema sirve como referencia central de tiempo para todos los cogs; incrementa su valor de 32 bits cada ciclo del reloj del sistema.
Página 77
2: Referencia de Lenguaje Spin – PUB Toggle | TimeBase, OneMS dira[0]~~ 'Acyiva P0 a salida OneMS := clkfreq / 1000 'Calcula ciclos por 1 milisegundo TimeBase := cnt 'Obtiene el contador actual repeat 'Ciclo sin fin waitcnt(TimeBase += OneMS) 'Espera para iniciar el siguiente milisegundo !outa[0]...
COGID – Spin Language Reference COGID instrucción: Numero de Cog Actual (0-7). ((PUB PRI)) COGID Regresa: El numero actual del cog (0-7). Explicación COGID El valor de regreso de es la identificación del cog que ejecuto el comando. Normalmente el cog actual en el cual esta corriendo el código no importa, sin embargo para algunos objetos puede ser importante mantener el rastreo.
COGINIT 2: Referencia de Lenguaje Spin – COGINIT Instrucción: Inicia o reinicia un Cog por numero para correr Spin o Ensamblador Propeller. ((PUB PRI)) COGINIT (CogID, SpinMethod , StackPointer ) (ParameterList) ((PUB PRI)) COGINIT (CogID, AsmAddress, Parameter ) ...
Página 80
COGINIT – Referencia de Lenguaje Spin del cog en e; espacio especificado de pila antes de iniciar el cog. Reiniciar un cog con una COGINIT instrucción especificando el mismo espacio de pila que esta usando producirá una nueva imagen del marco que golpeara antes de que el cog reinicie. Para evitar que esto suceda COGSTOP COGINIT primero indique un...
COGNEW 2: Referencia de Lenguaje Spin – COGNEW instrucción: Inicia el siguiente cog disponible para correr Spin o Ensamblador Propeller. ((PUB PRI)) COGNEW , StackPointer ) (SpinMethod (ParameterList) ((PUB PRI)) COGNEW (AsmAddress, Parameter ) Regresa: El numero del cog iniciado con éxito (0-7), o -1 si no se inicio. ...
COGNEW – Referencia de Lenguaje Spin código Spin (Sintaxis 1) COGNEW Para correr un método spin en otro cog la instrucción necesita el nombre del método, sus parámetros y un apuntador a un espacio de pila. Por ejemplo: long SqStack[6] 'Espacio de pila para Square cog PUB Main | X X := 2...
Página 83
COGNEW 2: Referencia de Lenguaje Spin – La Necesidad de Espacio de Pila Un cog ejecutando código spin a diferencia de uno ejecutando ensamblador Propeller necesita un espacio temporal llamado espacio de pila para retener datos tales como llamadas de pila, parámetros y resultados intermedios.
Página 84
COGNEW – Referencia de Lenguaje Spin Method se determina para ser código que es verdaderamente importante para correr en otro cog en vez de escribir el código como el ejemplo de arriba, SomeObject deberá reescribirse de la siguiente forma. long StackSpace[8] 'Espacio pila para nuevo cog byte CogID 'Almacena Numero del Nuevo...
Página 85
COGNEW 2: Referencia de Lenguaje Spin – Toggle rdlong Delay, #0 'Obtiene frecuencia de reloj Delay, #2 'Divide en 4 Time, cnt 'Obtiene el tiempo actual Time, Delay 'Ajusta por 1/4 de segundo dira, #1 'Activa pin 0 a salida Loop waitcnt Time, Delay 'Espera 1/4 de segundo...
COGSTOP – Spin Language Reference COGSTOP instrucción: Detiene un cog por su numero. ((PUB PRI)) COGSTOP (CogID ) CogID es el numero (0 – 7) del cog a detener. Explicación COGSTOP detiene un cog de numero CogID y coloca al cog en un estado durmiente. En este estado el cog deja de recibir pulsos del reloj del sistema de tal forma que el consumo de potencia se reduce de manera significante.
– Referencia de Lenguaje Spin Declaraciones Constantes Comunes (Sintaxis 1) La forma mas común de declaraciones constantes comienza con una línea sola seguida por una o mas declaraciones. debe empezar en la columna 1 (la columna de la extrema izquierda) de la línea donde se encuentra y se recomienda que la siguientes líneas se indenten por al menos un espacio.
Página 89
2: Referencia de Lenguaje Spin – diferencia de las constantes enteros. Para especificar una constante de punto flotante se debe dar una clara indicación que el valor es de punto flotante; la expresión puede hacerse de punto flotante sencillo o completamente de punto flotante (no enteros). Los valores de punto flotante deben escribirse como: 1) Dígitos decimales seguidos por punto decimal y al menos un digito decimal mas, 2) Dígitos decimales seguido por “e”...
– Referencia de Lenguaje Spin En operaciones de punto flotante en tiempo real, los objetos FloatMath, FloatString, Float32, y Float32Full ofrecen funciones matemáticas compatibles con números de precisión sencilla. FLOAT ROUND TRUNC en Pág. 111, en Pág. 202, en Pág. 213, y los objetos FloatMath, FloatString, Float32, y Float32Full para mayor información.
Página 91
2: Referencia de Lenguaje Spin – mayoría de los casos, los valores en si no importan; todo lo que importa es que tienen asignado un numero único. Definiendo valores de enumeración de esta forma tiene la ventaja de asegurar que los valores asignados son únicos y contiguos dentro del grupo. Usando el ejemplo de arriba los métodos que usan pueden hacer cosas como lo que sigue Mode (Asumiendo que...
– Referencia de Lenguaje Spin RunTest RunVerbose RunBrief RunFull Aquí, son 1 y 2, respectivamente y son 5 y 6, respectivamente. Mientras esta característica puede ser útil, para mantener buenas practicas de programación deberá usarse solo en casos especiales. Una forma mas recomendada para lograr el mismo resultado que en el ejemplo anterior es incluir campos Offset opcionales.
2: Referencia de Lenguaje Spin – Ejemplo: Num : "Numbers" PUB SomeRoutine Format := Num#DEC 'Activa formato a numero constante decimal Numbers Aquí se declara un objeto, “ ,” como el símbolo . Después un método se refiere a la Num#DEC constante numbers es el objeto referencia,...
CONSTANT – Referencia de Lenguaje Spin CONSTANT Directiva: Declara una expresión constante en línea para resolver en tiempo de compilación. ((PUB PRI)) CONSTANT (ConstantExpression ) Regresa: Valor resuelto de una expresión constante. ConstantExpression es la expresión constante deseada. Explicación El bloque puede usarse para crear constantes desde expresiones que son referenciadas desde diversos lugares en el código, pero hay ocasiones en que la expresión constante se...
Página 95
CONSTANT 2: Referencia de Lenguaje Spin – X = 500 Y = 2500 PUB Blink !outa[0] waitcnt(constant(X+200) + cnt) 'exp c/partes en tiempo real !outa[0] waitcnt(constant((X+Y)/2) + cnt)'exp c/partes en tiempo real Blink Los dos ejemplos de arriba hacen exactamente lo mismo: sus métodos cambian P0, X+200 (X+Y)/2...
Referencia de Lenguaje Spin – Constantes (pre-definidas) Constantes (pre-definidas) Las siguientes constantes son predefinidas por el compilador: TRUE Lógico Verdadero: ($FFFFFFFF) FALSE Lógico Falso: ($00000000) POSX Máximo Entero Positivo: 2,147,483,647 ($7FFFFFFF) NEGX Máximo Entero Negativo: -2,147,483,648 ($80000000) ≈ 3.141593 Valor de punto flotante para PI: ($40490FDB) RCFAST Oscilador Interno Rápido:...
Página 97
2: Referencia de Lenguaje Spin – Constantes (pre-definidas) POSX y NEGX POSX NEGX se usan para propósitos de comparación o como bandera en evento especifico: if Z > NEGX <código a ejecutar si Z no ha alcanzado el negativo mas pequeño >...
CTRA, CTRB – Referencia de Lenguaje Spin CTRA, CTRB Registro: Registros de Control Contador A y Contador B. ((PUB PRI)) CTRA ((PUB PRI)) CTRB Regresa: Valor actual del Registro de Control del Contador A o Contador B, si se usa como una fuente variable.
Página 99
CTRA, CTRB 2: Referencia de Lenguaje Spin – actualización del contador puede ser breve (12.5 ns a 80 MHz), la generación de una señal muy dinámica y su medición es posible. Control de Campos de Registros CTRA CTRB Cada registro contiene cuatro campos mostrados en la tabla.
Página 100
CTRA, CTRB – Referencia de Lenguaje Spin CTRMODE CTRA CTRB El campo CTRMODE de selecciona uno de 32 modos de operación, mostrados en la Tabla 2-7, para el correspondiente Contador A o Contador B. En ensamblador Propeller MOVI el campo CTRMODE puede escribirse junto con PLLDIV, usando la instrucción FRQx PHSx Los modos %00001 a %00011 hacen que la acumulación...
Página 101
CTRA, CTRB 2: Referencia de Lenguaje Spin – Tabla 2-7: Modos Contadores (CTRMODE Valores de Campo) Acumulado APIN BPIN CTRMODE Descripción FRQx PHSx Salida* Salida* %00000 Contador deshabilitado (apagado) 0 (never) 0 (none) 0 (none) %00001 PLL interno (modo de video) 1 (always) %00010 PLL terminación sencilla...
2: Referencia de Lenguaje Spin – Declaración de Data(Sintaxis 1) BYTE WORD LONG Data se declara con una alineación especifica y tamaño ( ) para indicar como debe almacenarse en memoria. La dirección donde se almacenan los datos depende de la estructura del objeto y la aplicación donde se compila ya que los datos se incluyen como parte del código compilado.
– Referencia de Lenguaje Spin Quizá noto que el valor 75000 se especifico en tamaño word. El numero 75000 es $124F8 en hexadecimal, pero como es mayor que un word, solo los datos del word mas bajo ($24F8) se almaceno. Esto resulta en word 6 (bytes 12 y 13) que contienen $F8 y $24, y en word 7 (bytes 14 y 15) que contiene $00 y $00 debido al ajuste a ceros para el siguiente valor alineado long.
Página 105
2: Referencia de Lenguaje Spin – MyData Este ejemplo crea una tabla de datos llamada que consiste en bytes $FF, 25 y %1010. GetData MyData El método publico lee el primer byte de desde memoria principal y lo Temp almacena en su variable local BYTE WORD LONG...
– Referencia de Lenguaje Spin Loop waitcnt Time, Delay 'Espera de segundo outa, #1 'cambia pin #Loop 'regresa ciclo Delay Time Cuando una aplicación Propeller arranca inicialmente solo se ejecuta código Spin. En cualquier tiempo, sin embargo, el código Spin puede escoger iniciar código ensamblador en COGNEW COGINIT un cog por si mismo.
32 pins E/S en el Puerto B; los bits 0 a 31 corresponden de P32 a P63. DIRB NOTA: esta reservado para uso futuro; El Propeller P8X32A no incluye pins E/S del DIRA Puerto B por lo que en adelante solo se discutirá DIRA se usa para activar y obtener el estado actual de la dirección de uno o mas pins E/S del...
DIRA, DIRB – Referencia de Lenguaje Spin del pin de E/S es el “cableado OR” del cog entero. Vea Pins E/S en la Pág. 26 para mas información. Esta configuración puede describirse fácilmente en las siguientes reglas: A. Un pin es solo entrada si un cog no lo activa como salida. B.
Página 109
DIRA, DIRB 2: Referencia de Lenguaje Spin – DIRA Esto active P5 a salida. Todos los demás bits de (y por lo tanto todos los demás pins E/S) se quedan en el estado previo. DIRA El registro soporta una forma especial de expresión llamada expresión de rango, el cual permite afectar un grupo de pins E/S al mismo tiempo sin afectar a otros fuera del rango especificado.
FILE – Referencia de Lenguaje Spin FILE Directiva: Importa un archivo externo como datos. FILE "FileName" FileName es el nombre sin extensión del archivo de datos deseado. Durante la compilación un archivo con este nombre se busca en el tabulador del editor, el directorio de trabajo y el directorio de la librería.
FLOAT 2: Referencia de Lenguaje Spin – FLOAT Directiva: Convierte un entero constante a valor punto flotante en tiempo de compilación. ((CON DAT)) FLOAT (IntegerConstant ) Regresa: Valor resuelto de la expresión entera a numero de punto flotante. IntegerConstant es el entero que se desea convertir para usarse como valor de punto flotante.
Página 112
FLOAT – Referencia de Lenguaje Spin Ratio Aquí, se define como una constante entera y aparece definida como una constante Ratio de punto flotante. Esto ocasiona un error en la línea porque para expresiones constantes de punto flotante cada valor en la expresión debe ser de punto flotante; no se puede mezclar Ratio = 2 / 5.0 enteros con valores de punto flotante como FLOAT...
_FREE 2: Referencia de Lenguaje Spin – _FREE Constante: Pre-definida, constante ajustable de una sola vez para especificar el tamaño de espacio libre en la aplicación. _FREE = expresión expresión es un expresión entera que indica el numero de longs a reservar de espacio libre.
FRQA, FRQB – Referencia de Lenguaje Spin FRQA, FRQB Registro: Registros de frecuencia del contador A y contador B . ((PUB PRI)) FRQA ((PUB PRI)) FRQB Regresa: Valor actual del Registro de Frecuencia del Contador A o Contador B, si se usa como fuente variable.
Página 115
2: Referencia de Lenguaje Spin – instrucción: Prueba condiciones y ejecuta un bloque de código si es valido (lógica positiva). ((PUB PRI)) Condition(s) IfStatement(s) ELSEIF Condition(s) ElseIfStatement(s) … ELSEIFNOT Condition(s) ElseIfNotStatement(s) … ELSE ...
– Referencia de Lenguaje Spin Indentacion es Critica IMPORTANTE: La indentacion es critica. El lenguaje Spin usa la indentacion (de un espacio o mas) de líneas que siguen instrucciones condicionales para determinar si corresponden a la instrucción o no. Para ver estos bloques de código lógicamente agrupados puede presionar Ctrl + I para ver los indicadores de grupos.
Página 117
2: Referencia de Lenguaje Spin – if X > 10 AND X < 100 'Si X es mayor que 10 y menor que 100 Esta instrucción seria verdadera si y solo si es mayor que 10 y es también menor que 100.
Página 118
– Referencia de Lenguaje Spin elseif X == 90 'de lo contrario si X = 90 !outa[1] 'cambia P1 Aquí si es mayor que 100, el Pin 0 de E/S se cambia, de otra forma si es igual a 90, el Pin 1 de E/S se cambia, y si ninguna de esas condiciones es verdad ninguno de los dos P0 y P1 se cambia.
Página 119
2: Referencia de Lenguaje Spin – Hicimos esto abajo: if X > 100 'Si X es mayor que 100 !outa[0] 'cambia P0 elseif X > 50 'de otra forma si X > 50 !outa[2] 'cambia P2 elseif X == 90 'de otra forma si X = 90 <-- ERROR, POR LA CONDICION DE ARRIBA.
Página 120
– Referencia de Lenguaje Spin FALSO ELSEIFNOT ELSEIF . Múltiples condiciones se pueden combinar en una instrucción ELSE sencilla condicional en cualquier orden entre el y el opcional Pagina 120 · Manual Propeller v1.1...
32 pins E/S en puerto B; los bits 0 al 31 corresponden de P32 a P63. NOTA: esta reservado para uso futuro, el Propeller P8X32A no incluye pins de E/S para el Puerto B por lo que solo se considera en la discusión.
Página 123
INA, INB 2: Referencia de Lenguaje Spin – Note que debido a la naturaleza “wired-OR” de los pins E/S no hay conflicto eléctrico entre los cogs, todos ellos pueden accesar lo pins E/S simultáneamente. Depende del desarrollador de la aplicación asegurar que no hay dos cogs que ocasionan conflicto lógico en el mismo pin E/S durante el tiempo de ejecución.
LOCKCLR – Referencia de Lenguaje Spin LOCKCLR instrucción: Limpia el seguro a falso y obtiene su estado previo. ((PUB PRI)) LOCKCLR ( ID ) Regresa: Estado previo de lock ( TRUE FALSE es el ID (0 – 7) del lock para limpiar a falso. Explicación LOCKCLR LOCKNEW...
Página 125
LOCKCLR 2: Referencia de Lenguaje Spin – REPEAT “bloqueado el recurso” y el primer ciclo repeat termina. El segundo ciclo en cada long[Idx LocalData[Idx] método lee o escribe el recurso a través de las instrucciones . La lockclr(SemID) última línea de cada método, , limpia los seguros asociados de los recursos a FALSE , lógicamente desbloqueando o liberando los recursos para que otros los usen.
LOCKNEW – Referencia de Lenguaje Spin LOCKNEW instrucción: Verifica un nuevo seguro y obtiene su ID. ((PUB PRI)) LOCKNEW Regresa: ID (0-7) del seguro que se verificó o -1 si ninguno esta disponible. Explicación LOCKNEW LOCKNEW LOCKRET LOCKSET LOCKCLR es uno de cuatro comandos de seguros ( utilizado para administrar recursos que son definidos por usuario y se consideran mutuamente LOCKNEW exclusivos.
LOCKNEW 2: Referencia de Lenguaje Spin – Usando LOCKNEW Un recurso definido por usuario mutuamente exclusivo debe iniciarse por un cog, entonces el LOCKNEW mismo cog deberá usar para verificar un seguro único en el cual administre ese recurso y pase el ID de ese seguro a cualquier otro cog que lo requiera. Por ejemplo: byte SemID PUB SetupSharedResource <código para activar el recurso compartido definido por usuario>...
Página 128
LOCKNEW – Referencia de Lenguaje Spin LOCKCLR puede ignorarse aqui ya que el cog es el único con el derecho lógico de limpiarlo. Si un recurso no se necesita mas o se convierte en no exclusivo, el seguro asociado LOCKRET(SemID) deberá...
LOCKRET 2: Spin Language Reference – LOCKRET instrucción: Regresa el seguro al grupo de seguros, dejándolo disponible para futuras LOCKNEW requisiciones ((PUB PRI)) LOCKRET ( ID ) es el ID (0 – 7) del seguro a regresar al grupo de seguros. Explicación LOCKRET LOCKNEW...
LOCKSET – Referencia de Lenguaje Spin LOCKSET instrucción: Activa el seguro a verdadero y obtiene su estado previo. ((PUB PRI)) LOCKSET ( ID ) Regresa: Estado previo del seguro ( TRUE FALSE TRUE es el ID (0 – 7) del seguro para activar a Explicación LOCKSET LOCKNEW...
Página 131
LOCKSET 2: Referencia de Lenguaje Spin – LOCKSET FALSE regresa , la condición “until not lockset…” es verdadera lo que significa que REPEAT REPEAT tenemos “locked the resource” y el primer ciclo termina. El segundo ciclo long[Idx] cada método lee o escribe el recurso a través de las instrucciones LocalData[Idx] lockclr(SemID .
LONG – Referencia de Lenguaje Spin LONG Denominador: Declara un símbolo de tamaño long, alineado long o lee/escribe un long en memoria principal. LONG Symbol [Count ] LONG Symbol Data [Count] ((PUB PRI)) ...
LONG 2: Referencia de Lenguaje Spin – esta sujeto a como la computadora y el usuario lo interpreten. En ensamblador Propeller un valor long puede ser tratado con o sin signo. Declaración Variable Long (Sintaxis 1) LONG En bloques la sintaxis 1de se usa para declarar globales, variables simbólicas que son longs o arreglos longs, por ejemplo: long Temp...
Página 134
LONG – Referencia de Lenguaje Spin MyList principal son 640,000 y $0000BB50, respectivamente. usa un bloque especial de LONG sintaxis que cera una alineación byte pero activan tamaño long de datos en memoria MyList principal. Los valores de ’s en memoria principal son $FF995544 y 1,000, MyList respectivamente.
Página 135
LONG 2: Referencia de Lenguaje Spin – MyData MyList dato de se coloca en la dirección $1C, con el primer elemento de seguido inmediatamente en $20. Note que la dirección de inicio ($18) es arbitraria y seguramente cambiara según se modifique el código o si el objeto mismo se incluye en otra aplicación. Long Address —...
Página 136
LONG – Referencia de Lenguaje Spin La memoria principal es finalmente direccionada en términos de bytes sin importar el tamaño del valor que esta accesando; byte, word, o long. Esto tiene ventajas si se piensa como los bytes, words, y longs se relacionan entre si. Pero puede ser problemático cuando se piensa en múltiples piezas de un solo tamaño, como longs.
Página 137
LONG 2: Referencia de Lenguaje Spin – Haciendo referencia nuevamente al ejemplo del código de la Figura 2-2 puede esperar estas MyList dos instrucciones para leer el primero y segundo long de ; $FF995544 y 1000, MyList respectivamente. En vez de leer el primer y segundo "byte” de , $44 y $55, respectivamente.
LONGFILL – Referencia de Lenguaje Spin LONGFILL instrucción: Llena longs de memoria principal con un valor. ((PUB PRI)) LONGFILL (StartAddress, Value, Count ) StartAddress es una expresión indicando la localidad del primer long de memoria a llenar con un Value. ...
LONGMOVE 2: Referencia de Lenguaje Spin – LONGMOVE instrucción: Copia longs de una región a otra en memoria principal. ((PUB PRI)) LONGMOVE (DestAddress, SrcAddress, Count ) DestAddress es una expresión que especifica la localidad de memoria principal para copiar el primer long a la localidad destino. ...
LOOKDOWN, LOOKDOWNZ – Referencia de Lenguaje Spin LOOKDOWN, LOOKDOWNZ instrucción: Obtiene el índice de un valor en una lista. ((PUB PRI)) LOOKDOWN ( Value : ExpressionList ) ((PUB PRI)) LOOKDOWNZ ( Value : ExpressionList ) Regresa: Posición de índice base uno ( LOOKDOWN LOOKDOWNZ ) o una posición de base cero (...
Página 141
LOOKDOWN, LOOKDOWNZ 2: Referencia de Lenguaje Spin – GetIndex LOOKDOWN Value El método es un ejemplo que usa para encontrar y regresa el índice ShowList donde se encontró en ExpressionList, o 0 si no se encontró. El método llama GetIndex repetidamente con diferentes valores e imprime el resultado del índice en un Print display.
LOOKUP, LOOKUPZ – Referencia de Lenguaje Spin LOOKUP, LOOKUPZ Instrucción: Obtiene un valor de una posición índice dentro de una lista. ((PUB PRI)) LOOKUP ( Index : ExpressionList ) ((PUB PRI)) LOOKUPZ ( Index : ExpressionList ) Regresa: El valor de la posición base uno de Index ( LOOKUP ) o posición base cero de Index LOOKUPZ...
Página 143
LOOKUP, LOOKUPZ 2: Referencia de Lenguaje Spin – LOOKUPZ Index se usa entonces la lista es base cero en vez de base uno; un 0 regresa 25, Index de 1 regresa 300, etc. LOOKUP REPEAT Si Index esta fuera de rango se regresa 0. así para , si la instrucción fuera de 0 a 8, en vez de 1 a 7, este ejemplo imprimiría 0, 25, 300, 2510, 163, 17, 8000, 3 y 0 en el...
NEXT – Referencia de Lenguaje Spin NEXT Instrucción: Ignora las instrucciones restantes de un ciclo REPEAT y continua con el siguiente ciclo. ((PUB PRI)) NEXT Explicación NEXT NEXT QUIT REPEAT NEXT es una de dos instrucciones ( ) que afectan el ciclo hace que REPEAT cualquier instrucción en el ciclo...
2: Referencia de Lenguaje Spin – Denominador: Declara un Bloque Objeto Symbol Symbol … [Count] : "ObjectName" [Count] : "ObjectName" Symbol es el nombre deseado para el símbolo objeto. Count es una expresión opcional encerrada en corchetes que indica si es un arreglo de objetos con Count numero de elementos.
– Referencia de Lenguaje Spin Num.ToStr Objeto-Metodo (un punto ‘ ’) y finalmente el nombre del método a llamar. , por ToStr Numbers Term.Str ejemplo, llama al método del objeto publico de llama al método TV_Terminal Num.ToStr del método publico de .
2: Referencia de Lenguaje Spin – Operators Operadores El chip Propeller contiene un poderoso grupo de operadores lógicos y matemáticos. Un subgrupo de estos operadores es soportado por el lenguaje ensamblador Propeller, sin embargo, como el lenguaje Spin tiene un uso para cada forma de operador soportado por el Propeller, esta sección describe cada operador en detalle.
Operators – Referencia de Lenguaje Spin Tabla 2-9: Operadores lógicos y Matemáticos expresión Constante Operador Descripción, Numero de Pagina Asignado Unario Entero Flotante Siempre Asignación de Constante (Bloques CON solo), 152 Siempre Asignación de Variable (Bloques PUB/PRI only), 153 ...
Operators – Referencia de Lenguaje Spin Aquí un ejemplo de operadores de asignación: Count++ ' (Unario) evalua Count + 1 ' y escribe el resultado en Count Data >>= 3 ' (Binario) mueve Data a la derecha 3 bits ' y escribe el resultado en Data Los operadores binarios tienen formas especiales terminan en igual ‘=’...
2: Referencia de Lenguaje Spin – Operators ...es igual a 49; que es, 8 * 4 = 32, 6 / 2 = 3, y 20 + 32 – 3 = 49. Si desea que la expresión se evalúe diferente use paréntesis para encerrar las porciones necesarias de la expresión. Por ejemplo: X = (20 + 8) * 4 –...
Página 152
Operators – Referencia de Lenguaje Spin Las paginas restantes de esta sección explican con mas detalle cada operador lógico y matemático mostrado en la Tabla 2-9 en el mismo orden que se muestra. Asignación Constante ‘ ’ El operador de asignación constante se usa solamente en bloques , para declarar constantes en tiempo de compilación.
Página 153
2: Referencia de Lenguaje Spin – Operators OneHalf Ratio El código de arriba crea tres constantes de punto flotante. es igual a 0.5, Miles Ratio igual a 0.4 y es igual a 1,000,000. Note que si fuera definido como 2 / 5 en vez de 2.0 / 5.0, la expresión se trataría como entero constante y el resultado seria un entero constante igual a 0.
Operators – Referencia de Lenguaje Spin Add tiene una forma de asignación, , que usa la variable a su izquierda tanto en el primer operando como en el resultado destino. Por ejemplo: X += 10 'forma corta de X := X + 10 Aquí...
Página 155
2: Referencia de Lenguaje Spin – Operators Esto negara el valor de y almacenara el resultado de regreso en Decremento, pre- o post- ‘ ’ El operador decremento es un operador inmediato especial que decrementa una variable en uno y asigna el nuevo valor a la misma variable. Puede usarse en expresiones variables en tiempo de ejecución.
Página 156
Operators – Referencia de Lenguaje Spin Incremento, pre- o post- ‘ ’ El operador de incremento es un operador inmediato especial que incrementa una variable en uno y asigna el nuevo valor a la misma variable. Solo puede usarse en tiempo de ejecución en expresiones variables.
Página 157
2: Referencia de Lenguaje Spin – Operators Multiplica, Regresa Bajo ‘ ’, ‘ ’ Este operador también se llama multiplicador bajo, o simplemente multiplicador. Puede usarse en expresiones variables y constantes. Cuando se usa en expresiones variables o constantes enteras multiplica dos valores juntos y regresa los 32 bits mas bajos del resultado de 64-bit.
Página 158
Operators – Referencia de Lenguaje Spin Divide ‘ ’, ‘ ’ Divide puede usarse en expresiones constantes y variables. Cuando se usa en expresiones variables o expresiones enteras constantes divide un valor por otro y regresa el resultado en entero 32-bit. Cuando se usa como punto flotante en expresiones constantes divide un valor por otro y regresa el resultado en punto flotante de precisión simple en 32-bit.
Página 159
2: Referencia de Lenguaje Spin – Operators Limite mínimo ‘ ’, ‘ ’ #> #>= El operador Limit Minimum compara dos valores y regresa el valor mas alto. Limit Minimum puede usarse en expresiones variables y constantes. Ejemplo: X := Y - 5 #> 100 El ejemplo de arriba resta 5 de y limita el resultado a un valor de 100.
Operators – Referencia de Lenguaje Spin Raíz Cuadrada ‘ ’ El operador Square Root regresa el valor de la raíz cuadrada de un valor. Square Root puede usarse en expresiones constantes variables. Cuando se usa en expresiones variables o expresiones constante enteras Square Root regresa los 32-bit cortadas del resultado entero. Cuando se usa con expresiones constantes de punto flotante Square Root regresa los 32-bit en punto flotante de precisión simple.
Página 161
2: Referencia de Lenguaje Spin – Operators Y := ~X + 25 El operador Sign-Extend 7 en este ejemplo extiende el signo del valor, en este caso, del bit 7 hasta el bit 31. Un entero con signo de 32-bit se almacena en forma de complementos de dos y el bit mas significativo (31) indica el signo del valor (positivo o negativo).
Página 162
Operators – Referencia de Lenguaje Spin cálculos son simples el resultado en un valor tamaño Word deberá tratarse como entero signado en el rango de -32768 to +32767. Cuando necesita desarrollar mas cálculos con esos valores de tamaño word use el operador Sign-Extend 15 para convertir el numero en la forma apropiada entera de 32-bit con signo.
Página 163
2: Referencia de Lenguaje Spin – Operators Aquí el valor de se mueve a la derecha 2 bits, manteniendo el signo, y el resultado se almacena de regreso en . La forma de asignación del corrimiento aritmético a la derecha puede usarse en expresiones para resultados de Asignaciones Intermedias, Pág.
Página 164
Operators – Referencia de Lenguaje Spin Como Random es siempre un operador de asignación las reglas de Asignación Intermedia aplican a la instrucción (ver Pág. 151). Bitwise Decode ‘ ’ |< El operador Bitwise Decode decodifica un valor (0 – 31) en un valor long de 32-bit con un bit simple activado en alto correspondiente a la posición del bit del valor original.
Página 165
2: Referencia de Lenguaje Spin – Operators PinNum es %10000000 00000000 00000000 00000000, es 32; el bit 31 es activo. PinNum es %00000000 00010011 00010010 00100000, es 21; el bit 20 es el bit mas alto activo. Bitwise Shift Left ‘ ’, ‘...
Página 166
Operators – Referencia de Lenguaje Spin %10000000 01110000 11111111 00110101 ...el operador Bitwise Shift Right moverá ese valor a la derecha tres bits dejando %00010000 00001110 00011111 11100110 Como la naturaleza binaria es base-2, al mover un valor a la derecha es como desarrollar una división de enteros del valor en potencias de dos, 2 , donde b es el numero de bits a mover.
Página 167
2: Referencia de Lenguaje Spin – Operators Bitwise Rotate Right ‘ ’, ‘ ’ -> ->= El operador Bitwise Rotate Right es similar al operador Bitwise Shift Right, excepto que los LSBs (bits de la extrema derecha) se rotan con los MSBs (bits de la extrema izquierda). Bitwise Rotate Right puede usarse en ambas expresiones variables y constantes enteras, pero no en expresiones constantes de punto flotante.
Operators – Referencia de Lenguaje Spin ><= Bitwise Reverse tiene una forma de asignación, , que usa la variable a su izquierda tanto en el primer operando como en el resultado destino. Por ejemplo, X ><= 8 'Forma corta de X := X >< 8 Aquí...
2: Referencia de Lenguaje Spin – Operators & Tenga cuidado de no confundir el Bitwise AND ‘ ’ con la forma booleanas AND ‘ ’. Bitwise AND es para manipulación de bits mientras que la forma booleanas es para propósitos de comparación (ver Pág. 171). Bitwise OR ‘...
Página 170
Operators – Referencia de Lenguaje Spin Tabla 2-13: Bitwise XOR Tabla de Verdad Estado de Bit Resultado Ejemplo: X := %00101100 ^ %00001111 El ejemplo anterior calcula el XOR de %00101100 con %00001111 y escribe el resultado %00100011 a El Bitwise XOR tiene una forma de asignación, , que usa la variable a su izquierda en el primer operando y el resultado destino.
2: Referencia de Lenguaje Spin – Operators %00101100 %11010011 El ejemplo anterior hace NOT y escribe el resultado a X. El Bitwise NOT se convierte en operador de asignación cuando esta solo a la izquierda de la variable en una línea. Por ejemplo: !Flag Flag Flag...
Página 172
Operators – Referencia de Lenguaje Spin & tenga cuidado de no confundir el Boleano AND ‘ ’ con el Bitwise AND ‘ ’. El Booleano AND es para propósitos de comparación mientras el Bitwise AND es para manipulación de bits (ver Pág. 168). Booleano OR ‘...
Página 173
2: Referencia de Lenguaje Spin – Operators TRUE FALSE En el ejemplo anterior se regresa el booleano opuesto de (-1) si es cero, o es no-cero. Durante la comparación se forza el valor de a -1 si es no-cero, haciendo cualquier valor diferente de 0 un -1, de esta forma se compara: “Si NOT es verdad”...
Página 174
Operators – Referencia de Lenguaje Spin TRUE Aquí se compara con , y si son iguales, se activa a (-1), de otra forma se activa FALSE (0). La forma de asignación de Is Equal puede usarse para expresiones de resultados intermedios;...
2: Referencia de Lenguaje Spin – Operators IF (Y < 32) TRUE Aquí el operador Is Less Than regresa es menor que 32. <= Is Less Than tiene su forma de asignación, , que usa la variable a la izquierda del primer operando y el resultado destino.
Página 176
Operators – Referencia de Lenguaje Spin X := Y =< Z TRUE El ejemplo anterior compara el valor de con el valor de y activa (-1) si es igual FALSE a o menor que el valor de (0) si es mayor que el valor de Este operador se usa normalmente en expresiones condicionales tales como la que se ve en el siguiente ejemplo: IF (Y =<...
Página 177
2: Referencia de Lenguaje Spin – Operators TRUE Aquí, se compara con , y si es igual o mayor que se activa como (-1), de otra FALSE forma se activa (0). La forma de asignación de Is Equal or Greater puede ser usada en expresiones para resultados intermedios;...
Página 178
Operators – Referencia de Lenguaje Spin @Str1 @Str2 En tiempo de ejecución podemos accesar esas cadenas directamente, usando @Str3 , pero accesarlas indirectamente es problemático porque cada cadena es de una longitud diferente; haciendo difícil de usar cualquiera como cálculos de base indirecta. La solución podría parecer simplemente haciendo otra tabla de direcciones como en:: StrAddr word @Str1, @Str2, @Str3 StrAddr...
Puerto B; los bits 0 a 31 corresponden de P32 a P63. OUTB NOTA: esta reservado para uso futuro; el Propeller P8X32A no incluye los pins del OUTA Puerto B así que solo se discutirá en esta sección.
OUTA, OUTB – Referencia de Lenguaje Spin Observe que cada estado de salida del cog esta formado por el OR de los estados del hardware interno (Registro de salida, Generador de Video, etc.) y estos está en AND con su dirección del estado del registro Un pin E/S tiene como salida alto o bajo, como se especifica en el estado de salida del cog si DIRA...
OUTA, OUTB 2: Referencia de Lenguaje Spin – La primera línea en el código de arriba active el pin 10 a salida. La segunda línea limpia la salida de P10, haciendo P10 salida baja (aterrizada). La tercera línea activa P10 como salida alta(VDD).
– Referencia de Lenguaje Spin Registro: Registro de parámetro de Inicio de Cog ((PUB PRI)) Regresa: La dirección que pasa en el inicio de código ensamblador con COGINIT COGNEW Explicación El registro contiene el valor de la dirección que se paso al campo Parameter de una COGINIT COGNEW COGINIT...
Página 183
2: Referencia de Lenguaje Spin – wrlong ValReg, Mem 'Mueve valor ValReg para compartir jmp #:loop res 1 ValReg res 1 Main Process En el ejemplo anterior el método inicia la rutina ensamblador en un cog Nuevo COGNEW COGNEW Main .
PHSA, PHSB – Spin Language Reference PHSA, PHSB Registro: Registros de Fase Contador A y Contador B ((PUB PRI)) PHSA ((PUB PRI)) PHSB Regresa: Valor actual del registro de fase del contador A y B, si se usa como una fuente variable.
2: Spin Language Reference – Denominador: Declara un Bloque de método Privado ((PUB PRI)) Name , Param…) | LocalVar … (Param :RValue [Count] ,LocalVar [Count] SourceCodeStatements Name es el nombre deseado para el método Privado. ...
– Referencia de Lenguaje Spin Denominador: Declara un Bloque de método Publico ((PUB PRI)) Name …) | LocalVar … (Param ,Param :RValue [Count ] ,LocalVar [Count ] SourceCodeStatements ...
Página 187
2: Referencia de Lenguaje Spin – Declaración de método Publico Las declaraciones de método Publico comienzan con , en la columna 1 de una línea, seguidas de un nombre único y un grupo de parámetros opcionales, un resultado variable y variables locales.
Página 188
– Referencia de Lenguaje Spin Parámetros y Variables Locales Los parámetros y variables locales son longs (cuatro bits). De hecho los parámetros son realmente solo variables que se inicializan a los valores correspondientes especificados por el llamador del método. Las variables locales, sin embargo, contienen datos aleatorios cada que se llama al método.
2: Referencia de Lenguaje Spin – Al pasar un valor por referencia el operador Symbol Address se usa comúnmente cuando se proporciona una cadena variable a un método. Como las cadenas variables son solo arreglos de bytes no hay forma de pasarlos al método por valor; hacerlo resultaría en el método recibiendo solo el primer carácter.
QUIT – Referencia de Lenguaje Spin QUIT instrucción: Sale de un ciclo REPEAT inmediatamente. ((PUB PRI)) QUIT Explicación QUIT NEXT QUIT REPEAT QUIT es uno de dos comandos ( ) que afectan el ciclo ocasiona que un REPEAT ciclo termine inmediatamente. Usando QUIT QUIT se usa típicamente como un caso excepcional, en una instrucción condicional, en los...
REBOOT 2: Referencia de Lenguaje Spin – REBOOT instrucción: Reinicia el chip propeller. ((PUB PRI)) REBOOT Explicación Este es un reinicio controlado por software, pero actúa como reinicio de hardware a través del pin E/S. REBOOT si quiere reiniciar el chip Propeller a su estado inicial. Toda la base de hardware, encendido, arranque, retrasos así...
REPEAT 2: Referencia de Lenguaje Spin – Condition(s) una o mas expresiones Booleanas usadas en sintaxis 3 y 4 para continuar UNTIL o terminar ciclos. Cuando precede , Condition(s) termina el ciclo cuando es WHILE FALSE verdadero. Cuando precede , Conditions(s) termina el ciclo cuando es Explicación REPEAT...
Página 194
REPEAT – Referencia de Lenguaje Spin Ciclos Simples Finitos (Sintaxis 1) La mayoría de los ciclos son finitos por naturaleza; ejecutan un numero limitado de iteraciones solamente. La forma mas sencilla en la sintaxis 1 con el campo Count incluido. Por ejemplo: repeat 10 'Repite 10 veces...
REPEAT 2: Referencia de Lenguaje Spin – Index byte[$7000][Index]++ como un Offset para afectar memoria, ; en este caso esta incrementando cada uno de los valores bytes en RAM $7000 a $7009 por 1, uno a la vez. REPEAT La instrucción automáticamente determina si el rango sugerido por Start y Finish esta incrementando o decrementando.
Página 196
REPEAT – Referencia de Lenguaje Spin de Start y Finish. El siguiente ejemplo incluye el valor opcional Delta para incrementar de dos en dos. repeat Index from 0 to 8 step 2 'Repite 5 veces byte[$7000][Index]++ 'Incrementa en par RAM de $7000 a $7008 REPEAT Index...
Página 197
REPEAT 2: Referencia de Lenguaje Spin – 'Incrementa X Este ejemplo primero activa a 0, luego repite el ciclo mientras es menor que 10. El código dentro del ciclo limpia RAM basado en (empezando en la localidad $7000) e incrementa .
RESULT – Referencia de Lenguaje Spin RESULT Variable: El valor de regreso variable para métodos. ((PUB PRI)) RESULT Explicación RESULT RESULT La variable es una variable local pre-definida para cada método contiene el valor de regreso del método; el valor que se pasa de regreso al llamador del método, cuando el método se termina.
Página 199
RESULT 2: Referencia de Lenguaje Spin – result := … podría usar también “ ” para activar el valor de regreso ya que cualquier instrucción afecta el valor de regreso del método. RESULT Ya sea la variable o el alias proporcionado para el, puede modificarse múltiples veces RESULT RESULT con el método antes de salir ya que ambos afectan...
RETURN – Referencia de Lenguaje Spin RETURN instrucción: Sale de un método con la opción de un regreso Value. ((PUB PRI)) RETURN Value Regresa: Ya sea el valor actual RESULT , o Value si se proporciona. Value es una expresión opcional cuyo valor se regresara desde el método Explicación RETURN...
Página 201
RETURN 2: Referencia de Lenguaje Spin – Usando RETURN RETURN DisplayDivByZeroError El siguiente ejemplo demuestra dos usos de . Asuma que un método definido en otra parte. PUB Add(Num1, Num2) Result := Num1 + Num2 'Suma Num1 + Num2 return PUB Divide(Dividend, Divisor) if Divisor == 0 'Verifica si Divisor = 0...
ROUND – Referencia de Lenguaje Spin ROUND instrucción: Redondea una constante de punto flotante al entero mas cercano. ((CON DAT)) ROUND ( FloatConstant ) Regresa: El entero mas cercano al valor de la constante de punto flotante. FloatConstant es la expresión constante de punto flotante a ser redondeada al entero mas cercano.
Página 203
ROUND 2: Referencia de Lenguaje Spin – simple se almacenan en 32 bits, con 1-bit de signo, 8-bit exponentes, y 23-bit mantisa (la parte fraccional). Esto proporciona aproximadamente 7.2 dígitos decimales significativos. Expresiones constantes de punto flotante pueden definirse y usarse para múltiples propósitos en tiempo de compilación, pero para tiempo de ejecución en operaciones de punto flotante los objetos FloatMath y FloatString proporcionan funciones matemáticas compatibles con números de precisión simple.
– Referencia de Lenguaje Spin Registro: Registro de Propósito Especial Arreglo, proporciona acceso indirecto a los registros especiales del cog. ((PUB PRI)) [Index] Regresa: Valor en el registro de propósito especial en Index. Index es una expresión que especifica el Index (0-15) del registro de propósito VSCL especial a accesar ( Explicación...
Página 205
2: Referencia de Lenguaje Spin – Usando SPR puede usarse como cualquier arreglo de tamaño long. El siguiente ejemplo asume que Temp es una variable definida en otro lado: spr[4] := %11001010 'Activa registro outa Temp := spr[2] 'Obtiene valor ina OUTA Temp Este ejemplo activa el registro...
_STACK – Spin Language Reference _STACK Constante: Pre-definida, constante activable una sola vez para especificar el tamaño de un espacio de pila de una aplicación. _STACK = expresión expresión es una expresión entera que indica el numero de longs a reservar por el espacio de pila.
STRCOMP 2: Referencia de Lenguaje Spin – STRCOMP instrucción: Compara dos cadenas por igualdad. ((PUB PRI)) STRCOMP (StringAddress1, StringAddress2 ) Regresa: TRUE FALSE si ambas cadenas son iguales, de lo contrario regresa StringAddress1 es una expresión especificando la dirección de inicio de la primer cadena a comparar.
Página 208
STRCOMP – Referencia de Lenguaje Spin Cadenas Cero-Terminadas STRCOMP La instrucción requiere que las cadenas a comparar sean cero-terminadas; un byte igual a 0 debe seguir inmediatamente a cada cadena. Esta practica es común y recomendada ya que la mayoría de los métodos de manejo de cadenas se soportan en terminaciones cero. Pagina 208 ·...
STRING 2: Spin Language Reference – STRING Instrucción: Declara una cadena constante en línea y obtiene su dirección. ((PUB PRI)) STRING (StringExpression ) Regresa: Dirección de la cadena constante en línea StringExpression es la expresión de cadena deseada a ser usada para propósitos temporales in línea.
STRSIZE – Spin Language Reference STRSIZE instrucción: Obtiene el tamaño de una cadena ((PUB PRI)) STRSIZE ( StringAddress ) Regresa: Tamaño (en bytes) de una cadena cero-terminada. StringAddress es una expresión especificando la dirección de inicio de la cadena a medir.
2: Referencia de Lenguaje Spin – Symbols Símbolos Los símbolos en la Tabla 2-16 sirven uno o mas propósitos especiales en código Spin. Para símbolos ensamblador Propeller vea Símbolos, Pág. 375. Cada propósito se describe brevemente con referencias a otras secciones que lo describen directo o usa ejemplos. Tabla 2-16: Símbolos símbolo Propósito(s) Indicador Binario.
Symbols – Referencia de Lenguaje Spin CASE Indicador de rango: Indica un rango de una expresión a otra para instrucciones OUTA, OUTB INA, INB o un índice de registro E/S. Ver en Pág. 179, en Pág. 122, y DIRA, DIRB en Pág.
TRUNC 2: Referencia de Lenguaje Spin – TRUNC Instrucción: Remueve o “acorta” la parte fraccional de una constante de punto flotante. ((CON DAT)) TRUNC ( FloatConstant ) Regresa: Un entero dado por una constante de punto flotante acortando al punto decimal. ...
Página 214
TRUNC – Referencia de Lenguaje Spin FLOAT ROUND Asignación Constante ‘=’ en la sección Operadores en Pág. 152, en Pág. 111, y en Pág. 202, así como los objetos FloatMath y FloatString para mayor información. Pagina 214 · Manual Propeller v1.1...
– Referencia de Lenguaje Spin PUB SomeMethod Code := 60000 LargeNumber := Code * 250 GetString(@Str) if Str[0] == "A" <more code here> Code y LargeNumber Observe que son usadas directamente por expresiones. La Referencia GetString en la lista del parámetro del método se ve diferente;...
2: Referencia de Lenguaje Spin – Organización de Variables Durante la compilación de un objeto todas las declaraciones en sus bloques colectivos agrupan juntas por tipo. Las variables en RAM se acomodan con todos los long primero, seguidos por los Word y finalmente los bytes. Esto se hace para que el espacio de RAM se acomode eficientemente sin necesidad de espacios.
VCFG – Referencia de Lenguaje Spin VCFG Registro: Registro de configuración de Video ((PUB PRI)) VCFG Regresa: Valor actual del registro de Configuración de Video, si usa una fuente variable. Explicación VCFG VCFG VSCL es uno de dos registros ( ) que afecta el comportamiento del generador de Video del Cog.
Página 219
VCFG 2: Referencia de Lenguaje Spin – CMode El campo CMode (modo color) selecciona dos o cuatro modos de color. 0 = modo color dos; datos de píxel 32 bits por 1 bit y solo usa colores 0 o 1. 1 = modo de color cuatro; datos de píxel 16 bits por 2 bits y usa colores de 0 a 3.
Página 220
VCFG – Referencia de Lenguaje Spin VGroup El campo VGroup (grupo de pin de salida de video) selecciona en cual grupo de ocho pins E/S poner la salida de video. Tabla 2-20: El Campo VGroup VGroup Grupo de Pins Grupo 0: P7..P0 Grupo 1: P15..P8 Grupo 2: P23..P16 Grupo 3: P31..P24...
VSCL 2: Referencia de Lenguaje Spin – VSCL Registro: Registro de Escala de Video ((PUB PRI)) VSCL Regresa: Valor actual del registro de la escala de video del cog, si usa una fuente variable. Explicación VSCL VCFG VSCL es uno de dos registros ( ) que afecta el comportamiento del generador de video del cog.
Página 222
VCSL – Referencia de Lenguaje Spin Esto activa el registro de la escala de video para 160 PixelClocks y 2,560 FrameClocks (en una configuración 16-pixeles por 2-bit cuadro color). Por supuesto el rango actual al cual los ciclos de pixeles dependen de la frecuencia del PLLA en combinación con este factor. Pagina 222 ·...
WAITCNT 2: Referencia de Lenguaje Spin – WAITCNT instrucción: Detiene la ejecución de un cog momentáneamente. ((PUB PRI)) WAITCNT ( Value ) Value es el valor del contador del sistema 32-bits que se desea esperar. Explicación WAITCNT WAITCNT , “Wait for System Counter,” es uno de cuatro instrucciones de espera ( WAITPEQ WAITPNE WAITVID...
Página 224
WAITCNT – Referencia de Lenguaje Spin Este código cambia el estado del pin E/S pin 0 y espera 50,000 ciclos de reloj de sistema antes de repetir el ciclo nuevamente. Recuerde que el parámetro Value debe ser el valor deseado de 32-bit a igualar contra el valor del valor del Reloj del Sistema. Como el reloj del sistema es un recurso global que cambia cada ciclo de reloj, para retrasar por un cierto numero de ciclos desde "ahora"...
WAITCNT 2: Referencia de Lenguaje Spin – Figura 2-3: Tiempo en Pausa Fija La Figura 2-3 muestra la salida de nuestro ejemplo anterior, el ejemplo de pausa fija. Observe como el P0 de los pins E/S cambia cada 10 milisegundos, pero ¿no exactamente? De hecho hay un error acumulativo que se hace sucesivo al estado de los cambios y se va quedando fuera d sincronía en relación a nuestro inicio, 0 ms.
Página 226
WAITCNT – Referencia de Lenguaje Spin la base de tiempo. Este método compensa automáticamente el tiempo extra que consumen las repeat waitcnt instrucciones del ciclo: , !outa[0] y . El resultado se ve como en la Figura 2-4. Figura 2-4: Pausa Sincronizada de Tiempo Usando el método sincronizado de pausa, nuestra señal de salida esta siempre alineada perfectamente al tiempo base mas un múltiplo de nuestro intervalo.
WAITPEQ 2: Referencia de Lenguaje Spin – WAITPEQ instrucción: Detiene la ejecución de un cog hasta que el pin E/S es igual a un estado dado. ((PUB PRI)) WAITPEQ (State, Mask, Port ) State es el estado lógico de los pins para comparar. Es un valor de 32-bits que indica el estado alto o bajo de hasta 32 pins E/S.
Página 228
WAITPEQ – Referencia de Lenguaje Spin Usando Diferentes números de Pin En los Objetos Propeller es necesario frecuentemente monitorear un pin sencillo el cual esta especificado fuera del objeto mismo. Una forma sencilla d trasladar ese numero de pin al |<...
WAITPNE 2: Referencia de Lenguaje Spin – WAITPNE instrucción: Detiene la ejecución del cog hasta que un pin E/S no es igual al estado designado. ((PUB PRI)) WAITPNE (State, Mask, Port ) State es el estado lógico a usar para comparar los pins. Es un valor de 32 bits que indica el estado alo o bajo de hasta 32 pins E/S.
WAITVID – Referencia de Lenguaje Spin WAITVID instrucción: Detiene la ejecución de un cog hasta que el generador de video esta disponible para tomar datos de pixeles. ((PUB PRI)) WAITVID (Colors, Pixels ) colores es un long que contiene valores de color de cuatro bytes, cada uno describe los cuatro posibles colores del patrón de pixeles en Pixels.
Página 231
WAITVID 2: Referencia de Lenguaje Spin – Pixels se usa como patrón de pixeles 16x2 bits) o como uno de dos posibles colores por pixeles de 1 bit (cuando Pixels se usa a 32x1). Pixels describe el patrón de pixeles a desplegar, ya sea 16 pixeles o 32 pixeles dependiendo de la profundidad de color en la configuración del generador de video.
WORD – Referencia de Lenguaje Spin WORD Asignador: Declara un símbolo de tamaño word, datos alineados word, o lee/escribe word de memoria principal. WORD Symbol [Count ] WORD Symbol Data [Count] ((PUB PRI)) ...
WORD 2: Referencia de Lenguaje Spin – Rango de Word La memoria de tamaño word (16 bits) puede contener un valor que es una de 2 combinaciones posibles de bits (ejemplo: una de 65,536). Esto le da a los valores de tamaño word un rango de 65,535.
WORD – Referencia de Lenguaje Spin Declaración de Datos Word (Sintaxis 2) WORD En los bloques la sintaxis 2 de se usa para declarar datos alineados word o tamaño word que se compilan como valores constantes en memoria principal. Los bloques permiten esta declaración para tener un símbolo opcional que lo preceda, el cual puede usarse para referencia posterior.
Página 235
WORD 2: Referencia de Lenguaje Spin – MyData word 640, $AAAA, 5_500 'Dato alineado/tamaño Word MyList byte word $FF99, word 1_000 'Tamaño Byte/Alineado Word En este ejemplo el bloque (parte baja del código) coloca sus datos de memoria como MyData muestra la Figura 2-5.
WORD – Referencia de Lenguaje Spin Temp El valor $ABCD se derivo del valor actual de más $0123; $AAAA + $0123 que es igual a $ABCD. Direccionado Memoria Principal Como sugiere la Figura 2-5, la memoria principal es realmente un set de bytes seguidos (ver renglón “dato como bytes”) que pueden leerse como words (pares de 2 bytes) cuando se hace apropiadamente.
Página 237
WORD 2: Referencia de Lenguaje Spin – Temp := MyData[0] MyData ...y estas instrucciones leen la segunda y tercer words de Temp := MyData[1] Temp := MyData[2] así que ¿por que no utilizar referencia de símbolos directos todo el tiempo? Considere el siguiente caso: Temp := MyList[0] Temp := MyList[1]...
WORD – Referencia de Lenguaje Spin Este ejemplo lee mas allá de las fronteras lógicas (punto de inicio y punto final) de la lista de datos que referencian. Esto puede ser un truco útil, pero con mayor frecuencia se hace por error;...
WORDFILL 2: Referencia de Lenguaje Spin – WORDFILL instrucción: Llena words de memoria principal con un valor. ((PUB PRI)) WORDFILL (StartAddress, Value, Count ) StartAddress es una expresión indicando la localidad del primer word de memoria a llenar con Value. ...
WORDMOVE – Referencia de Lenguaje Spin WORDMOVE instrucción: Copia words de una región a otra en memoria principal. ((PUB PRI)) WORDMOVE (DestAddress, SrcAddress, Count ) DestAddress es una expresión que indica la localidad de memoria principal del primer Word destino. ...
_XINFREQ 2: Referencia de Lenguaje Spin – _XINFREQ Constante: Constante pre-definida, una vez activable que especifica la frecuencia del cristal externo. _XINFREQ = expresión expresión es una expresión entera que indica la frecuencia del cristal externo, la frecuencia en el pin XI. Este valor se usa para la aplicación de arranque. Explicación _XINFREQ especifica la frecuencia del cristal externo, el cual se usa junto con el modo clock...
_XINFREQ – Referencia de Lenguaje Spin _CLKMODE = XTAL2 _XINFREQ = 10_000_000 Estas dos declaraciones activan el modo clock para un cristal externo de velocidad media sin _CLKFREQ multiplicador PLL y un cristal de frecuencia 10 MHz. El valor y por lo tanto la frecuencia del reloj del sistema se activan automáticamente a 10 MHz también, debido a estas declaraciones.
3: Referencia del Lenguaje Ensamblador Capítulo 3: Referencia Lenguaje Ensamblador Este capitulo describe todos los elementos del Lenguaje Ensamblador del chip Propeller y se usa como una referencia a elementos individuales del lenguaje ensamblador. Muchas instrucciones tienen su correspondiente instrucción Spin así que una referencia al lenguaje spin se recomienda igualmente.
Página 244
Referencia del Lenguaje Ensamblador Main Aquí hay un ejemplo de un Objeto Propeller. Su código spin en el bloque , inicia Toggle otro cog para correr la rutina del Ensamblador Propeller del bloque {{ AssemblyToggle.spin }} _clkmode = xtal1 + pll16x _xinfreq = 5_000_000 PUB Main {Inicia cog para cambiar P16 sin fin}...
3: Referencia del Lenguaje Ensamblador LONG datos simbólicos (Ej.: ), 3) memoria reservada simbólica ( Ej. ). Esto hace que el cog cargue el lenguaje ensamblador primero, seguido inmediatamente de datos inicializados y datos de aplicación después, aun si no es requerido por el código. Ver las secciones que hablan de (Pág.
Referencia del Lenguaje Ensamblador add X, #25 'Suma 25 a X add X, Y 'Suma Y a X X long 50 Y long 10 La primera instrucción suma el valor literal 25 al valor almacenado en el registro . La segunda instrucción suma el valor almacenado en el registro al valor almacenado en el registro...
3: Referencia del Lenguaje Ensamblador Etiquetas Globales y Locales Para dar nombre a rutinas especiales, el código Ensamblador Propeller puede hacer uso de dos tipos de etiquetas: Global y local. Las etiquetas globales se ven como otros símbolos y siguen las mismas reglas que los símbolos;...
Referencia del Lenguaje Ensamblador Lista Categórica de Lenguaje Ensamblador Propeller Instrucciones Ajusta en tiempo de compilación la dirección del apuntador; p 338. Valida que la instrucción o datos previos se ajustan al cog; p 299. Reserva los siguientes longs para símbolos; p 351. Configuración CLKSET Activa el modo clock a tiempo d ejecución;...
Página 249
3: Referencia del Lenguaje Ensamblador IF_A Si por encima (!C & !Z = 1); p 303. IF_B Si por debajo (C = 1); p 303. IF_AE Si por encima o igual (C = 0); p 303. IF_BE Si por debajo o igual (C | Z = 1); p 303. IF_C Si C Activa;...
Referencia del Lenguaje Ensamblador Control de Flujo CALL Va a dirección con intención de regresar a la siguiente instrucción; p 274. DJNZ Decrementa valor y va a dirección si no es cero; p 297. Va a dirección incondicionalmente; p 306. JMPRET Va a dirección con intención a “regresar”...
Página 251
3: Referencia del Lenguaje Ensamblador NEGNZ Obtiene un valor o su inverso aditivo, basado en !Z; p 332. Limite mínimo de valor no signado a otro valor no signado; p 319. MINS Limite mínimo de valor signado a otro valor signado; p 320. Limite máximo de valor no signado a otro valor no signado;...
Referencia del Lenguaje Ensamblador Reversa LSB del valor y cero extendido; p 357. Rota valor a la izquierda por un numero especifico de bits; p 358. Rota valor a la derecha por un numero especifico de bits; p 359. Mueve valor a la izquierda por un numero especifico de bits; p 361. Mueve valor a la derecha por un numero especifico de bits;...
3: Referencia del Lenguaje Ensamblador NEGX Máximo entero negativo: -2,147,483,648 ($80000000); p 97. Valor Flotante de PI: ~3.141593 ($40490FDB); p 97. Registros DIRA Registro Dirección puerto A 32 bits; p 351. DIRB Registro Dirección puerto A 32 bits (uso futuro); p 351. Registro Entrada puerto A 32 bits (solo lectura);...
Referencia del Lenguaje Ensamblador Operadores Binarios NOTA: Todos los operadores mostrados son operadores de expresiones constantes. Suma; p 336. Resta; p 336. Multiplica y regresa los 32 bits mas bajos (signado); p 336. Multiplica y regresa los 32 bits mas altos (signado); p 336. Divide y regresa el cociente (signado);...
3: Referencia del Lenguaje Ensamblador Elementos de Lenguaje Ensamblador Definiciones de Sintaxis Además de las descripciones detalladas, las siguientes paginas contienen definiciones de sintaxis para muchos elementos que describe, en términos cortos, todas las opciones de ese elemento. Las definiciones de sintaxis usan símbolos especiales para indicar cuando y como se usaran ciertas características de elementos.
Referencia del Lenguaje Ensamblador Instruction Operands — Una instrucción de ensamblador Propeller ( COGINIT , etc.) y su cero, uno o dos operandos requeridos por Instruction. Effects — una lista opcional de una a tres efectos de ejecución ( ) para aplicar a la instrucción, si s ejecuto.
3: Referencia del Lenguaje Ensamblador (bits 21:18) - Indica la condición en la cual ejecuta la instrucción. DEST (bits 17:9) - Contiene la dirección del registro destino. (bits 8:0) - Contiene la fuente de la dirección del registro o el valor literal de 9 bits.
Página 258
Referencia del Lenguaje Ensamblador $FFFF_FFFE; -2 Valores de números en hexadecimal (izquierda de ‘;’) y decimal (derecha de ‘;’). %0_00000011; 3 Valores de números en binario (izquierda de ‘;’) y decimal (derecha de ‘;’). 0 –o– 1 Cero individual (0) o uno (1) significan binario 0 o 1. wr, wz, wc Efectos ensamblador indican estado de ejecución;...
3: Referencia del Lenguaje Ensamblador El cuarto par de renglones muestran el mismo concepto pero alcanzando y cruzando la frontera de los enteros signados por el lado negativo, resultando también en un sobre flujo de signo (bandera C activa). Observe que un campo destino de instrucción contiene actualmente la dirección del registro que tiene el valor del operando, y el campo fuente es comúnmente codificado de forma similar, pero las tablas de verdad siempre simplifican este detalle mostrando solo el valor del...
Página 260
Referencia del Lenguaje Ensamblador instrucción -INSTR- ZCRI -CON- -DEST- -SRC- Resultado Z Resultado C Resultado Ciclos Resultado = 0 S[31] Escrito D, S 101010 001i 1111 ddddddddd sssssssss Result = 0 S[31] Escrito ABSNEG D, S 101011 001i 1111 ddddddddd sssssssss D + S = 0 Acarreo sin signo Escrito...
Página 261
3: Referencia del Lenguaje Ensamblador instrucción -INSTR- ZCRI -CON- -DEST- -SRC- Resultado Z Resultado C Resultado Ciclos Resultado = 0 S[31] Escrito D, S 101001 001i 1111 ddddddddd sssssssss Resultado = 0 S[31] Escrito NEGC D, S 101100 001i 1111 ddddddddd sssssssss Resultado = 0 S[31] Escrito...
Página 262
Referencia del Lenguaje Ensamblador Notas para Tabla Maestra Nota 1: Ciclos de Reloj para Instrucciones de Hub Las instrucciones d Hub requieres de 7 a 22 ciclos de reloj para ejecutarse dependiendo de la relación entre la ventana de acceso al cog y el momento de la ejecución. El hub proporciona una ventana de acceso al cog cada 16 ciclos.
3: Referencia del Lenguaje Ensamblador – instrucción: Obtiene el valor absoluto de un numero. AValue, SValue Resultado: Absoluto SValue se almacena en AValue. AValue (campo-d) es el registro en el cual se escribe el valor absoluto de SValue. ...
ABSNEG – Referencia del Lenguaje Ensamblador ABSNEG instrucción: Obtiene el negativo de un numero de valor absoluto. ABSNEG NValue, SValue Resultado: Negativo absoluto de SValue se almacena en NValue. NValue (campo-d) es el registro en el cual se escribe el negativo del valor absoluto SValue.
3: Referencia del Lenguaje Ensamblador – instrucción: Suma dos valores no signados. Value1, Value2 Resultado: Suma de no signado Value1 y no signado Value2 y se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor a sumar al Value2 y es el destino en el cual se escribe el resultado.
ADDABS – Referencia del Lenguaje Ensamblador ADDABS instrucción: Suma un valor absoluto a otro valor. ADDABS Value, SValue Resultado: La suma de Value y valor absoluto no signado de SValue se almacena en Value. Value (campo-d) es el registro que contiene el valor a sumar con el valor absoluto de SValue y es el destino dond se escribe el resultado.
ADDS 3: Referencia del Lenguaje Ensamblador – ADDS instrucción: Suma dos valores signados. ADDS SValue1, SValue2 Resultado: Suma de sigandoSValue1 y signado SValue2 se almacena en SValue1. SValue1 (campo-d) es el registro que contiene el valor a sumar con SValue2 y es el destino en el cual se escribe el resultado.
ADDSX – Referencia del Lenguaje Ensamblador ADDSX instrucción: Suma dos valores signados mas C. ADDSX SValue1, SValue2 Result: Suma de SValue1 y SValue2 signados mas la bandera C se almacenan en SValue1. SValue1 (campo-d) es el registro que contiene el valor a sumar con SValue2 mas C, y es el destino donde se escribe el resultado.
ADDSX 3: Referencia del Lenguaje Ensamblador – En una operación signada multi-long, la primer instrucción es no signada (Ej.: ), cualquier ADDX instrucción intermedia son no signadas, extendidas (Ej.: ), y la ultima instrucción es ADDSX signada, extendida (Ej.: ). Asegúrese de usar los efectos , y opcionalmente , en las ADDX...
ADDX – Referencia del Lenguaje Ensamblador ADDX instrucción: Suma dos valore no signados mas C. ADDX Value1, Value2 Resultado: La suma de un valor Value1 y Value2 no signado mas C se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor a sumar con Value2 mas C, y es el destino en el cual se escribe el resultado.
Página 271
ADDX 3: Referencia del Lenguaje Ensamblador – Después de ejecutar el código, el resultado del doble long (64-bit) esta en los registros long XHigh:XLow. Si XHigh:XLow inicio como $0000_0000:FFFF_FFFF (4,294,967,295) y YHigh:YLow como $0000_0000:0000_0001 (1) del resultado en XHigh:XLow será $0000_0001:0000_0000 (4,294,967,296).
– Referencia del Lenguaje Ensamblador instrucción: Bitwise, AND de dos valores. Value1, Value2 Resultado: Value1 AND Value2 se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor que se hace AND con Value2 y es el destino en el cual se escribe el resultado.
ANDN 3: Referencia del Lenguaje Ensamblador – ANDN instrucción: Bitwise, AND de un valor con el NOT de otro. ANDN Value1, Value2 Resultado: Value1 AND !Value2 se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor a hacer AND con el !Value2 y es el destino donde se escribe el resultado.
CALL – Referencia del Lenguaje Ensamblador CALL instrucción: Salta a una dirección con la intención de regresar a la siguiente instrucción. CALL #Symbol Resultado: PC + 1 se escribe en el campo-s del registro indicado por el campo-d. Symbol (campo-s) es una literal de 9-bit cuyo valor es la dirección a saltar. Este campo debe contener un símbolo especificado como literal (#symbol) y el correspondiente código deberá...
Página 275
CALL 3: Referencia del Lenguaje Ensamblador – CALL En tiempo de ejecución la que hace la instrucion es almacenar la instrucción de regreso (PC+1) en la localidad de donde regresara; el lugar de la instrucción “Symbol_ret ”. La instrucción es solo una instrucción sin una dirección destino codificada, y esta acción de tiempo de ejecución proporciona la dirección de regreso a la cual se moverá.
Página 276
CALL – Referencia del Lenguaje Ensamblador CALL Esta naturaleza de la instrucción dicta lo siguiente: La rutina referenciada debe tener solo una instrucción asociada. Si la rutina necesita mas de un punto de salida, hacer uno de esos puntos de salida con la instrucción y hacer los otros puntos de salida con subdivisiones (Ej.:, ) a esa...
CLKSET 3: Referencia del Lenguaje Ensamblador – CLKSET instrucción: Activa el modo clock en tiempo de ejecución. CLKSET Mode Mode (campo-d) registro que contiene el patrón de 8-bit a escribir en el registro CLK. Tabla Opcode: –INSTR– ZCRI –CON– –DEST–...
– Referencia del Lenguaje Ensamblador instrucción: Compara dos valores no signados. Value1, Value2 Resultado: opcionalmente, estado de igualdad y mayor que/menor que se escriben en Z y C. Value1 (campo-d) es el registro que contiene el valor a comparar con Value2. ...
Página 279
3: Referencia del Lenguaje Ensamblador – Si el efecto se especifica, la bandera Z se activa (1) si Value1 es igual a Value2. Si se especifica el efecto , la bandera C se activa (1) I Value1 es menor que Value2. El resultado no se escribe a menos que se especifique el efecto .
CMPS – Referencia del Lenguaje Ensamblador CMPS instrucción: Compara dos valores signados. CMPS SValue1, SValue2 Resultado: Opcionalmente, igualdad y estado mayor/menor que se escribe en Z y C. SValue1 (campo-d) es el registro que contiene el valor a comparar con SValue2. ...
Página 281
CMPS 3: Referencia del Lenguaje Ensamblador – Explicación CMPS (Compare signado) compara los valores signados de SValue1 y SValue2. Las banderas Z y C, si se escriben, indican la relación relativa de igual, mayor o menor que entre los dos. Si se especifica el efecto la bandera Z se activa (1) si SValue1 es igual a SValue2.
CMPSUB – Referencia del Lenguaje Ensamblador CMPSUB instrucción: Compara dos valores no signados y resta el segundo si es menor o igual. CMPSUB Value1, Value2 Resultado: Opcionalmente, Value1 = Value1–Value2, y Z y C = resultado comparación. Value1 (campo-d) es el registro que contiene el valor a comparar con Value2 y es el destino en el cual se escribe el resultado si se desarrolla una resta.
CMPSX 3: Referencia del Lenguaje Ensamblador – CMPSX instrucción: Compara dos valores signados mas C. CMPSX SValue1, SValue2 Resultado: Opcionalmente, estado de igualdad, mayor/menor se escribe en Z y C. SValue1 (campo-d) es el registro que contiene el valor a comparar con SValue2. ...
Página 284
CMPSX – Referencia del Lenguaje Ensamblador El resultado de la bandera C de CMPS (Compare signado) puede diferir de CMP (Compare no signado) donde el signo interpretado de la fuente y destino son opuestos. El primer ejemplo en el segundo grupo, muestra que CMPS activa C porque el signado $8000_0000 (-2,147,483,648) es menor que el signado $7FFF_FFFF (2,147,483,647).
Página 285
CMPSX 3: Referencia del Lenguaje Ensamblador – Una comparación de un triple-long signado (96-bit) deberá verse similar pero con la CMPX CMPSX instrucción insertada entre las instrucciones XLow, YLow wc wz 'Compare low longs; save C y Z cmpx XMid, YMid wc wz 'Compare middle longs;...
CMPX – Referencia del Lenguaje Ensamblador CMPX instrucción: Compara dos valores no signados mas C. CMPX Value1, Value2 Resultado: Opcionalmente, el estado de igualdad, menor/mayor se escribe en Z y C. Value1 (campo-d) es el registro que contiene el valor a comparar con Value2. ...
CMPX 3: Referencia del Lenguaje Ensamblador – El resultado de la bandera C CMPX (Compare no signado, Extended) puede diferir de CMPSX (Compare signado, Extended) donde el "signo interpretado” de la fuente y destino son opuestos. El primer ejemplo en el segundo grupo, arriba, muestra que CMPX limpia C porque el no signado $8000_0000 (2,147,483,648) no es menor que el no signado $7FFF_FFFF (2,147,483,647).
– Referencia del Lenguaje Ensamblador Registro: Registro contador del sistema. , CNT Label Condition Instruction DestOperand Effects Label es una etiqueta opcional. Ver Elementos Comunes de Sintaxis, Pág. 255. Condition una condición de ejecución opcional. Ver Elementos Comunes de Sintaxis, Pág.
COGID 3: Referencia del Lenguaje Ensamblador – COGID instrucción: Obtiene el numero de Cog. COGID Destination Result: El numero de cog actual "ID" (0-7) se escribe en Destination. Destination (campo-d) es el registro en donde escribir el ID del cog. Tabla Opcode: –INSTR–...
COGINIT – Referencia del Lenguaje Ensamblador COGINIT instrucción: Inicia o reinicia un cog, opcionalmente por ID, para correr ensamblador propeller o spin. COGINIT Destination Result: Opcionalmente, el ID del cog iniciado/reiniciado se escribe en Destination. Destination (campo-d) es el registro que contiene información de inicio para el cog objetivo y opcionalmente se convierte en el destino del ID del cog iniciado si un cog se inicia.
Página 291
COGINIT 3: Referencia del Lenguaje Ensamblador – Tabla 3-1: Campos de Registro Destino 31:18 17:4 14-bit Dirección long registro PAR 14-bit dirección long código a cargar nuevo Cog ID El primer campo, serán escritos para el registro del cog bits 15:2. Esto es 14 bits totales que intentan ser los bits altos de una dirección long 16-bit.
COGSTOP – Referencia del Lenguaje Ensamblador COGSTOP instrucción: Detiene un cog por su ID. COGSTOP CogID CogID (campo-d) es el registro conteniendo el ID (0 – 7) del cog a detener. Tabla Opcode: –INSTR– ZCRI –CON– –DEST– –SRC– Resultado Z Resultado C Resultado Ciclos...
IF_x 3: Referencia del Lenguaje Ensamblador – Condiciones ( Condiciones IF_x Cada instrucción ensamblador propeller tiene un campo "condición" opcional que se usa para determinar dinámicamente si se ejecuta o no cuando se alcanza en tiempo de ejecución. La sintaxis básica para ensamblador propeller es: ...
32 pins de E/S en el Puerto A y el Puerto B respectivamente. DIRB El Propeller P8X32A no incluye el Puerto B. esta reservado para uso futuro por lo que DIRA solo se discutirá...
Página 296
CTRA, CTRB – Referencia del Lenguaje Ensamblador DIRA, DIRB Ver Registros, Pág. 351, y la sección de lenguaje spin , Pág. 107, para mas información. Tenga en cuenta que en Ensamblador Propeller, a diferencia de Spin, los 32 bits DIRA se accesan al mismo tiempo a menos que se usen instrucciones Pagina 296 ·...
DJNZ 3: Assembly Language Reference – DJNZ instrucción: Decrementa un valor y salta a la dirección si no es cero. DJNZ Value, Address Resultado: Value-1 se escribe en Value. Value (campo-d) es el registro a decrementar y probar. ...
Effects – Referencia del Lenguaje Ensamblador Efectos Cada instrucción de ensamblador Propeller tiene un campo especial de efecto que puede modificar una bandera o registro cuando se ejecuta. La sintaxis básica es: Label Condition Instruction Operands Effects El campo opcional Effects puede contener uno o mas de los cuatro puntos mostrados abajo.
3: Referencia del Lenguaje Ensamblador – instrucción: Valida que las instrucciones/datos previos se ajusten a una dirección especifica. FIT Address Result: Error en tiempo de compilación si la instrucción/dato previo excede Address-1. Address es una dirección opcional RAM de cog (0-$1F0) para lo cual el código ensamblador no debe alcanzar.
HUBOP 3: Referencia del Lenguaje Ensamblador – HUBOP instrucción: Desarrolla una operación de hub. HUBOP Destination, Operation Resultado: Varia dependiendo de la operación desarrollada. Destination (campo-d) es el registro conteniendo un valor a usar en Operation. Operation (campo-s) es un registro o literal 3-bit que indica la operación a realizar.
IF_x (Condiciones) – Referencia del Lenguaje Ensamblador IF_x (Condiciones) Cada instrucción Ensamblador propeller tiene una condición especial que se usa para determinar dinámicamente si se ejecuta o no durante el tiempo de ejecución. La sintaxis básica para la instrucción ensamblador Propeller es: ...
Página 303
IF_x 3: Referencia del Lenguaje Ensamblador – (Condiciones) Tabla 3-3: Condiciones condición Ejecuta instrucción Valor Sinónimo 1111 IF_ALWAYS Siempre 0000 IF_NEVER Nunca 1010 IF_E IF_Z Si igual (Z = 1) 0101 IF_NE IF_NZ Si no igual (Z = 0) 0001 IF_A IF_NC_AND_NZ –and–...
32 pins E/S en el puerto A y B respectivamente. esta reservado par uso futuro; el Propeller P8X32A no incluye el Puerto B así que solo se discutirá en esta sección.
Página 305
INA, INB 3: Referencia del Lenguaje Ensamblador –...
– Referencia del Lenguaje Ensamblador instrucción: Salta a una dirección. JMP Address Address (campo-s) es el registro o literal 9-bit cuyo valor es la dirección a saltar. Tabla Opcode: –INSTR– ZCRI –CON– –DEST– –SRC– Resultado Z Resultado C Resultado Ciclos 010111 000i 1111 --------- sssssssss...
Página 307
3: Referencia del Lenguaje Ensamblador – Toggle dira, Pin 'Activa pin E/S a salida outa, Pin 'Cambia estado de pin E/S #$-1 'Cicla sin fin JMP #$-1 La ultima instrucción , hace que la ejecución salte de la segunda a la ultima instrucción (Ej.: “here”...
JMPRET – Referencia del Lenguaje Ensamblador JMPRET instrucción: Salta a la dirección con la intención de “regresar” a otra dirección. JMPRET RetInstAddr, DestAddress Resultado: PC + 1 se escribe el campo-s del registro indicado por el campo-d. RetInstAddr (campo-d) es el registro en el cual se almacena la dirección de regreso (PC+1) frecuentemente es la dirección de un apropiado...
Página 309
JMPRET 3: Referencia del Lenguaje Ensamblador – regreso se almacena, la rutina DestAddress se ejecuta y finalmente el control regresa a la JMPRET CALL instrucción que seguía a . Ver en Pág. 274 para mayor información. JMPRET Cuando se usa diferente, la instrucción puede ayudar en procesos sencillos de multi tareas.
Página 310
JMPRET – Referencia del Lenguaje Ensamblador mov Task2,#SecondTask SecondTask La primer instrucción , almacena la dirección de en el Task2 registro . Esto lleva al registro de tareas a realizar el primer cambio. FirstTask Una vez que inicio, desarrolla algunas operaciones indicadas por “…” y alcanza la JMPRET jmpret Task1,Task2 JMPRET...
Página 311
JMPRET 3: Referencia del Lenguaje Ensamblador – La dirección de regreso (PC+1) se escribe a la fuente (campo-s) del registro RetInstAddr a menos que se especifique el efecto . Por supuesto al especificar no se recomienda para la JMPRET instrucción ya que la convierte en una instrucción...
LOCKCLR – Referencia del Lenguaje Ensamblador LOCKCLR instrucción: Limpia Lock a falso y obtiene el estado previo. LOCKCLR Resultado: Opcionalmente, el estado previo de Lock se escribe a la bandera C (campo-d) es el registro que contiene el ID (0 – 7) del seguro a limpiar. Tabla Opcode: –INSTR–...
LOCKNEW 3: Referencia del Lenguaje Ensamblador – LOCKNEW instrucción: Genera un Nuevo seguro y obtiene su ID LOCKNEW NewID Resultado: El ID del Nuevo seguro (0-7) se escribe en NewID. NewID (campo-d) es el registro donde el ID del nuevo seguro se escribe. Tabla Opcode: –INSTR–...
LOCKRET – Assembly Language Reference LOCKRET instrucción: Libera un seguro para futuros requerimientos de LOCKNEW LOCKRET (campo-d) es el registro que contiene el ID (0 – 7) del seguro a regresar a la bandeja. Tabla Opcode: –INSTR– ZCRI –CON– –DEST–...
Página 315
LOCKRET 3: Referencia del Lenguaje Ensamblador –...
LOCKSET – Referencia del Lenguaje Ensamblador LOCKSET instrucción: Activa un seguro como verdadero y obtiene su estado previo. LOCKSET Resultado: Opcionalmente, el estado previo del seguro se escribe a la bandera C. (campo-d) es el registro que contiene el ID (0 – 7) del seguro a activar. Tabla Opcode: –INSTR–...
3: Referencia del Lenguaje Ensamblador – instrucción: Limite máximo de un valor no signado a otro valor no signado. Value1, Value2 Resultado: El menor de un valor no signado Value1 y Value2 se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor a comparar contra Value2 y es el destino en el cual se escribe el menor valor de los dos.
MAXS – Referencia del Lenguaje Ensamblador MAXS instrucción: Limite máximo de un valor signado a otro valor signado. MAXS SValue1, SValue2 Resultado: El menor de los valores signados en SValue1 y SValue2 se almacena en SValue1. SValue1 (campo-d) es el registro que contiene el valor a comparar contra SValue2 y es el destino en el cual se escribe el menor de los dos.
3: Referencia del Lenguaje Ensamblador – instrucción: Limite mínimo de un valor no signado a otro valor no signado. Value1, Value2 Resultado: El mayor de los valores no signados de Value1 y Value2 se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor a comparar contra Value2 y es el destino en el cual se escribe el mayor de los dos.
MINS – Referencia del Lenguaje Ensamblador MINS instrucción: Limite mínimo de un valor signado a otro valor signado. MINS SValue1, SValue2 Resultado: El mayor de los valores signados SValue1 y SValue2 se almacena en SValue1. SValue1 (campo-d) es el registro que contiene el valor a comparar contra SValue2 y es el destino en el cual se escribe el mayor de los dos.
3: Referencia del Lenguaje Ensamblador – instrucción: Activa un registro a un valor. Destination, Value Resultado: Value se almacena en Destination. Destination (campo-d) es el registro en el cual se almacena Value. Value (campo-s) es un registro o literal 9-bit cuyo valor se almacena en Destination. Tabla Opcode: –INSTR–...
MOVD – Referencia del Lenguaje Ensamblador MOVD instrucción: Activa un campo de registro destino a un valor. MOVD Destination, Value Resultado: Value se almacena en el campo-d de Destination (bits 17..9). Destination (campo-d) es el registro cuyo campo destino (bits 17..9) se activa al valor de Value.
MOVI 3: Referencia del Lenguaje Ensamblador – MOVI instrucción: Activa una instrucción de registro y campos de efectos a un valor. MOVI Destination, Value Resultado: Value se almacena en el campo-i de Destination y campo-efectos (bits 31..23). Destination (campo-d) es el registro cuya instrucción y campos efecto (bits 31..23) se activan al valor de Value.
MOVS – Referencia del Lenguaje Ensamblador MOVS instrucción: Activa una campo fuente de registro a un valor. MOVS Destination, Value Resultado: Value se almacena en el campo-s de Destination (bits 8..0). Destination (campo-d) es el registro cuya campo fuente (bits 8..0) se activa al valor de Value.
MUXC 3: Referencia del Lenguaje Ensamblador – MUXC instrucción: Activa bits discretos de un valor al estado de C. MUXC Destination, Mask Resultado: Los bits Destination, indicados por Mask, se activan al estado de C. Destination (campo-d) es el registro cuyos bits descries por Mask se afectan por C. ...
MUXNC – Referencia del Lenguaje Ensamblador MUXNC instrucción: Activa bits discretos de un valor al estado de !C. MUXNC Destination, Mask Resultado: Los bits Destination, indicados por Mask, se activan al estado de !C. Destination (campo-d) es el registro cuyos bits descries por Mask se afectan por !C. ...
MUXNZ 3: Assembly Language Reference – MUXNZ instrucción: Activa bits discretos de un valor al estado de !Z. MUXNZ Destination, Mask Resultado: Los bits Destination, indicados por Mask, se activan al estado de !Z. Destination (campo-d) es el registro cuyos bits descries por Mask se afectan por !Z. ...
MUXZ – Assembly Language Reference MUXZ instrucción: Activa bits discretos de un valor al estado de Z. MUXZ Destination, Mask Resultado: Los bits Destination, indicados por Mask, se activan al estado de Z. Destination (campo-d) es el registro cuyos bits descries por Mask se afectan por Z. ...
3: Assembly Language Reference – instrucción: Obtiene el negativo de un numero. NValue, SValue Resultado: –SValue se almacena en NValue. NValue (campo-d-) es el registro en el cual se escribe el negativo de SValue. SValue (campo-s) es un registro o literal 9-bit cuyo valor negativo se escribirá en NValue.
NEGC – Assembly Language Reference NEGC instrucción: Obtiene un valor, o su opuesto, basado en C. NEGC RValue, Value Resultado: Value o –Value se almacena en RValue. RValue (campo-d) es el registro en el cual se escribe Value o –Value. ...
NEGNC 3: Assembly Language Reference – NEGNC instrucción: Obtiene un valor, o su opuesto, basado en !C. NEGNC RValue, Value Resultado: –Value o Value se almacena en RValue. RValue (campo-d) es el registro en el cual se escribe –Value o Value. ...
NEGNZ – Assembly Language Reference NEGNZ instrucción: Obtiene un valor, o su opuesto, basado en !Z. NEGNZ RValue, Value Resultado: –Value o Value se almacena en RValue. RValue (campo-d) es el registro en el cual se escribe –Value o Value. ...
NEGZ 3: Assembly Language Reference – NEGZ instrucción: Obtiene un valor, o su opuesto, basado en Z. NEGZ RValue, # Value Resultado: Value o –Value se almacena en RValue. RValue (campo-d) es el registro en el cual se escribe Value o –Value. ...
– Assembly Language Reference Instrucción: No operación, solo deja pasar cuatro ciclos de reloj. Tabla Opcode: –INSTR– ZCRI –CON– –DEST– –SRC– Resultado Z Resultado C Resultado Ciclos ------ ---- 0000 --------- --------- Tabla de verdad: (No especificada ya que no desarrolla ninguna acción) Explicación –CON–...
3: Assembly Language Reference – Efecto: Previene que una instrucción ensamblador escriba un resultado. Label Condition Instruction Operands Resultado: El registro destino de Instruction no se afecta. Label es una etiqueta opcional. Ver Elementos Comunes de Sintaxis en Pág. 255. ...
Página 336
Operators – Assembly Language Reference Operadores El código Ensamblador Propeller puede contener expresiones usando cualquier operador que este permitido en expresiones constantes. La Tabla 3-4 sumariza todos los operadores permitidos en el Ensamblador Propeller. Revise la referencia del lenguaje Spin en la sección Operadores en Pág.
3: Assembly Language Reference – instrucción: Bitwise hace OR dos valores. Value1, Value2 Resultado: El resultado de Value1 OR Value2 se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor a hacer OR con Value2 y es el destino en el cual se escribe el resultado.
– Referencia del Lenguaje Ensamblador instrucción: Ajusta el apuntador ensamblador en tiempo de compilación. ORG Address Address es una dirección opcional RAM del Cog (0-495) para ensamblar el siguiente código ensamblador. Si Address no se da se usa el valor 0. Explicación La instrucción (origin) activa el apuntador ensamblador de la herramienta Propeller a un...
3: Referencia del Lenguaje Ensamblador – ensamblador reemplazara cada referencia de estos símbolos con sus respectivas direcciones de código. Toggle COGNEW(@Toggle, 0) Cuando el código se inicia con , por ejemplo, el código ejecutara apropiadamente iniciando en la dirección 0 de la RAM ya que todas las direcciones de ORG 1 Toggle símbolos se calcularon desde ese punto.
OUTA, OUTB – Referencia del Lenguaje Ensamblador OUTA, OUTB Registros: Salida de registros para puertos A y B de 32-bit. OUTA, Label Condition Instruction SrcOperand Effects , OUTA Label Condition Instruction DestOperand...
Página 341
OUTA, OUTB 3: Referencia del Lenguaje Ensamblador – OUTA, OUTB Ver Registros, Pág. 351, y la sección del lenguaje Spin , Pág. 179, para mayor información. Tenga en cuenta que en el Ensamblador Propeller a diferencia del spin todos OUTA los 32 bits de se accesan al mismo tiempo a menos que se usen instrucciones Propeller Manual v1.1 ·...
OUTA, OUTB – Referencia del Lenguaje Ensamblador Registro: Registro de parámetros del Cog de inicio. , PAR Label Condition Instruction DestOperand Effects Label es una etiqueta opcional. Ver Elementos Comunes de Sintaxis, Pág. 255. ...
Página 343
3: Referencia del Lenguaje Ensamblador – '<more code here> 'Desarrolla operaciones Addr Propeller Manual v1.1 · Page 343...
PHSA, PHSB – Referencia del Lenguaje Ensamblador PHSA, PHSB Registro: Registro de Fase de Contador A y B. PHSA, Label Condition Instruction SrcOperand Effects , PHSA Label Condition Instruction DestOperand Effects ...
Página 345
PHSA, PHSB 3: Referencia del Lenguaje Ensamblador – Result, phsa 'Obtiene el valor actual de phase Propeller Manual v1.1 · Page 345...
– Assembly Language Reference instrucción: Rota C a la izquierda en un valor especificado por bits. Value, Bits Resultado: Value tiene Bits copias de C rotado a la izquierda. Value (campo-d) es el registro en el cual se rota C a la izquierda. ...
3: Assembly Language Reference – instrucción: Rota C a la derecha en un valor especificado por bits. Value, Bits Resultado: Value tiene Bits copias de C rotado ala derecha Value (campo-d) es el registro en el cual se rota C a la derecha. ...
RDBYTE – Assembly Language Reference RDBYTE instrucción: Lee un byte de memoria principal. RDBYTE Value, Address Result: Byte cero extendido se almacena en Value. Value (campo-d) es el registro para almacenar el valor del byte cero extendido. ...
RDLONG 3: Assembly Language Reference – RDLONG Instruction: Lee un long de memoria principal. RDLONG Value, Address Resultado: Long se almacena en Value. Value (campo-d) es el registro para almacenar el valor del byte cero extendido. Address (campo-s) es un registro o literal de 9-bit cuyo valor es la dirección de memoria principal a leer.
RDWORD – Assembly Language Reference RDWORD instrucción: Lee un word de memoria principal. RDWORD Value, Address Resultado: Un word cero extendido se almacena en Value. Value (campo-d) es el registro para almacenar el valor del byte cero extendido. ...
3: Referencia del Lenguaje Ensamblador – Registers Registros Cada cog contiene 16 registros de propósito especial para accesar los pins E/S, los contadores el generador de video y los parámetros pasados al momento de iniciar el cog. Todos estos registros se explican en la Referencia de Lenguaje Spin y la mayoría de la información aplica a ambos, Spin y Ensamblador Propeller.
– Referencia del Lenguaje Ensamblador instrucción : Reserva el siguiente long para símbolo RES Symbol Count Symbol es un nombre opcional para el long reservado en la RAM del cog Count es el numero opcional de logs a reservar para Symbol. Si no se especifica, reserva un long.
Página 353
3: Referencia del Lenguaje Ensamblador – Símbolo Dirección Instrucción / Datos AsmCode Time, cnt Time, Delay :Loop waitcnt Time, Delay #:Loop Delay 6_000_000 Time simplemente incrementa el tiempo de compilación del apuntador ensamblador que afecta referencias de símbolo posteriores (RAM del cog); no consume espacio en el objeto (RAM principal).
– Referencia del Lenguaje Ensamblador :Loop waitcnt Time, Delay 'espera por ventana de tiempo 'Hace algo útil #:Loop 'Ciclo sin fin Time 'Tiempo de espacio de trabajo de ventana Delay long 6_000_000 'Tiempo de tamaño de ventana Este ejemplo iniciara en el cog como sigue: Símbolo Dirección Instrucción / Datos...
Página 355
3: Referencia del Lenguaje Ensamblador – Por esta razón es mejor colocar las instrucciones despues de la ultima instrucción y antes del ultimo dato definido en el que se soporta el código ensamblador, como se muestra en el primer ejemplo. Propeller Manual v1.1 ·...
– Referencia del Lenguaje Ensamblador instrucción: Regresa a la dirección anterior grabada. Tabla Opcode: –INSTR– ZCRI –CON– –DEST– –SRC– Resultado Z Resultado C Resultado Ciclos Result = 0 Not Written 010111 0001 1111 --------- --------- Tabla de verdad: Entrada Salida Destino Fuente Z C Efectos...
3: Referencia del Lenguaje Ensamblador – instrucción: Invierte el valor de LSB y lo hace cero extendido. Value, Bits Resultado: Value tiene los 32-bit bajos de su LSB invertidos y los bits altos limpios. Value (campo-d) es el registro que contiene el valor cuyos bits son invertidos. ...
– Referencia del Lenguaje Ensamblador instrucción: Rota el valor a la izquierda por el numero especificado de bits Value, Bits Resultado: Value se rota a la izquierda por Bits. Value (campo-d) es el registro a rotar a la izquierda ...
3: Referencia del Lenguaje Ensamblador – instrucción: Rota el valor a la derecha por un numero especifico de bits. Value, Bits Resultado: Value se rota a la derecha por Bits. Value (campo-d) es el registro a rotar a la derecha. ...
– Referencia del Lenguaje Ensamblador Instruction: Shift value arithmetically right by specified number of bits. Value, Bits Result: Value is shifted arithmetically right by Bits. Value (d-field) is the register to shift arithmetically right. Bits (s-field) is a register or a 5-bit literal whose value is the number of bits to shift arithmetically right.
3: Referencia del Lenguaje Ensamblador – instrucción: Mueve el valor a la izquierda por un especifico numero de bits. Value, Bits Resultado: Value se mueve a la izquierda por Bits. Value (campo-d) es el registro a mover a la izquierda. ...
– Referencia del Lenguaje Ensamblador instrucción: Mueve el valor a la derecha por un especifico numero de bits. Value, # Bits Resultado: Value se mueve a la derecha por Bits. Value (campo-d) es el registro a mover a la derecha. ...
3: Referencia del Lenguaje Ensamblador – instrucción: Resta dos valores no signados Value1, Value2 Resultado: La diferencia del no signado Value1 y Value2 se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor a restar de Value2, y es el destino en el cual se escribe el resultado.
SUBABS – Referencia del Lenguaje Ensamblador SUBABS instrucción: Resta un valor absoluto de otro valor. SUBABS Value, SValue Resultado: La diferencia de Value y el absolute del signado SValue se almacenan en Value. Value (campo-d) es el registro que contiene el valor a restar del absoluto SValue, y es el destino en el cual se escribe el resultado.
SUBS 3: Referencia del Lenguaje Ensamblador – SUBS instrucción: Resta dos valores signados. SUBS SValue1, SValue2 Resultado: La diferencia del signado SValue1 y el signado SValue2 se almacena en Value1. SValue1 (campo-d) es el registro que contiene el valor a restar de SValue2, y es el destino en el cual se escribe el resultado.
SUBSX – Referencia del Lenguaje Ensamblador SUBSX instrucción: Resta el valor signado mas C de otro valor signado. SUBSX SValue1, SValue2 Resultado: La diferencia de signado SValue1, y signado SValue2 mas la bandera C, se almacena en SValue1. ...
SUBSX 3: Referencia del Lenguaje Ensamblador – SUBSX es signada, extendida (Ej.: ). asegúrese de usar , opcionalmente , en las SUBX instrucciones Por ejemplo, una resta signada doble long (64-bit) se podría ver como sigue: XLow, YLow wc wz 'Resta longs bajos;...
SUBX – Referencia del Lenguaje Ensamblador SUBX instrucción: Resta el valor no signado mas C de otro valor no signado SUBX Value1, # Value2 Resultado: La diferencia de un no signado Value1, y un no signado Value2 mas la bandera C, se almacena en Value1.
Página 369
SUBX 3: Referencia del Lenguaje Ensamblador – Por ejemplo, una resta doble-long no signado (64-bit) podría verse como sigue:: XLow, YLow wc wz 'Resta longs bajos; guarda C y Z subx XHigh, YHigh 'Resta longs altos Despues de ejecutar lo anterior, el resultado doble long (64-bit) se encuentra en los registros XHigh:XLow.
SUMC – Assembly Language Reference SUMC instrucción: Suma un valor signado con otro cuyo signo se invierte dependiendo de C. SUMC SValue1, SValue2 Resultado: La suma de un signado SValue1 y ±SValue2 se almacena en SValue1. SValue1 (campo-d) es el registro que contiene el valor de la suma con –SValue2 o SValue2, y es el destino donde se almacena el resultado.
SUMNC 3: Referencia del Lenguaje Ensamblador – SUMNC instrucción: Suma un valor signado con otro cuyo signo se invierte dependiendo de !C. SUMNC SValue1, SValue2 Resultado: La suma de un signado SValue1 y ±SValue2 se almacena en SValue1. ...
Página 372
SUMNC – Referencia del Lenguaje Ensamblador Page 372 · Propeller Manual v1.1...
SUMZ 3: Referencia del Lenguaje Ensamblador – SUMNZ instrucción: Suma un valor signado con otro cuyo signo se invierte dependiendo de !Z. SUMNZ SValue1, SValue2 Resultado: La suma de un signado SValue1 y ±SValue2 se almacena en SValue1. ...
SUMZ – Referencia del Lenguaje Ensamblador SUMZ instrucción: Suma un valor signado con otro cuyo signo se invierte dependiendo de Z. SUMZ SValue1, SValue2 Resultado: La suma de un signado SValue1 y ±SValue2 se almacena en SValue1. SValue1 (campo-d) es el registro que contiene el valor de la suma con –SValue2 o SValue2, y es el destino donde se almacena el resultado.
3: Referencia del Lenguaje Ensamblador – Symbols Símbolos Los símbolos de la Tabla 3-6 sirven a uno o mas propósitos especiales en el código Ensamblador Propeller. Para símbolos Spin Ver, Símbolos en Pág. 211. Cada propósito de símbolo se describe brevemente con referencia a otras secciones que lo describen directamente o se usa en ejemplos Tabla 3-6: Símbolos Símbolo propósito(s)
Symbols – Referencia del Lenguaje Ensamblador Tabla 3-6: (continuación) Símbolo propósito(s) Indicador de etiqueta local: aparece inmediatamente antes de una etiqueta local. Ver Etiquetas Globales y Locales en Pág. 247. Delimitador de Lista: se usa para separar piezas en una lista. Ver la sección Declaración de Data(Sintaxis 1) en Pág.
TEST 3: Referencia del Lenguaje Ensamblador – TEST instrucción: Hace la operación AND de dos valores para afectar las banderas únicamente. TEST Value1, Value2 Resultado: Opcionalmente el resultado cero y de paridad se escribe a las banderas Z y C ...
TJNZ – Referencia del Lenguaje Ensamblador TESTN instrucción: Hace la operación AND de un valor con el NOT de otro para afectar banderas. TESTN Value1, Value2 Resultado: Opcionalmente se escribe el resultado cero y paridad en las banderas Z y C. ...
TJNZ 3: Referencia del Lenguaje Ensamblador – TJNZ Instrucción: Prueba un valor y salta a una dirección si no es cero. TJNZ Value, Address Value (campo-d) es el registro a probar. Address (campo-s) es el registro o literal 9-bit cuyo valor es la dirección a la cual saltar si Value contiene un valor diferente de cero.
– Referencia del Lenguaje Ensamblador instrucción: Prueba un valor y salta a una dirección si es cero. Value, Address Value (campo-d) es el registro a probar Address (campo-s) es el registro o literal 9-bit cuyo valor es la dirección a saltar ciando Value contiene cero.
VSCL – Referencia del Lenguaje Ensamblador VSCL Registro: Registro de escala de video VSCL, Label Condition Instruction SrcOperand Effects , VSCL Label Condition Instruction DestOperand Effects Label es una etiqueta opcional, Ver Elementos Comunes de Sintaxis, Pág.
WAITCNT 3: Referencia del Lenguaje Ensamblador – WAITCNT instrucción: Detiene la ejecución del cog temporalmente. WAITCNT Target, Delta Result: Target + Delta se almacena en Target. Target (campo-d) es el registro con el valor objetivo a comparar contra el contador del sistema ( ).
WAITPEQ – Referencia del Lenguaje Ensamblador WAITPEQ instrucción: Detiene la ejecución de un cog hasta que un pin E/S coincida con el estado indicado WAITPEQ State, Mask State (campo-d) es el registro con el estado objetivo a comparar contra x hecho AND con Mask.
WAITPNE 3: Referencia del Lenguaje Ensamblador – WAITPNE instrucción: Detiene la ejecución de un cog hasta que los pins E/S no coinciden con el estado indicado. WAITPNE State, Mask State (campo-d) es el registro con el estado objetivo a comparar contra x hecho AND con Mask.
WAITVID – Referencia del Lenguaje Ensamblador WAITVID instrucción: Detiene la ejecución de un cog hasta que el generador de video esta disponible para tomar datos de pixeles. WAITVID Colors, Pixels Colors (campo-d) es el registro cuatro valores de color tamaño byte cada uno describe cuatro posibles colores del patrón de pixeles en Pixels.
Página 387
3: Referencia del Lenguaje Ensamblador – Efecto: Hace que la instrucción ensamblador modifique la bandera C. Label Condition Instruction Operands Resultado: El estado de la bandera C se actualiza con la ejecución de Instruction. Label es una etiqueta opcional.
– Referencia del Lenguaje Ensamblador Efecto: Hace que la instrucción ensamblador escriba un resultado Label Condition Instruction Operands Resultado: El registro destino de Instruction se cambia al valor del resultado. Label es una etiqueta opcional. Ver Elementos Comunes de Sintaxis en Pág. 255. ...
WRBYTE 3: Referencia del Lenguaje Ensamblador – WRBYTE instrucción: Escribe un byte a memoria principal. WRBYTE Value, Address Value (campo-d) es el registro que contiene el valor 8-bit a escribir en memoria. Address (campo-s) es un registro o literal de 9-bit cuyo valor es la dirección de memoria principal en la cual escribir.
WRLONG – Referencia del Lenguaje Ensamblador WRLONG instrucción: Escribe un long a memoria principal. WRLONG Value, Address Value (campo-d) es el registro que contiene el valor 32-bit a escribir en memoria. Address (campo-s) es un registro o literal de 9-bit cuyo valor es la dirección de memoria principal en la cual escribir.
WRWORD 3: Referencia del Lenguaje Ensamblador – WRWORD instrucción: Escribe un word a memoria principal. WRWORD Value, Address Value (campo-d) es el registro que contiene el valor 16-bit a escribir en memoria. Address (campo-s) es un registro o literal de 9-bit cuyo valor es la dirección de memoria principal en la cual escribir.
– Referencia del Lenguaje Ensamblador Efecto: Hace que la instruction ensamblador modifique la bandera Z. Label Condition Instruction Operands Resultado: La bandera Z se actualice con el estado de la ejecución de Instruction. Label es una etiqueta opcional. Ver Elementos Comunes de Sintaxis en Pág. 255. ...
3: Referencia del Lenguaje Ensamblador – instrucción: Hace la operación XOR de dos valores Value1, Value2 Resultado: Value1 XOR Value2 se almacena en Value1. Value1 (campo-d) es el registro que contiene el valor a hacer XOR con Value2 y es el destino en el cual se escribirá...
Appendix A: Reserved Word List Apéndice A: Lista de Palabras Reservadas Estas palabras estas siempre reservadas ya sean para programación en Spin o Propeller. Tabla A-0-1: Lista de Palabras Reservadas Propeller _CLKFREQ CONSTANT IF_NC_AND_NZ PLL4X SUBSX _CLKMODE CTRA IF_NC_AND_Z MINS PLL8X SUBX _FREE...
Página 396
– Referencia del Lenguaje Ensamblador a = Elementos Ensamblador s = Elemento Spin; d = Dual (disponible en ambos lenguajes); # = Reservados para uso futuro Page 396 · Propeller Manual v1.1...
Appendix B: Math Samples and Function Tables Apéndice B: Ejemplos Matemáticos y Tablas Multiplicación, División, y Raíz Cuadrada Multiplicación, división, y raíz cuadrada pueden realizarse usando instrucciones de suma, resta y movimiento. Aquí se muestra una rutina multiplicador no signado que multiplica dos valores 16-bit para alcanzar un producto 32-bit: '' Multiply x[15..0] by y[15..0] (y[31..16] must be 0) ' on exit, product in y[31..0]...
Página 398
Appendix B: Math Samples and Function Tables x,#1 'rota c en cociente, mueve dividendo djnz t,#:loop 'cicla hasta terminar divide_ret 'cociente en x[15..0], 'sobrante en x[31..16] Al igual que la rutina multiplicador la rutina divisora podría recodificarse con una secuencia CMPSUB DJNZ de 16 bits...
Página 399
Appendix B: Math Samples and Function Tables Para aplicaciones donde se desarrollan muchas multiplicaciones y divisiones en ausencia de sumas y restas, la codificación exponencial puede acelerar las cosas. La codificación exponencial es también útil para comprimir números en pocos bits- sacrificando resolución en mayores magnitudes.
Página 400
Appendix B: Math Samples and Function Tables numexp exp,#0 'limpia exponente test num,num4 'obtiene la porcion entera del exponente muxnz exp,exp4 'mientras justifica el numero if_z num,#16 test num,num3 muxnz exp,exp3 if_z num,#8 test num,num2 muxnz exp,exp2 if_z num,#4 test num,num1 muxnz exp,exp1...
Página 401
Appendix B: Math Samples and Function Tables Tabla Anti-Log ($D000-$DFFF) La tabla Anti-Log contiene datos usados para convertir exponentes base-2 en números no signados. La tabla Anti-Log consiste de 2,048 words no signadas que son los mas bajos 16-bits de una mantisa de 17-bit (el bit 17 esta implicado y debe activarse separadamente).
Página 402
Appendix B: Math Samples and Function Tables Tabla de Seno ($E000-$F001) La tabla de seno proporciona 2,049 muestras de 16-bit no signados en un rango de 0° a 90°, (resolución 0.0439°). Un pequeño monto de código ensamblador puede hacer espejo y cambiar la tabla de seno para crear una tabla completa de seno/coseno que tiene 13-bit de resolución angular y 17-bit de resolución de muestreo: ' Obtiene seno/coseno...