Page 1 of 1

Panic with Wifi and Timer Interrupt

Posted: Sat Aug 11, 2018 2:44 pm
by gr1483
Hi All,

Sorry if this is a silly question, i have been working with my ESP32 and GPIO, and i have just started to add wifi to it. However, it keeps Panic'ing.

I have tracked it down to setting a pin level in the timer interrupt:

I have put my code below:

Code: Select all

void IRAM_ATTR timer_group0_isr0(void *para) {
  int timer_idx = (int) para;

    /* Retrieve the interrupt status and the counter value
       from the timer that reported the interrupt */

  	  uint32_t intr_status = TIMERG0.int_st_timers.val;


    /* Clear the interrupt
       and update the alarm time for the timer with without reload */

  if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_0) {

	  timer10us |= (option0);
	  cnt++;
	  if (cnt > 2499) {
		  cnt = 0;
		  timer25ms |= (option0 | option1);
	  }

	  TIMERG0.int_clr_timers.t0 = 1;
	  TIMERG0.hw_timer[0].config.alarm_en = TIMER_ALARM_EN;
  } else if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_1) {
	 //38khz
	if (IRCarrierWave==0) {
			gpio_set_level(IRCarrierPin, 1);
			IRCarrierWave = 1;
			} else {
			gpio_set_level(IRCarrierPin, 0);
			IRCarrierWave = 0;
			}
			TIMERG0.int_clr_timers.t1 = 1;
		/* After the alarm has been triggered
		  we need enable it again, so it is triggered the next time */
			TIMERG0.hw_timer[1].config.alarm_en = TIMER_ALARM_EN;
	}
}



void inittimers() {

			      	  timer_config_t config;
			          config.divider = TIMER_DIVIDER;
			          config.counter_dir = TIMER_COUNT_UP;
			          config.counter_en = TIMER_PAUSE;
			          config.alarm_en = TIMER_ALARM_EN;
			          config.intr_type = TIMER_INTR_LEVEL;
			          config.auto_reload = TIMER_AUTORELOAD_EN;
			          timer_init(TIMER_GROUP_0, 0, &config);
			          timer_init(TIMER_GROUP_0, 1, &config);

			          /* Timer's counter will initially start from value below.
			             Also, if auto_reload is set, this value will be automatically reload on alarm */
			          timer_set_counter_value(TIMER_GROUP_0, 0, 0x00000000ULL);
			          timer_set_counter_value(TIMER_GROUP_0, 1, 0x00000000ULL);


			      	//Setting up Timer 0.0 for 25ms

			          /* Configure the alarm value and the interrupt on alarm. */
			          timer_set_alarm_value(TIMER_GROUP_0, 0, (TIMER_INTERVAL0x0_SEC * TIMER_SCALE));
			          timer_enable_intr(TIMER_GROUP_0,0);
			          //										Function	Parameters	Run in Iram			Null
			          timer_isr_register(TIMER_GROUP_0, 0, timer_group0_isr0,(void *) 0, ESP_INTR_FLAG_IRAM, NULL);
			          timer_start(TIMER_GROUP_0, 0);

	//Setting up Timer 0.1 for 38khz

		          /* Configure the alarm value and the interrupt on alarm. */
		          timer_set_alarm_value(TIMER_GROUP_0, 1, (TIMER_INTERVAL0x1_SEC * TIMER_SCALE));
		          timer_enable_intr(TIMER_GROUP_0, 1);
		          //										Function	Parameters	Run in Iram			Null
		          timer_isr_register(TIMER_GROUP_0, 1, timer_group0_isr0,(void *) 1, ESP_INTR_FLAG_IRAM, NULL);
		          timer_start(TIMER_GROUP_0, 1);

}

Code: Select all

void app_main()
{


	 //   Initialize NVS
	    esp_err_t ret = nvs_flash_init();
	  if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
	     ESP_ERROR_CHECK(nvs_flash_erase());
	    ret = nvs_flash_init();
	  }
	  ESP_ERROR_CHECK(ret);

	  printf("Setting up Wifi\n");
	    vTaskDelay(500 / portTICK_PERIOD_MS);
	  wifi_init_sta();

	    inittimers();
	    vTaskDelay(25 / portTICK_PERIOD_MS);
}

If i comment out the inittimers() function the module connects to wifi, if i comment out the wifi_init_sta(); the timer runs fine, but when i have both, they panic, with the following:

Code: Select all

