bitluni / ULPSoundESP32

176 stars 26 forks source link

Guru Meditation Error: Core 1 panic'ed (Interrupt wdt timeout on CPU1) #7

Open fanlessfan opened 3 years ago

fanlessfan commented 3 years ago

Hello,

the ULPSound is fantastic. But I got error "Guru Meditation Error: Core 1 panic'ed" when I try the stereo sound for a minute or two. the Mono example is perfect. I tried to change the sound for Mono. it's perfect when it's short and got the same error if it's long.

Could you give some advice ?

thx

fanlessfan commented 3 years ago

after around 30 seconds it keep rebooting. I have to press the reset button to have it work for anther 30s. Please see the serial logs bellow.

thx

11:26:24.080 -> ets Jun 8 2016 00:22:57 11:26:24.080 -> 11:26:24.080 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) 11:26:24.080 -> configsip: 0, SPIWP:0xee 11:26:24.080 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 11:26:24.080 -> mode:DIO, clock div:1 11:26:24.080 -> load:0x3fff0018,len:4 11:26:24.080 -> load:0x3fff001c,len:1216 11:26:24.080 -> ho 0 tail 12 room 4 11:26:24.080 -> load:0x40078000,len:10944 11:26:24.080 -> load:0x40080400,len:6388 11:26:24.080 -> entry 0x400806b4 11:26:24.408 -> 1006 11:26:24.408 -> Total stereo samples :Buffer length: 0.023 11:26:24.455 -> Real RTC clock: 8704610 11:26:48.671 -> Guru Meditation Error: Core 1 panic'ed (Interrupt wdt timeout on CPU1) 11:26:48.671 -> Core 1 register dump: 11:26:48.671 -> PC : 0x4000c271 PS : 0x00060034 A0 : 0x800869f4 A1 : 0x3ffb36c0
11:26:48.671 -> A2 : 0x3ffb2068 A3 : 0x3f4f2530 A4 : 0x00000014 A5 : 0x3ffbef90
11:26:48.671 -> A6 : 0x3ffbefd8 A7 : 0x00000001 A8 : 0x00000001 A9 : 0x3f4f2531
11:26:48.671 -> A10 : 0x000000a5 A11 : 0x00000000 A12 : 0x80087583 A13 : 0x3ffbef60
11:26:48.671 -> A14 : 0x00000008 A15 : 0x00000001 SAR : 0x00000014 EXCCAUSE: 0x00000006
11:26:48.706 -> EXCVADDR: 0x00000000 LBEG : 0x400d0fe2 LEND : 0x400d0fe7 LCOUNT : 0x00000000
11:26:48.706 -> 11:26:48.706 -> ELF file SHA256: 0000000000000000 11:26:48.706 -> 11:26:48.706 -> Backtrace: 0x4000c271:0x3ffb36c0 0x400869f1:0x3ffb36e0 0x40088368:0x3ffb3700 0x4008831e:0x3ff000e0 11:26:48.706 -> 11:26:48.706 -> Core 0 register dump: 11:26:48.706 -> PC : 0x400ea31a PS : 0x00060f34 A0 : 0x800e093e A1 : 0x3ffbc0c0
11:26:48.706 -> A2 : 0x00000000 A3 : 0x00000001 A4 : 0x00000000 A5 : 0x00000001
11:26:48.706 -> A6 : 0x00060120 A7 : 0x00000000 A8 : 0x800e0446 A9 : 0x3ffbc090
11:26:48.752 -> A10 : 0x00000000 A11 : 0x40083ee8 A12 : 0x00060120 A13 : 0x3ffbb820
11:26:48.752 -> A14 : 0x3ffc005c A15 : 0x3ffc0060 SAR : 0x00000000 EXCCAUSE: 0x00000006
11:26:48.752 -> EXCVADDR: 0x00000000 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000
11:26:48.752 -> 11:26:48.752 -> ELF file SHA256: 0000000000000000 11:26:48.752 -> 11:26:48.752 -> Backtrace: 0x400ea31a:0x3ffbc0c0 0x400e093b:0x3ffbc0e0 0x40087572:0x3ffbc100 0x400860dd:0x3ffbc120 11:26:48.752 -> 11:26:48.752 -> Rebooting... 11:26:48.799 -> ets Jun 8 2016 00:22:57 11:26:48.799 -> 11:26:48.799 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) 11:26:48.799 -> configsip: 0, SPIWP:0xee 11:26:48.799 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 11:26:48.799 -> mode:DIO, clock div:1 11:26:48.799 -> load:0x3fff0018,len:4 11:26:48.799 -> load:0x3fff001c,len:1216 11:26:48.799 -> ho 0 tail 12 room 4 11:26:48.799 -> load:0x40078000,len:10944 11:26:48.799 -> load:0x40080400,len:6388 11:26:48.799 -> entry 0x400806b4 11:26:49.174 -> 1006 11:26:49.174 -> Total stereo samples :Buffer length: 0.023 11:26:49.268 -> Guru Meditation Error: Core 1 panic'ed (IntegerDivideByZero). Exception was unhandled. 11:26:49.268 -> Core 1 register dump: 11:26:49.268 -> PC : 0x4000d099 PS : 0x00060430 A0 : 0x800d0da7 A1 : 0x3ffb3730
11:26:49.268 -> A2 : 0x00000000 A3 : 0x00007a12 A4 : 0x00000000 A5 : 0x00000000
11:26:49.268 -> A6 : 0x00000001 A7 : 0x3ffb0060 A8 : 0x00000001 A9 : 0x00007a12
11:26:49.268 -> A10 : 0x00000000 A11 : 0x00000000 A12 : 0x00000000 A13 : 0x00004e1f
11:26:49.268 -> A14 : 0x00000000 A15 : 0x3ffb8440 SAR : 0x00000010 EXCCAUSE: 0x00000006
11:26:49.268 -> EXCVADDR: 0x00000000 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000
11:26:49.268 -> 11:26:49.268 -> ELF file SHA256: 0000000000000000 11:26:49.268 -> 11:26:49.268 -> Backtrace: 0x4000d099:0x3ffb3730 0x400d0da4:0x3ffb3750 0x400d1057:0x3ffb37c0 0x400860dd:0x3ffb37e0 11:26:49.268 -> 11:26:49.268 -> Rebooting...

