diff --git a/firmware/src/audio.h b/firmware/src/audio.h index 211bebd..2c9b69a 100644 --- a/firmware/src/audio.h +++ b/firmware/src/audio.h @@ -6,7 +6,7 @@ #define AUDIO_PIN 2 #define AUDIO_RATE 44000.0f -#define BUFFER_LEN 16384 +#define BUFFER_LEN 512*32 #define BUFFER_LEN_MS (BUFFER_LEN / AUDIO_RATE) * 1000.0f extern uint8_t wav_buffer_0[BUFFER_LEN]; diff --git a/firmware/src/leds.cpp b/firmware/src/leds.cpp index 67c23ca..c96aa0d 100644 --- a/firmware/src/leds.cpp +++ b/firmware/src/leds.cpp @@ -56,34 +56,26 @@ void leds_init() { // clear output - rows clearShiftReg(ROW_SRCLK, ROW_SRCLR); pulsePin(ROW_RCLK); - - /* - // launch core1 - // NOTE: For some reason, without delay, core1 doesn't start? - delay(500); - multicore_reset_core1(); - multicore_launch_core1(main2); - */ } void leds_disable() { outputEnable(ROW_OE, false); } -void leds_loop() { - // game of life step - // auto now = millis(); - // if (now - frameLastChangedAt > 100) { - // frameLastChangedAt = now; - // life_step(); - // for (int y = 0; y < ROW_COUNT; y++) { - // for (int x = 0; x < COL_COUNT; x++) { - // framebuffer[y * ROW_COUNT + x] = cells[y * ROW_COUNT + x] ? 255 : 0; - // } - // } - // } +void main2() { + // where we're going, we don't need no interrupts + noInterrupts(); + while (true) { + leds_render(); + } +} - leds_render(); +void leds_initRenderer() { + // launch core1 + // NOTE: For some reason, without delay, core1 doesn't start? + // delay(500); + multicore_reset_core1(); + multicore_launch_core1(main2); } void leds_render() { @@ -153,7 +145,7 @@ void leds_render() { // show for a certain period outputEnable(ROW_OE, true); - delayMicroseconds(brightnessPhaseDelays[brightnessPhase]); + busy_wait_us_32(brightnessPhaseDelays[brightnessPhase]); outputEnable(ROW_OE, false); } diff --git a/firmware/src/leds.h b/firmware/src/leds.h index e38955a..6418118 100644 --- a/firmware/src/leds.h +++ b/firmware/src/leds.h @@ -23,6 +23,7 @@ #define MS_PER_FRAME 1000 / FPS void leds_init(); +void leds_initRenderer(); void leds_disable(); void leds_loop(); void leds_render(); diff --git a/firmware/src/main.cpp b/firmware/src/main.cpp index 296405e..5fc2e54 100644 --- a/firmware/src/main.cpp +++ b/firmware/src/main.cpp @@ -34,10 +34,12 @@ void setup() { Serial.println("Failed to load gfx blob"); while (true) {} } + + leds_initRenderer(); } void loop() { - sd_loadNextAudio(); + // sd_loadNextAudio(); // if (Serial.available() > 0) { // char c = Serial.read(); @@ -55,6 +57,4 @@ void loop() { if (!gfx_decoder_handleLoop()) { Serial.println("Failed to load frame..."); } - - leds_render(); } diff --git a/firmware/src/sd.cpp b/firmware/src/sd.cpp index a32dec9..2612d78 100644 --- a/firmware/src/sd.cpp +++ b/firmware/src/sd.cpp @@ -193,6 +193,7 @@ void sd_loadNextAudio() { } next_buffer_requested = false; + auto b4 = millis(); auto next_buffer = wav_buffer1_active ? &wav_buffer_0 : &wav_buffer_1; auto bytesRead = audioFile.read(next_buffer, BUFFER_LEN); @@ -202,7 +203,9 @@ void sd_loadNextAudio() { } else { Serial.print("Read "); Serial.print(bytesRead); - Serial.println(" bytes from audio file"); + Serial.print(" bytes from audio file in "); + Serial.print(millis() - b4); + Serial.println("ms"); } }