lunes, diciembre 05, 2011

Convirtiendo un programa de Propeller SPIN a C


Propeller GCC es el proyecto que está haciendo posible programar el microcontrolador Propeller en C/C++, y aunque todavía está en versión alfa, podemos realizar ya casi cualquier programa.

A continuación mostramos un programa en SPIN, y la versión en lenguaje C:

Código SPIN:


CON
  _clkmode = xtal1 + pll16x
  _xinfreq = 5_000_000

PUB Main | i
  i := 0
  Start_PWM(16)

  repeat
    Duty_PWM(i)
    waitcnt(clkfreq / 100 + cnt)
    i++
    if i > 99
      i := 0

PUB Start_PWM(Pin)
  DIRA[Pin] := 1
  CTRA := %0_0110<<26 + Pin

PUB Duty_PWM(dutyCycle)
  FRQA := $7FFF_FFFF/50 * dutyCycle


Código C:

#include "propeller.h"

void Start_PWM(int Pin)
{
  DIRA = 1 << Pin;
  CTRA = (0b00110<<26) + Pin;
}

void Duty_PWM(int dutyCycle)
{
  FRQA = 0x7FFFFFFF/50 * dutyCycle;
}

int main()
{
    int i = 0;

    Start_PWM(19);
   
    for(;;) {
    Duty_PWM(i);
        waitcnt(CLKFREQ / 100 + CNT);
    i++;
    if (i > 99)
      i = 0;
    }   
}

Los dos programas, línea por línea son muy parecidos, en algunos casos no fue necesario cambiar nada.

Un cambio muy importante fue poner entre paréntesis la expresión: "0b00110<<26", de otro modo el compilador suma "26" y el valor de "Pin", siendo esto un error, y su programa no funcionará.

No hay comentarios: