コード例 #1
0
ファイル: gpio.c プロジェクト: aliince77/esp32_playground
void gpio_config(GPIO_ConfigTypeDef *pGPIOConfig)
{
    uint32 gpio_pin_mask = pGPIOConfig->GPIO_Pin;
    uint32 gpio_pin_mask_high = pGPIOConfig->GPIO_Pin_high;
    uint32 io_reg;
    uint8 io_num = 0;
    uint32 pin_reg;
    uint32 bit_valid;

    if (pGPIOConfig->GPIO_Mode == GPIO_Mode_Input) {
        GPIO_AS_INPUT(gpio_pin_mask);
        GPIO_AS_INPUT_HIGH(gpio_pin_mask_high);
    } else if (pGPIOConfig->GPIO_Mode == GPIO_Mode_Output) {
        GPIO_AS_OUTPUT(gpio_pin_mask);
        GPIO_AS_OUTPUT_HIGH(gpio_pin_mask_high);
    }

    do {
        bit_valid = (io_num >= 32 ? (gpio_pin_mask_high & (0x1 << (io_num - 32))) : (gpio_pin_mask & (0x1 << io_num)));

        if (bit_valid && (io_reg = GPIO_PIN_REG[io_num])) {
            if (pGPIOConfig->GPIO_Mode == GPIO_Mode_Input) {
                SET_PERI_REG_MASK(io_reg, FUN_IE);
            }

            //for ESP32 function 2 of every pad is allways GPIO func
            PIN_FUNC_SELECT(io_reg, 2);

            if (pGPIOConfig->GPIO_Pullup) {
                PIN_PULLUP_EN(io_reg);
            } else {
                PIN_PULLUP_DIS(io_reg);
            }

            if (pGPIOConfig->GPIO_Pulldown) {
                PIN_PULLDWN_EN(io_reg);
            } else {
                PIN_PULLDWN_DIS(io_reg);
            }

            if (pGPIOConfig->GPIO_Mode == GPIO_Mode_Out_OD) {
                portENTER_CRITICAL();

                pin_reg = GPIO_REG_READ(GPIO_PIN_ADDR(io_num));
                //pin_reg &= (~GPIO_GPIO_PIN0_PAD_DRIVER);
                pin_reg |= GPIO_GPIO_PIN0_PAD_DRIVER;
                GPIO_REG_WRITE(GPIO_PIN_ADDR(io_num), pin_reg);

                portEXIT_CRITICAL();
            }

            gpio_pin_intr_state_set(io_num, pGPIOConfig->GPIO_IntrType);
        }

        io_num++;
    } while (io_num < GPIO_PIN_COUNT);
}
コード例 #2
0
ファイル: user_main.c プロジェクト: sparkfun/ESP32_Miscellany
////////////////////////////////////////////
// user_init - Entry point of application //
////////////////////////////////////////////
void user_init(void)
{
    // Set the LED as an output, turn it off:
    GPIO_AS_OUTPUT(LED_PIN);
    GPIO_OUTPUT_SET(LED_PIN, 0);

    // Configure the UART, print a message:
    UART_SetBaudrate(UART0, BIT_RATE_115200);
    printf("SDK version:%s\n", system_get_sdk_version());

    // Connect to WiFi:
    connectWiFi();
}
コード例 #3
0
ファイル: TM1637Display.cpp プロジェクト: sonofusion82/TM1637
static void pinMode(uint8_t pin, uint8_t mode)
{
    if (pin < 16) // only for GPIO0 to GPIO15, GPIO16 is special
    {
        if (mode == OUTPUT)
        {
            GPIO_AS_OUTPUT(1 << pin);
        }
        else // INPUT
        {
            GPIO_AS_INPUT(1 << pin);
        }
    }
}
コード例 #4
0
ファイル: user_main.c プロジェクト: markbeee/ESP32_Examples
void user_init(void)
{
	GPIO_AS_OUTPUT(LED_PIN); // Set LED as output
	GPIO_OUTPUT_SET(LED_PIN,1);
	blinkIntervalTimer(interval);
}
コード例 #5
0
/**************************************************************
 *  Name                 :	export_func
 *  Description          :
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :
 *  Critical/explanation :    [yes / No]
 **************************************************************/
void PELC_TurnOff(T_UBYTE lub_pcr){
	GPIO_AS_OUTPUT(lub_pcr);
	OUTPUT_LOW(lub_pcr);
}
コード例 #6
0
/**************************************************************
 *  Name                 :	export_func
 *  Description          :
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :
 *  Critical/explanation :    [yes / No]
 **************************************************************/
void PELC_TurnOnFull(T_UBYTE lub_pcr){
	GPIO_AS_OUTPUT(lub_pcr);
	OUTPUT_HIGH(lub_pcr);
}