2 : dacAddr[channel] := value
control.
3 : long[dacAddr] := value
control.
repeat while cmd
cmd.
PRI DacLoop | i
repeat
if cmd
DacConfig
repeat i from 0 to 1
FRQB.
spr[10+ch] := long[dacAddr][ch] * bits[ch]
PRI DacConfig | temp
temp := cmd >> 16
case cmd & $FF
4:
spr[8+ch] := (%00110 << 26) + pin[ch] ' Almacena mode y pin en registro CTR.
dira[pin[ch]]~~
5:
spr[8+ch]~
dira[pin[ch]]~
0:
dira[pin[ch]]~
pin[ch] := temp
local
spr[8+ch] := (%00110 << 26) + pin[ch] ' Actualiza CTR con nuevo pin.
dira[pin[ch]]~~
salida
cmd := 0
otro cog.
Solución – Menú manejando objeto prueba para DualDac.spin
''TestDualDAC.spin
''Menú de usuario para pruebas DualDac.spin
CON
_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000
' Constantes Terminal Serial Parallax
CLS = 16, CR = 13, CLREOL = 11, CRSRXY = 2, BKSPC = 8, CLRDN = 12
OBJ
debug : "FullDuplexSerialPlus"
dac
: "DualDAC"
PUB TestPwm | channel, dacPin, resolution, ch[2], menu, choice
debug.start(31, 30, 0, 57600)
waitcnt(clkfreq * 2 + cnt)
debug.str(@_Menu)
Apéndice B: Estudio de Soluciones
' 2 = Cambia dirección variable de
' 3 = Cambia valor de variable de
' Bloquea ejecución hasta completar
' Ciclo checa por cmd, Luego actualiza
' Valores salida DAC.
' Ciclo principal por con iniciado.
' Si cmd <> 0
' llama DatConfig
' Actualiza modulo contador FRQA y
' Actualiza configuración DAC basada
' en cmd.
' Si attribute = 0, temp obtiene pin.
' Mascara cmd y evalúa caso por caso.
' 4 -> Configura DAC.
' Dirección de pin -> salida.
' 5 -> Remueve DAC.
' Limpia registro CTR.
' Hace pin E/S entrada.
' 0 -> actualice pin.
' Hace pin entrada.
' Obtiene Nuevo pin de variable temp
' Actualiza nueva dirección pin E/S ->
' limpia cmd para detener bloqueo en
' Sistema reloj→ 80 MHz
Kit Educativo de Practicas Propeller: Fundamentos · Página 221