From c661fd0eca928c2ba5596be0ae518f2ee7d6a5ae Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Sun, 3 Apr 2016 17:49:35 -0700 Subject: [PATCH] Neopixel seems to work --- libs/microbit/pins.cpp | 7 +++++++ libs/neopixel/neotest.ts | 2 +- libs/neopixel/sendbuffer.asm | 11 ++++++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/libs/microbit/pins.cpp b/libs/microbit/pins.cpp index c8193239..1cfa092b 100644 --- a/libs/microbit/pins.cpp +++ b/libs/microbit/pins.cpp @@ -69,6 +69,13 @@ namespace pins { if (!pin) return 0; \ return pin->op + + //% + MicroBitPin *getPinAddress(int id) { + return getPin(id); + } + + /** * Read the specified pin or connector as either 0 or 1 * @param name pin to read from diff --git a/libs/neopixel/neotest.ts b/libs/neopixel/neotest.ts index 29695c56..bf3de988 100644 --- a/libs/neopixel/neotest.ts +++ b/libs/neopixel/neotest.ts @@ -8,7 +8,7 @@ basic.showLeds(` console.log("Start") // Create a NeoPixel driver - specify the number of LEDs: -let strip = neopixel.create(24); +let strip = neopixel.create(7); // If your strip is not at P0, specify the pin. strip.setPin(DigitalPin.P0) diff --git a/libs/neopixel/sendbuffer.asm b/libs/neopixel/sendbuffer.asm index 98b5202f..3ec6e877 100644 --- a/libs/neopixel/sendbuffer.asm +++ b/libs/neopixel/sendbuffer.asm @@ -1,23 +1,26 @@ +sendBufferAsm: + push {r4,r5,r6,r7,lr} mov r4, r0 ; save buff mov r6, r1 ; save pin mov r0, r4 - bl buffer::count + bl BufferMethods::length mov r5, r0 mov r0, r4 - bl buffer::cptr + bl BufferMethods::getBytes mov r4, r0 ; setup pin as digital mov r0, r6 movs r1, #0 - bl micro_bit::digitalWritePin + bl pins::digitalWritePin ; load pin address mov r0, r6 + bl pins::getPinAddress ldr r0, [r0, #8] ; get mbed DigitalOut from MicroBitPin ldr r1, [r0, #4] ; r1-mask for this pin @@ -60,3 +63,5 @@ cpsie i ; enable irq pop {r4,r5,r6,r7,pc} + +