]> granicus.if.org Git - esp-idf/commitdiff
driver: add periph_ctrl support for SDMMC, SDIO slave, CAN, EMAC
authorIvan Grokhotkov <ivan@espressif.com>
Mon, 4 Sep 2017 10:12:15 +0000 (18:12 +0800)
committerIvan Grokhotkov <ivan@espressif.com>
Mon, 4 Sep 2017 14:43:51 +0000 (22:43 +0800)
components/driver/include/driver/periph_ctrl.h
components/driver/periph_ctrl.c

index eada30ef004fbbcbe453902baa2c8296247bd97c..cd09a78f533621eb24700eeacf8f8fa0062bf40a 100644 (file)
@@ -45,6 +45,10 @@ typedef enum {
     PERIPH_HSPI_MODULE,
     PERIPH_VSPI_MODULE,
     PERIPH_SPI_DMA_MODULE,
+    PERIPH_SDMMC_MODULE,
+    PERIPH_SDIO_SLAVE_MODULE,
+    PERIPH_CAN_MODULE,
+    PERIPH_EMAC_MODULE,
 } periph_module_t;
 
 /**
index 429239d38d0128d82195b054574037572cc0410d..72cecf9e09481d165576a38bef4675605a9cefdd 100644 (file)
@@ -111,7 +111,23 @@ void periph_module_enable(periph_module_t periph)
             break;
         case PERIPH_SPI_DMA_MODULE:
             DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_DMA_CLK_EN);
-            DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_DMA_RST );
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_DMA_RST);
+            break;
+        case PERIPH_SDMMC_MODULE:
+            DPORT_SET_PERI_REG_MASK(DPORT_WIFI_CLK_EN_REG, DPORT_WIFI_CLK_SDIO_HOST_EN);
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_CORE_RST_EN_REG, DPORT_SDIO_HOST_RST);
+            break;
+        case PERIPH_SDIO_SLAVE_MODULE:
+            DPORT_SET_PERI_REG_MASK(DPORT_WIFI_CLK_EN_REG, DPORT_WIFI_CLK_SDIOSLAVE_EN);
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_CORE_RST_EN_REG, DPORT_SDIO_RST);
+            break;
+        case PERIPH_CAN_MODULE:
+            DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
+            break;
+        case PERIPH_EMAC_MODULE:
+            DPORT_SET_PERI_REG_MASK(DPORT_WIFI_CLK_EN_REG, DPORT_WIFI_CLK_EMAC_EN);
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_CORE_RST_EN_REG, DPORT_EMAC_RST);
             break;
         default:
             break;
@@ -206,10 +222,27 @@ void periph_module_disable(periph_module_t periph)
         case PERIPH_VSPI_MODULE:
             DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_CLK_EN_2);
             DPORT_SET_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_RST_2);
+            break;
         case PERIPH_SPI_DMA_MODULE:
             DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_DMA_CLK_EN);
             DPORT_SET_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_DMA_RST);
             break;
+        case PERIPH_SDMMC_MODULE:
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_WIFI_CLK_EN_REG, DPORT_WIFI_CLK_SDIO_HOST_EN);
+            DPORT_SET_PERI_REG_MASK(DPORT_CORE_RST_EN_REG, DPORT_SDIO_HOST_RST);
+            break;
+        case PERIPH_SDIO_SLAVE_MODULE:
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_WIFI_CLK_EN_REG, DPORT_WIFI_CLK_SDIOSLAVE_EN);
+            DPORT_SET_PERI_REG_MASK(DPORT_CORE_RST_EN_REG, DPORT_SDIO_RST);
+            break;
+        case PERIPH_CAN_MODULE:
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
+            DPORT_SET_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
+            break;
+        case PERIPH_EMAC_MODULE:
+            DPORT_CLEAR_PERI_REG_MASK(DPORT_WIFI_CLK_EN_REG, DPORT_WIFI_CLK_EMAC_EN);
+            DPORT_SET_PERI_REG_MASK(DPORT_CORE_RST_EN_REG, DPORT_EMAC_RST);
+            break;
         default:
             break;
     }