Martin-Laclaustra commented 3 years ago

I integrated this code in ESP8266Audio. You might try that. https://github.com/earlephilhower/ESP8266Audio/pull/340

fanlessfan commented 3 years ago

Thank you @Martin-Laclaustra. Could you point me which sample is using the ULP sound? https://github.com/earlephilhower/ESP8266Audio/tree/master/examples

Martin-Laclaustra commented 3 years ago

These are the generic instructions:

//Instructions:
AudioOutputULP out = new AudioOutputULP(); // stereo
//Connect left channel on pin 25
//Connect right channel on pin 26
//OR
//Connect mono channel on either of them (stereo samples are downmixed)
AudioOutputULP out = new AudioOutputULP(1); // mono, only DAC 1
//OR
AudioOutputULP out = new AudioOutputULP(2); // mono, only DAC 2

Just pick any example, include the AudioOutputULP.h file and replace the output object.

I would recommend starting with: PlayWAVFromPROGMEM.ino

Replace line 10 with #include "AudioOutputULP.h"

Then replace line 17 as follows: AudioOutputULP *out; and line 28: out = new AudioOutputULP();

fanlessfan commented 3 years ago

Thank you @Martin-Laclaustra. I successfully run your talkingClock with AudioOutputULP, but it keep rebooting again if I use timer to call the sound every minute. Do you think ULP works with timer call?

thx

Martin-Laclaustra commented 3 years ago

It seems that you are trying to run too many instructions within the timer interrupt. Use the timer only to modify a system-wide flag. Check that flag in the main loop and act accordingly to its status.

fanlessfan commented 3 years ago

Thanks @Martin-Laclaustra. do you think what is the best way to implement talkingClock to let it speak every hour or any pre-configured interval if we can't use timer to call the saytime() function. I am currently use timer call every minute to update the clock handles in a VGA monitor.

Martin-Laclaustra commented 3 years ago

Use CronAlarms, which runs by pooling in the main loop (without interrupts). You can set several Alarms (so you can have one for every minute to update the display and one for every hour to say the time). Check the issues section to find tips on how to operate it with the SDK NTP system. Isn't a VGA monitor permanently on overkill for a clock project? Are you using ESP32Lib? (In the later case, use the development branch, and include ESP32Video.h instead of the whole ESP32Lib.h because you will be controlling the sound with a different library)

fanlessfan commented 3 years ago

Thank you @Martin-Laclaustra for the suggestion. Yes I use ESP32Lib and have remove the audio part from it. only include ESP32Video.h is very good suggestion. I just want to re-use a dust-covered monitor so far. not sure if it's permanent on or not ;-o)