Question: Create a new project based on the RTOS SDK example titled gpio. This example is setup to use 4 pins, 2 inputs, and 2 outputs.

Create a new project based on the RTOS SDK example titled "gpio". This example is setup to use 4 pins, 2 inputs, and 2 outputs. Adjust the example, using appropriate coding standards, so that:
(a) Only a single input and a single output are specified, and the input and output pins selected are consistent with available pins on the ESP-01S
(b) A single handler is installed and used for the input on the falling edge.


#include

#include

#include



#include "freertos/FreeRTOS.h"

#include "freertos/task.h"

#include "freertos/queue.h"



#include "driver/gpio.h"



#include "esp_log.h"

#include "esp_system.h"



static const char *TAG = "main";



/**

 * Brief:

 * This test code shows how to configure gpio and how to use gpio interrupt.

 *

 * GPIO status:

 * GPIO15: output

 * GPIO16: output

 * GPIO4:  input, pulled up, interrupt from the rising edge and falling edge

 * GPIO5:  input, pulled up, interrupt from the rising edge.

 *

 * Test:

 * Connect GPIO15 with GPIO4

 * Connect GPIO16 with GPIO5

 * Generate pulses on GPIO15/16, that triggers interrupt on GPIO4/5

 *

 */



#define GPIO_OUTPUT_IO_0    15

#define GPIO_OUTPUT_IO_1    16

#define GPIO_OUTPUT_PIN_SEL  ((1ULL<

#define GPIO_INPUT_IO_0     4

#define GPIO_INPUT_IO_1     5

#define GPIO_INPUT_PIN_SEL  ((1ULL<



static xQueueHandle gpio_evt_queue = NULL;



static void gpio_isr_handler(void *arg)

{

    uint32_t gpio_num = (uint32_t) arg;

    xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL);

}



static void gpio_task_example(void *arg)

{

    uint32_t io_num;



    for (;;) {

        if (xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) {

            ESP_LOGI(TAG, "GPIO[%d] intr, val: %d", io_num, gpio_get_level(io_num));

        }

    }

}



void app_main(void)

{

    gpio_config_t io_conf;

    //disable interrupt

    io_conf.intr_type = GPIO_INTR_DISABLE;

    //set as output mode

    io_conf.mode = GPIO_MODE_OUTPUT;

    //bit mask of the pins that you want to set,e.g.GPIO15/16

    io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;

    //disable pull-down mode

    io_conf.pull_down_en = 0;

    //disable pull-up mode

    io_conf.pull_up_en = 0;

    //configure GPIO with the given settings

    gpio_config(&io_conf);



    //interrupt of rising edge

    io_conf.intr_type = GPIO_INTR_POSEDGE;

    //bit mask of the pins, use GPIO4/5 here

    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;

    //set as input mode

    io_conf.mode = GPIO_MODE_INPUT;

    //enable pull-up mode

    io_conf.pull_up_en = 1;

    gpio_config(&io_conf);



    //change gpio intrrupt type for one pin

    gpio_set_intr_type(GPIO_INPUT_IO_0, GPIO_INTR_ANYEDGE);



    //create a queue to handle gpio event from isr

    gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t));

    //start gpio task

    xTaskCreate(gpio_task_example, "gpio_task_example", 2048, NULL, 10, NULL);



    //install gpio isr service

    gpio_install_isr_service(0);

    //hook isr handler for specific gpio pin

    gpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void *) GPIO_INPUT_IO_0);

    //hook isr handler for specific gpio pin

    gpio_isr_handler_add(GPIO_INPUT_IO_1, gpio_isr_handler, (void *) GPIO_INPUT_IO_1);



    //remove isr handler for gpio number.

    gpio_isr_handler_remove(GPIO_INPUT_IO_0);

    //hook isr handler for specific gpio pin again

    gpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void *) GPIO_INPUT_IO_0);



    int cnt = 0;



    while (1) {

        ESP_LOGI(TAG, "cnt: %d", cnt++);

        vTaskDelay(1000 / portTICK_RATE_MS);

        gpio_set_level(GPIO_OUTPUT_IO_0, cnt % 2);

        gpio_set_level(GPIO_OUTPUT_IO_1, cnt % 2);

    }

}



Step by Step Solution

3.40 Rating (166 Votes )

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock

Heres the modified code for the gpio example in the RTOS SDK include ... View full answer

blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Computer Engineering Questions!