ESP32の入力に関するレジスタは中々

厄介です。

 

 MUXのレジスタは、低電圧のプルアップ設定はありますが、

通常のプルアップの設定はありません。

でも、Arduinoでは、プルアップ&プルダウンは

問題なく動作します。

 

 レジスタを確認すると、RTCレジスタにその設定ビットは

ありましたが、マニュアルには書いていない。

 そんな感じのCPUだといまさらながらに見ています。

いろんなことができてすごいと思いますが・・・。

 

以下は、IO34、IO35の状態によりIO25,IO26の出力を変えるプログラム。

プルアップ・ダウンは外部で配線を想定のプログラムです。

 

 

 

 

#define GPIO_OUT_REG (*(volatile uint32_t*)0x3FF44004)/* GPIO0-31 */
#define GPIO_OUT_W1TS_REG (*(volatile uint32_t*)0x3FF44008)/* GPIO0-31 */
#define GPIO_OUT_W1TC_REG (*(volatile uint32_t*)0x3FF4400C)/* GPIO0-31 */
#define GPIO_ENABLE_REG (*(volatile uint32_t*)0x3FF44020)/* GPIO0-31 */
#define GPIO_ENABLE_W1TS_REG (*(volatile uint32_t*)0x3FF44024)/* GPIO0-31 */
#define GPIO_ENABLE_W1TC_REG (*(volatile uint32_t*)0x3FF44028)/* GPIO0-31 */
#define IO_MUX_25_REG (*(volatile uint32_t*)(0x3FF49024)) /* GPIO25 */
#define IO_MUX_26_REG (*(volatile uint32_t*)(0x3FF49028)) /* GPIO26 */
#define GPIO_IN1_REG (*(volatile uint32_t*)0x3FF44040) /* GPIO32-39*/
#define IO_MUX_34_REG (*(volatile uint32_t*)(0x3FF49014)) /**/
#define IO_MUX_35_REG (*(volatile uint32_t*)(0x3FF49018)) /**/


void setup() {
  IO_MUX_34_REG = (((uint32_t)0x02) << 12) | ((uint32_t)0x01 << 9);
  IO_MUX_35_REG = (((uint32_t)0x02) << 12) | ((uint32_t)0x01 << 9);
  IO_MUX_25_REG = (((uint32_t)0x02) << 12);
  IO_MUX_26_REG = (((uint32_t)0x02) << 12);
  GPIO_ENABLE_W1TS_REG = ( (uint32_t)0x01 << 25) | ((uint32_t)0x01 << 26) ;
}


void loop() {
  if( GPIO_IN1_REG & ((uint32_t)0x01 << (34-32)) ){
    GPIO_OUT_W1TC_REG |= ((uint32_t)0x01 << 25); /* IO25 Clear */
  } else {
    GPIO_OUT_W1TS_REG |= ((uint32_t)0x01 << 25); /* IO25 Set */
  }
  if( GPIO_IN1_REG & ((uint32_t)0x01 << (35-32)) ){
    GPIO_OUT_W1TC_REG |= ((uint32_t)0x01 << 26); /* IO26 Clear */
  } else {
    GPIO_OUT_W1TS_REG |= ((uint32_t)0x01 << 26); /* IO26 Set */
  }
}