#ifndef _MRBC_GPIO_H #define _MRBC_GPIO_H #include "ch32fun.h" #include "mrubyc.h" #if defined(CH32X03x) //PA 0-23 0-23 //PB 0-23 24-47 //PC 0-23 48-71 #define GpioOf2( pin ) ((GPIO_TypeDef *)(GPIOA_BASE + 0x400 * ((pin)/24))) #define funDigitalWrite2( pin, value ) do{ *((&GpioOf2(pin)->BSHR)+((pin%24)>>4<<2)) = 1<<(((value)?0:16)+((pin%24)&0xf));}while(0) #define funDigitalRead2( pin ) ((int)((GpioOf2(pin)->INDR >> ((pin)%24)) & 1)) #define funPinMode2( pin, mode) do{ volatile uint32_t *p = (&GpioOf2(pin)->CFGLR)+((pin%24)>>3)+(((pin%24)>>4)*5); *p&=~(0xf<<(((pin)&0x7)<<2)); *p|=((mode)<<(((pin)&0x7)<<2)); }while(0) #else //PA 0-15 0-15 //PB 0-15 16-31 //PC 0-15 32-47 #define GpioOf2( pin ) GpioOf(pin) #define funDigitalWrite2( pin, value ) funDigitalWrite( pin, value ) #define funDigitalRead2( pin ) funDigitalRead( pin ) #define funPinMode2( pin, mode) funPinMode( pin, mode) #endif typedef struct GPIO_HANDLE { uint8_t pin_num; } GPIO_HANDLE; void mrbc_init_class_digital(void); #endif