#include #include #include #include "ulp_riscv.h" #include "ulp_riscv_utils.h" #include "ulp_riscv_gpio.h" #include "soc/rtc_io_reg.h" #include "ulp_riscv_register_ops.h" #define HUB75_OE_CAPTRUE__RTC_PIN_NUM GPIO_NUM_18 #define HUB75_LINE_ADDR_A_RTC_PIN_NUM GPIO_NUM_16 #define HUB75_LINE_ADDR_B_RTC_PIN_NUM GPIO_NUM_15 #define HUB75_LINE_ADDR_C_RTC_PIN_NUM GPIO_NUM_14 #define HUB75_LINE_ADDR_D_RTC_PIN_NUM GPIO_NUM_13 #define OE_CAPTRUE_RTC_PIN_NUM_REG_BIT (1 << (HUB75_OE_CAPTRUE__RTC_PIN_NUM + 10)) volatile int set_addr_request = 0; volatile int oe_disable_val = 1; volatile int addr_reg_bit_val = 0; int main (void) { if (oe_disable_val) goto OE_HIGH_DISABLE; else goto OE_LOW_DISABLE; OE_HIGH_DISABLE: while(1) { while (!set_addr_request); /* 等待地址设置请求 */ while (!(REG_READ(RTC_GPIO_IN_REG) & OE_CAPTRUE_RTC_PIN_NUM_REG_BIT)); /* 等待oe高电平disable信号 */ REG_WRITE(RTC_GPIO_OUT_REG, addr_reg_bit_val); /* CPU程序应采用读修改写方式,防止影响寄存器其他位 */ set_addr_request = 0; } OE_LOW_DISABLE: while(1) { while (!set_addr_request); while ((REG_READ(RTC_GPIO_IN_REG) & OE_CAPTRUE_RTC_PIN_NUM_REG_BIT)); /* 等待oe低电平disable信号 */ REG_WRITE(RTC_GPIO_OUT_REG, addr_reg_bit_val); set_addr_request = 0; } return 0; }