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 */
}
}