|
@@ -0,0 +1,122 @@
|
|
|
+
|
|
|
+#include <stdio.h>
|
|
|
+#include "freertos/FreeRTOS.h"
|
|
|
+#include "freertos/task.h"
|
|
|
+#include "driver/gpio.h"
|
|
|
+
|
|
|
+
|
|
|
+#define LED_RED GPIO_NUM_5
|
|
|
+#define LED_GREEN GPIO_NUM_2
|
|
|
+#define PushButton GPIO_NUM_14
|
|
|
+#define LED_BLUE GPIO_NUM_4
|
|
|
+#define LED_YELLOW GPIO_NUM_22
|
|
|
+
|
|
|
+SemaphoreHandle_t binSem ;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+static void IRAM_ATTR intrHandlePushButton(void *args){
|
|
|
+
|
|
|
+ BaseType_t xHigherPriorityTaskWoken ;
|
|
|
+ xHigherPriorityTaskWoken = pdFALSE;
|
|
|
+
|
|
|
+ gpio_set_level(LED_GREEN,1);
|
|
|
+ xSemaphoreGiveFromISR(binSem , &xHigherPriorityTaskWoken);
|
|
|
+ if (xHigherPriorityTaskWoken){
|
|
|
+ gpio_set_level(LED_GREEN,0);
|
|
|
+ portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ gpio_set_level(LED_GREEN,0);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void IRAM_ATTR intrHandleLEDYELLOW(void *args){
|
|
|
+
|
|
|
+
|
|
|
+ gpio_set_level(LED_YELLOW,1);
|
|
|
+ gpio_set_level(LED_YELLOW,0);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+void led_task_Red(void *pvParameter)
|
|
|
+{
|
|
|
+ while (1) {
|
|
|
+ gpio_set_level(LED_RED, 1);
|
|
|
+ gpio_set_level(LED_RED, 0);
|
|
|
+ printf("inside LED routine \n");
|
|
|
+ vTaskDelay(1);
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+ vTaskDelete( NULL );
|
|
|
+}
|
|
|
+
|
|
|
+void led_task_Intr(void *pvParameter)
|
|
|
+{
|
|
|
+ while (1) {
|
|
|
+ xSemaphoreTake(binSem,portMAX_DELAY);
|
|
|
+ gpio_set_level(LED_BLUE, 1);
|
|
|
+ gpio_set_level(LED_BLUE, 0);
|
|
|
+ printf("inside ISR routine\n");
|
|
|
+ vTaskDelay(1);
|
|
|
+}
|
|
|
+ vTaskDelete( NULL );
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+extern "C" void app_main() {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ gpio_set_direction(LED_RED, GPIO_MODE_OUTPUT);
|
|
|
+ gpio_set_direction(LED_GREEN,GPIO_MODE_OUTPUT);
|
|
|
+ gpio_set_direction(LED_BLUE,GPIO_MODE_OUTPUT);
|
|
|
+ gpio_set_direction(LED_YELLOW,GPIO_MODE_OUTPUT);
|
|
|
+ gpio_set_direction(PushButton , GPIO_MODE_INPUT);
|
|
|
+ gpio_set_level(PushButton,0);
|
|
|
+ gpio_set_level(LED_RED,0);
|
|
|
+ gpio_set_level(LED_GREEN,0);
|
|
|
+ gpio_set_level(LED_BLUE,0);
|
|
|
+ gpio_set_level(LED_YELLOW,0);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ gpio_set_intr_type(LED_RED,GPIO_INTR_POSEDGE);
|
|
|
+ gpio_install_isr_service(0);
|
|
|
+ gpio_isr_handler_add(LED_RED,intrHandlePushButton,NULL);
|
|
|
+
|
|
|
+ gpio_set_intr_type(LED_GREEN,GPIO_INTR_POSEDGE);
|
|
|
+ gpio_install_isr_service(1);
|
|
|
+ gpio_isr_handler_add(LED_GREEN,intrHandleLEDYELLOW,NULL);
|
|
|
+
|
|
|
+
|
|
|
+ binSem = xSemaphoreCreateBinary();
|
|
|
+ if (binSem != NULL){
|
|
|
+
|
|
|
+ xTaskCreate(
|
|
|
+ &led_task_Red,
|
|
|
+ "red_led_task",
|
|
|
+ 2048,
|
|
|
+ NULL,
|
|
|
+ 1,
|
|
|
+ NULL);
|
|
|
+ xTaskCreate(
|
|
|
+ &led_task_Intr,
|
|
|
+ "Intr_led_task",
|
|
|
+ 2048,
|
|
|
+ NULL,
|
|
|
+ 3,
|
|
|
+ NULL);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|