[color=#008000]I (0) cpu_start: App cpu up.
I (376) heap_init: Initializing. RAM available for dynamic allocation:
I (383) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (389) heap_init: At 3FFB94F0 len 00026B10 (154 KiB): DRAM
I (395) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM
I (401) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (408) heap_init: At 40090548 len 0000FAB8 (62 KiB): IRAM
I (414) cpu_start: Pro cpu start user code
I (96) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
Setting up Wifi
I (1185) wifi: wifi driver task: 3ffc0474, prio:23, stack:3584, core=0
I (1186) wifi: wifi firmware version: 202823a
I (1186) wifi: config NVS flash: enabled
I (1188) wifi: config nano formating: disabled
I (1193) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (1202) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (1235) wifi: Init dynamic tx buffer num: 32
I (1235) wifi: Init data frame dynamic rx buffer num: 32
I (1235) wifi: Init management frame dynamic rx buffer num: 32
I (1239) wifi: Init static rx buffer size: 1600
I (1243) wifi: Init static rx buffer num: 10
I (1247) wifi: Init dynamic rx buffer num: 32
I (1335) phy: phy_version: 3960, 5211945, Jul 18 2018, 10:40:07, 0, 0
I (1337) wifi: mode : sta (30:ae:a4:06:3d:ec)
I (1338) simple wifi: wifi_init_sta finished.
I (1340) simple wifi: connect to ap SSID:Veqtor password:Veqtor01428!
I (1348) gpio: GPIO[12]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1357) gpio: GPIO[13]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1366) gpio: GPIO[14]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1376) gpio: GPIO[17]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1385) gpio: GPIO[27]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1394) gpio: GPIO[32]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
Initialising Timers!
I (1461) wifi: n:11 0, o:1 0, ap:255 255, sta:11 0, prof:1
I (3560) wifi: state: init -> auth (b0)
I (3570) wifi: state: auth -> assoc (0)
I (3575) wifi: state: assoc -> run (10)
I (3591) wifi: connected with Veqtor, channel 11
Guru Meditation Error: Core  0 panic'ed (Cache disabled but cached memory region accessed)
Core 0 register dump:
PC      : 0x400e6b70  PS      : 0x00060034  A0      : 0x40082538  A1      : 0x3ffb05f0
0x400e6b70: gpio_set_level at D:/msys32/home/Simon/esp/esp-idf/components/driver/gpio.c:238

0x40082538: _xt_lowint1 at D:/msys32/home/Simon/esp/esp-idf/components/freertos/xtensa_vectors.S:1105

A2      : 0x00000001  A3      : 0x3ffc01e0  A4      : 0x00000020  A5      : 0x4008cf98
0x4008cf98: _frxt_int_enter at D:/msys32/home/Simon/esp/esp-idf/components/freertos/portasm.S:119

A6      : 0x00000001  A7      : 0x00000000  A8      : 0x80082cca  A9      : 0x00000000
A10     : 0x00000011  A11     : 0x00000000  A12     : 0x80083ac9  A13     : 0x3ffbff70
A14     : 0x00000026  A15     : 0x3ffb43d0  SAR     : 0x00000001  EXCCAUSE: 0x00000007
EXCVADDR: 0x00000000  LBEG    : 0x4000164d  LEND    : 0x40001667  LCOUNT  : 0xfffffffd
Core 0 was running in ISR context:
EPC1    : 0x400835a9  EPC2    : 0x00000000  EPC3    : 0x00000000  EPC4    : 0x400e6b70
0x400835a9: esp_ptr_internal at D:/msys32/home/Simon/esp/esp-idf/components/soc/include/soc/soc_memory_layout.h:136 (discriminator 4)
 (inlined by) spi_flash_read at D:/msys32/home/Simon/esp/esp-idf/components/spi_flash/flash_ops.c:527 (discriminator 4)

0x400e6b70: gpio_set_level at D:/msys32/home/Simon/esp/esp-idf/components/driver/gpio.c:238


Backtrace: 0x400e6b70:0x3ffb05f0 0x40082535:0x3ffb0610 0x400835a6:0x00000000
0x400e6b70: gpio_set_level at D:/msys32/home/Simon/esp/esp-idf/components/driver/gpio.c:238

0x40082535: _xt_lowint1 at D:/msys32/home/Simon/esp/esp-idf/components/freertos/xtensa_vectors.S:1105

0x400835a6: esp_ptr_internal at D:/msys32/home/Simon/esp/esp-idf/components/soc/include/soc/soc_memory_layout.h:136 (discriminator 4)
 (inlined by) spi_flash_read at D:/msys32/home/Simon/esp/esp-idf/components/spi_flash/flash_ops.c:527 (discriminator 4)


Rebooting...
ets Jun  8 2016 00:22:57[/color]

Any help would be much appreciated.

Thanks