mcu_ab568x/userboot240328/app/platform/header/io_def.h
2025-05-30 18:03:10 +08:00

549 lines
28 KiB
C

#ifndef __IO_DEF_H
#define __IO_DEF_H
#include "global.h"
#include "config.h"
#include "sfr.h"
#if (SD0_MAPPING == SD0MAP_G1)
//SDCLK(PB0), SDCMD(PB1), SDDAT0(PB2)
#define SD_MUX_IO_INIT() {GPIOBDE |= BIT(0)|BIT(1)|BIT(2);\
GPIOBCLR = BIT(0);\
GPIOBDIR &= ~BIT(0);\
GPIOBPU &= ~BIT(0);\
GPIOBDIR |= BIT(1) | BIT(2);\
GPIOBPU |= BIT(1) | BIT(2);\
GPIOBFEN |= BIT(1) | BIT(2);\
FUNCMCON0 = SD0MAP_G1;}
#define SD_IO_INIT() {GPIOBDE |= BIT(0)|BIT(1)|BIT(2);\
GPIOBDIR &= ~BIT(0);\
GPIOBDIR |= BIT(1) | BIT(2);\
GPIOBPU |= BIT(1) | BIT(2);\
GPIOBFEN |= BIT(1) | BIT(2);\
FUNCMCON0 = SD0MAP_G1;}
#define SD_CLK_DIR_IN() {GPIOBDIR |= BIT(0); GPIOBPU |= BIT(0);}
#define SD_CLK_IN_DIS_PU10K() {GPIOBDIR |= BIT(0); GPIOBPU &= ~BIT(0);}
#define SD_CLK_DIR_OUT() {GPIOBPU &= ~BIT(0); GPIOBDIR &= ~BIT(0);}
#define SD_MUX_DETECT_INIT() {GPIOBDE |= BIT(0); GPIOBPU |= BIT(0); GPIOBDIR |= BIT(0);}
#define SD_MUX_IS_ONLINE() ((GPIOB & BIT(0)) == 0)
#define SD_MUX_IS_BUSY() ((GPIOBDIR & BIT(0)) == 0)
#define SD_MUX_CMD_IS_BUSY() (GPIOBPU300 & BIT(1))
#define SD_CMD_MUX_PU300R() {GPIOBPU300 |= BIT(1); GPIOBPU &= ~BIT(1);}
#define SD_CMD_MUX_PU10K() {GPIOBPU |= BIT(1); GPIOBPU300 &= ~BIT(1);}
#define SD_DAT_MUX_PU300R() {GPIOBPU300 |= BIT(2); GPIOBPU &= ~BIT(2);}
#define SD_DAT_MUX_PU10K() {GPIOBPU |= BIT(2); GPIOBPU300 &= ~BIT(2);}
#define SD_CMD_MUX_IS_ONLINE() ((GPIOB & BIT(1)) == 0)
#define SD_CLK_OUT_H() {GPIOBSET = BIT(0);}
#define SD_CLK_OUT_L() {GPIOBCLR = BIT(0);}
#define SD_CLK_STA() (GPIOB & BIT(0))
#define SD_DAT_DIR_OUT() {GPIOBDE |= BIT(2); GPIOBDIR &= ~BIT(2);}
#define SD_DAT_DIR_IN() {GPIOBDIR |= BIT(2); GPIOBPU |= BIT(2);}
#define SD_DAT_OUT_H() {GPIOBSET = BIT(2);}
#define SD_DAT_OUT_L() {GPIOBCLR = BIT(2);}
#define SD_DAT_STA() (GPIOB & BIT(2))
#define SD_CMD_DIR_OUT() {GPIOBDE |= BIT(1); GPIOADIR &= ~BIT(1);}
#define SD_CMD_DIR_IN() {GPIOBDIR |= BIT(1); GPIOAPU |= BIT(1);}
#define SD_CMD_OUT_H() {GPIOBSET = BIT(1);}
#define SD_CMD_OUT_L() {GPIOBCLR = BIT(1);}
#define SD_CMD_STA() (GPIOB & BIT(1))
#define SD_DAT_DIS_UP()
#define SD_DAT_RES_UP()
#define SDCLK_IO IO_PB0
#define SDCMD_IO IO_PB1
#define SDDAT_IO IO_PB2
#elif (SD0_MAPPING == SD0MAP_G2)
//SDCMD(PB6), SDCLK(PB7), SDDAT0(PB5)
#define SD_MUX_IO_INIT() {GPIOBDE |= BIT(5)|BIT(6)|BIT(7);\
GPIOBCLR = BIT(7);\
GPIOBDIR &= ~BIT(7);\
GPIOBPU &= ~BIT(7);\
GPIOBDIR |= BIT(6) | BIT(5);\
GPIOBPU |= BIT(6) | BIT(5);\
GPIOBSET |= BIT(7) | BIT(6) | BIT(5);\
GPIOBFEN |= BIT(7) | BIT(6) | BIT(5);\
FUNCMCON0 = SD0MAP_G2;}
#define SD_IO_INIT() {GPIOBDE |= BIT(5)|BIT(6)|BIT(7);\
GPIOBDIR &= ~BIT(7);\
GPIOBDIR |= BIT(6) | BIT(5);\
GPIOBPU |= BIT(6) | BIT(5);\
GPIOBFEN |= BIT(7) | BIT(6) | BIT(5);\
FUNCMCON0 = SD0MAP_G2;}
#define SD_CLK_DIR_IN() {GPIOBDIR |= BIT(7); GPIOBPU |= BIT(7);}
#define SD_CLK_IN_DIS_PU10K() {GPIOBDIR |= BIT(7); GPIOBPU &= ~BIT(7);}
#define SD_CLK_DIR_OUT() {GPIOBPU &= ~BIT(7); GPIOBDIR &= ~BIT(7);}
#define SD_MUX_DETECT_INIT() {GPIOBDE |= BIT(7); GPIOBPU |= BIT(7); GPIOBDIR |= BIT(7);}
#define SD_MUX_IS_ONLINE() ((GPIOB & BIT(7)) == 0)
#define SD_MUX_IS_BUSY() ((GPIOBDIR & BIT(7)) == 0)
#define SD_MUX_CMD_IS_BUSY() (GPIOBPU300 & BIT(6))
#define SD_CMD_MUX_PU300R() {GPIOBPU300 |= BIT(6); GPIOBPU &= ~BIT(6);}
#define SD_CMD_MUX_PU10K() {GPIOBPU |= BIT(6); GPIOBPU300 &= ~BIT(6);}
#define SD_DAT_MUX_PU300R() {GPIOBPU300 |= BIT(5); GPIOBPU &= ~BIT(5);}
#define SD_DAT_MUX_PU10K() {GPIOBPU |= BIT(5); GPIOBPU300 &= ~BIT(5);}
#define SD_CMD_MUX_IS_ONLINE() ((GPIOB & BIT(5)) == 0)
#define SD_CLK_OUT_H() {GPIOBSET = BIT(7);}
#define SD_CLK_OUT_L() {GPIOBCLR = BIT(7);}
#define SD_CLK_STA() (GPIOB & BIT(7))
#define SD_DAT_DIR_OUT() {GPIOBDE |= BIT(5); GPIOBDIR &= ~BIT(5);}
#define SD_DAT_DIR_IN() {GPIOBDIR |= BIT(5); GPIOBPU |= BIT(5);}
#define SD_DAT_OUT_H() {GPIOBSET = BIT(5);}
#define SD_DAT_OUT_L() {GPIOBCLR = BIT(5);}
#define SD_DAT_STA() (GPIOB & BIT(5))
#define SD_CMD_DIR_OUT() {GPIOBDE |= BIT(6); GPIOBDIR &= ~BIT(6);}
#define SD_CMD_DIR_IN() {GPIOBDIR |= BIT(6); GPIOBPU |= BIT(6);}
#define SD_CMD_OUT_H() {GPIOBSET = BIT(6);}
#define SD_CMD_OUT_L() {GPIOBCLR = BIT(6);}
#define SD_CMD_STA() (GPIOB & BIT(6))
#define SD_DAT_DIS_UP()
#define SD_DAT_RES_UP()
#define SDCLK_IO IO_PB7
#define SDCMD_IO IO_PB6
#define SDDAT_IO IO_PB5
#elif (SD0_MAPPING == SD0MAP_G3)
//SDCMD(PE2), SDCLK(PE3), SDDAT0(PE1)
#define SD_MUX_IO_INIT() {GPIOEDE |= BIT(1)|BIT(2)|BIT(3);\
GPIOECLR = BIT(3);\
GPIOEDIR &= ~BIT(3);\
GPIOEPU &= ~BIT(3);\
GPIOEDIR |= BIT(1) | BIT(2);\
GPIOEPU |= BIT(1) | BIT(2);\
GPIOEFEN |= BIT(1) | BIT(2);\
FUNCMCON0 = SD0MAP_G3;}
#define SD_IO_INIT() {GPIOEDE |= BIT(1)|BIT(2)|BIT(3);\
GPIOEDIR &= ~BIT(3);\
GPIOEDIR |= BIT(1) | BIT(2);\
GPIOEPU |= BIT(1) | BIT(2);\
GPIOEFEN |= BIT(1) | BIT(2);\
FUNCMCON0 = SD0MAP_G3;}
#define SD_CLK_DIR_IN() {GPIOEDIR |= BIT(3); GPIOEPU |= BIT(3);}
#define SD_CLK_IN_DIS_PU10K() {GPIOEDIR |= BIT(3); GPIOEPU &= ~BIT(3);}
#define SD_CLK_DIR_OUT() {GPIOEPU &= ~BIT(3); GPIOEDIR &= ~BIT(3);}
#define SD_MUX_DETECT_INIT() {GPIOEDE |= BIT(3); GPIOEPU |= BIT(3); GPIOEDIR |= BIT(3);}
#define SD_MUX_IS_ONLINE() ((GPIOE & BIT(3)) == 0)
#define SD_MUX_IS_BUSY() ((GPIOEDIR & BIT(3)) == 0)
#define SD_MUX_CMD_IS_BUSY() (GPIOEPU300 & BIT(2))
#define SD_CMD_MUX_PU300R() {GPIOEPU300 |= BIT(2); GPIOEPU &= ~BIT(2);}
#define SD_CMD_MUX_PU10K() {GPIOEPU |= BIT(2); GPIOEPU300 &= ~BIT(2);}
#define SD_DAT_MUX_PU300R() {GPIOEPU300 |= BIT(1); GPIOEPU &= ~BIT(1);}
#define SD_DAT_MUX_PU10K() {GPIOEPU |= BIT(1); GPIOEPU300 &= ~BIT(1);}
#define SD_CMD_MUX_IS_ONLINE() ((GPIOE & BIT(2)) == 0)
#define SD_CLK_OUT_H() {GPIOESET = BIT(3);}
#define SD_CLK_OUT_L() {GPIOECLR = BIT(3);}
#define SD_CLK_STA() (GPIOE & BIT(3))
#define SD_DAT_DIR_OUT() {GPIOEDE |= BIT(1); GPIOEDIR &= ~BIT(1);}
#define SD_DAT_DIR_IN() {GPIOEDIR |= BIT(1); GPIOEPU |= BIT(1);}
#define SD_DAT_OUT_H() {GPIOESET = BIT(1);}
#define SD_DAT_OUT_L() {GPIOECLR = BIT(1);}
#define SD_DAT_STA() (GPIOE & BIT(1))
#define SD_CMD_DIR_OUT() {GPIOADE |= BIT(2); GPIOEDIR &= ~BIT(2);}
#define SD_CMD_DIR_IN() {GPIOEDIR |= BIT(2); GPIOEPU |= BIT(2);}
#define SD_CMD_OUT_H() {GPIOESET = BIT(2);}
#define SD_CMD_OUT_L() {GPIOECLR = BIT(2);}
#define SD_CMD_STA() (GPIOE & BIT(2))
#define SD_DAT_DIS_UP()
#define SD_DAT_RES_UP()
#define SDCLK_IO IO_PE3
#define SDCMD_IO IO_PE2
#define SDDAT_IO IO_PE1
#else
#define SD_MUX_IO_INIT()
#define SD_IO_INIT()
#define SD_CLK_DIR_IN()
#define SD_CLK_IN_DIS_PU10K()
#define SD_CLK_DIR_OUT()
#define SD_MUX_DETECT_INIT()
#define SD_MUX_IS_ONLINE() 0
#define SD_MUX_IS_BUSY() 0
#define SD_MUX_CMD_IS_BUSY() 0
#define SD_CMD_MUX_PU300R()
#define SD_CMD_MUX_PU10K()
#define SD_CMD_MUX_IS_ONLINE() 0
#define SD_CLK_OUT_H()
#define SD_CLK_OUT_L()
#define SD_CLK_STA() 0
#define SD_DAT_DIR_OUT()
#define SD_DAT_DIR_IN()
#define SD_DAT_OUT_H()
#define SD_DAT_OUT_L()
#define SD_DAT_STA() 0
#define SD_CMD_DIR_OUT()
#define SD_CMD_DIR_IN()
#define SD_CMD_OUT_H()
#define SD_CMD_OUT_L()
#define SD_CMD_STA() 0
#define SD_DAT_DIS_UP()
#define SD_DAT_RES_UP()
#define SDCLK_IO IO_NONE
#define SDCMD_IO IO_NONE
#define SDDAT_IO IO_NONE
#endif
//SD1
#if (SD1_MAPPING == SD0MAP_G1)
//SDCMD(PA5), SDCLK(PA6), SDDAT0(PA7), SDDAT1(PA4), SDDAT2(PA3), SDDAT3(PA2)
#define SD1_MUX_IO_INIT() {GPIOADE |= BIT(5)|BIT(6)|BIT(7);\
GPIOACLR = BIT(6);\
GPIOADIR &= ~BIT(6);\
GPIOAPU &= ~BIT(6);\
GPIOADIR |= BIT(5) | BIT(7);\
GPIOAPU |= BIT(5) | BIT(7);\
GPIOAFEN |= BIT(5) | BIT(7);\
FUNCMCON0 = SD0MAP_G1;}
#define SD1_IO_INIT() {GPIOADE |= BIT(5)|BIT(6)|BIT(7);\
GPIOADIR &= ~BIT(6);\
GPIOADIR |= BIT(5) | BIT(7);\
GPIOAPU |= BIT(5) | BIT(7);\
GPIOAFEN |= BIT(5) | BIT(7);\
FUNCMCON0 = SD0MAP_G1;}
#define SD1_CLK_DIR_IN() {GPIOADIR |= BIT(6); GPIOAPU |= BIT(6);}
#define SD1_CLK_IN_DIS_PU10K() {GPIOADIR |= BIT(6); GPIOAPU &= ~BIT(6);}
#define SD1_CLK_DIR_OUT() {GPIOAPU &= ~BIT(6); GPIOADIR &= ~BIT(6);}
#define SD1_MUX_DETECT_INIT() {GPIOADE |= BIT(6); GPIOAPU |= BIT(6); GPIOADIR |= BIT(6);}
#define SD1_MUX_IS_ONLINE() ((GPIOA & BIT(6)) == 0)
#define SD1_MUX_IS_BUSY() ((GPIOADIR & BIT(6)) == 0)
#define SD1_CMD_MUX_PU300R() {GPIOAPU300 |= BIT(5); GPIOAPU &= ~BIT(5);}
#define SD1_CMD_MUX_PU10K() {GPIOAPU |= BIT(5); GPIOAPU300 &= ~BIT(5);}
#define SD1_DAT_MUX_PU300R() {GPIOAPU300 |= BIT(7); GPIOAPU &= ~BIT(7);}
#define SD1_DAT_MUX_PU10K() {GPIOAPU |= BIT(7); GPIOAPU300 &= ~BIT(7);}
#define SD1_CMD_MUX_IS_ONLINE() ((GPIOA & BIT(5)) == 0)
#define SD1_CLK_OUT_H() {GPIOASET = BIT(6);}
#define SD1_CLK_OUT_L() {GPIOACLR = BIT(6);}
#define SD1_CLK_STA() (GPIOA & BIT(6))
#define SD1_DAT_DIR_OUT() {GPIOADE |= BIT(7); GPIOADIR &= ~BIT(7);}
#define SD1_DAT_DIR_IN() {GPIOADIR |= BIT(7); GPIOAPU |= BIT(7);}
#define SD1_DAT_OUT_H() {GPIOASET = BIT(7);}
#define SD1_DAT_OUT_L() {GPIOACLR = BIT(7);}
#define SD1_DAT_STA() (GPIOA & BIT(7))
#define SD1_CMD_DIR_OUT() {GPIOADE |= BIT(5); GPIOADIR &= ~BIT(5);}
#define SD1_CMD_DIR_IN() {GPIOADIR |= BIT(5); GPIOAPU |= BIT(5);}
#define SD1_CMD_OUT_H() {GPIOASET = BIT(5);}
#define SD1_CMD_OUT_L() {GPIOACLR = BIT(5);}
#define SD1_CMD_STA() (GPIOA & BIT(5))
#define SD1CLK_IO IO_PA6
#define SD1CMD_IO IO_PA5
#define SD1DAT_IO IO_PA7
#elif (SD1_MAPPING == SD0MAP_G2)
//SDCMD(PB0), SDCLK(PB1), SDDAT0(PB2)
#define SD1_MUX_IO_INIT() {GPIOBDE |= BIT(0)|BIT(1)|BIT(2);\
GPIOBCLR = BIT(1);\
GPIOBDIR &= ~BIT(1);\
GPIOBPU &= ~BIT(1);\
GPIOBDIR |= BIT(2) | BIT(0);\
GPIOBPU |= BIT(2) | BIT(0);\
GPIOBSET |= BIT(2) | BIT(1) | BIT(0);\
GPIOBFEN |= BIT(2) | BIT(1) | BIT(0);\
FUNCMCON0 = SD0MAP_G2;}
#define SD1_IO_INIT() {GPIOBDE |= BIT(0)|BIT(1)|BIT(2);\
GPIOBDIR &= ~BIT(1);\
GPIOBDIR |= BIT(2) | BIT(0);\
GPIOBPU |= BIT(2) | BIT(0);\
GPIOBFEN |= BIT(2) | BIT(1) | BIT(0);\
FUNCMCON0 = SD0MAP_G2;}
#define SD1_CLK_DIR_IN() {GPIOBDIR |= BIT(1); GPIOBPU |= BIT(1);}
#define SD1_CLK_IN_DIS_PU10K() {GPIOBDIR |= BIT(1); GPIOBPU &= ~BIT(1);}
#define SD1_CLK_DIR_OUT() {GPIOBPU &= ~BIT(1); GPIOBDIR &= ~BIT(1);}
#define SD1_MUX_DETECT_INIT() {GPIOBDE |= BIT(1); GPIOBPU |= BIT(1); GPIOBDIR |= BIT(1);}
#define SD1_MUX_IS_ONLINE() ((GPIOB & BIT(1)) == 0)
#define SD1_MUX_IS_BUSY() ((GPIOBDIR & BIT(1)) == 0)
#define SD1_CMD_MUX_PU300R() {GPIOBPU300 |= BIT(0); GPIOBPU &= ~BIT(0);}
#define SD1_CMD_MUX_PU10K() {GPIOBPU |= BIT(0); GPIOBPU300 &= ~BIT(0);}
#define SD1_DAT_MUX_PU300R() {GPIOBPU300 |= BIT(2); GPIOBPU &= ~BIT(2);}
#define SD1_DAT_MUX_PU10K() {GPIOBPU |= BIT(2); GPIOBPU300 &= ~BIT(2);}
#define SD1_CMD_MUX_IS_ONLINE() ((GPIOB & BIT(0)) == 0)
#define SD1_CLK_OUT_H() {GPIOBSET = BIT(1);}
#define SD1_CLK_OUT_L() {GPIOBCLR = BIT(1);}
#define SD1_CLK_STA() (GPIOB & BIT(1))
#define SD1_DAT_DIR_OUT() {GPIOBDE |= BIT(2); GPIOBDIR &= ~BIT(2);}
#define SD1_DAT_DIR_IN() {GPIOBDIR |= BIT(2); GPIOBPU |= BIT(2);}
#define SD1_DAT_OUT_H() {GPIOBSET = BIT(2);}
#define SD1_DAT_OUT_L() {GPIOBCLR = BIT(2);}
#define SD1_DAT_STA() (GPIOB & BIT(2))
#define SD1_CMD_DIR_OUT() {GPIOBDE |= BIT(0); GPIOBDIR &= ~BIT(0);}
#define SD1_CMD_DIR_IN() {GPIOBDIR |= BIT(0); GPIOBPU |= BIT(0);}
#define SD1_CMD_OUT_H() {GPIOBSET = BIT(0);}
#define SD1_CMD_OUT_L() {GPIOBCLR = BIT(0);}
#define SD1_CMD_STA() (GPIOB & BIT(0))
#define SD1CLK_IO IO_PB1
#define SD1CMD_IO IO_PB0
#define SD1DAT_IO IO_PB2
#elif (SD1_MAPPING == SD0MAP_G3)
//SDCMD(PE5), SDCLK(PE6), SDDAT0(PE7), SDDAT1(PE4), SDDAT2(PE3), SDDAT3(PE2)
#define SD1_MUX_IO_INIT() {GPIOEDE |= BIT(5)|BIT(6)|BIT(7);\
GPIOECLR = BIT(6);\
GPIOEDIR &= ~BIT(6);\
GPIOEPU &= ~BIT(6);\
GPIOEDIR |= BIT(5) | BIT(7);\
GPIOEPU |= BIT(5) | BIT(7);\
GPIOEFEN |= BIT(5) | BIT(7);\
FUNCMCON0 = SD0MAP_G3;}
#define SD1_IO_INIT() {GPIOEDE |= BIT(5)|BIT(6)|BIT(7);\
GPIOEDIR &= ~BIT(6);\
GPIOEDIR |= BIT(5) | BIT(7);\
GPIOEPU |= BIT(5) | BIT(7);\
GPIOEFEN |= BIT(5) | BIT(7);\
FUNCMCON0 = SD0MAP_G3;}
#define SD1_CLK_DIR_IN() {GPIOEDIR |= BIT(6); GPIOEPU |= BIT(6);}
#define SD1_CLK_IN_DIS_PU10K() {GPIOEDIR |= BIT(6); GPIOEPU &= ~BIT(6);}
#define SD1_CLK_DIR_OUT() {GPIOEPU &= ~BIT(6); GPIOEDIR &= ~BIT(6);}
#define SD1_MUX_DETECT_INIT() {GPIOEDE |= BIT(6); GPIOEPU |= BIT(6); GPIOEDIR |= BIT(6);}
#define SD1_MUX_IS_ONLINE() ((GPIOE & BIT(6)) == 0)
#define SD1_MUX_IS_BUSY() ((GPIOEDIR & BIT(6)) == 0)
#define SD1_CMD_MUX_PU300R() {GPIOEPU300 |= BIT(5); GPIOEPU &= ~BIT(5);}
#define SD1_CMD_MUX_PU10K() {GPIOEPU |= BIT(5); GPIOEPU300 &= ~BIT(5);}
#define SD1_DAT_MUX_PU300R() {GPIOEPU300 |= BIT(7); GPIOEPU &= ~BIT(7);}
#define SD1_DAT_MUX_PU10K() {GPIOEPU |= BIT(7); GPIOEPU300 &= ~BIT(7);}
#define SD1_CMD_MUX_IS_ONLINE() ((GPIOE & BIT(5)) == 0)
#define SD1_CLK_OUT_H() {GPIOESET = BIT(6);}
#define SD1_CLK_OUT_L() {GPIOECLR = BIT(6);}
#define SD1_CLK_STA() (GPIOE & BIT(6))
#define SD1_DAT_DIR_OUT() {GPIOEDE |= BIT(7); GPIOEDIR &= ~BIT(7);}
#define SD1_DAT_DIR_IN() {GPIOEDIR |= BIT(7); GPIOEPU |= BIT(7);}
#define SD1_DAT_OUT_H() {GPIOESET = BIT(7);}
#define SD1_DAT_OUT_L() {GPIOECLR = BIT(7);}
#define SD1_DAT_STA() (GPIOE & BIT(7))
#define SD1_CMD_DIR_OUT() {GPIOADE |= BIT(5); GPIOEDIR &= ~BIT(5);}
#define SD1_CMD_DIR_IN() {GPIOEDIR |= BIT(5); GPIOEPU |= BIT(5);}
#define SD1_CMD_OUT_H() {GPIOESET = BIT(5);}
#define SD1_CMD_OUT_L() {GPIOECLR = BIT(5);}
#define SD1_CMD_STA() (GPIOE & BIT(5))
#define SD1CLK_IO IO_PE6
#define SD1CMD_IO IO_PE5
#define SD1DAT_IO IO_PE7
#elif (SD1_MAPPING == SD0MAP_G4)
//SDCMD(PA5), SDCLK(PA6), SDDAT0(PB4)
#define SD1_MUX_IO_INIT() {GPIOADE |= BIT(5)|BIT(6);\
GPIOACLR = BIT(6);\
GPIOADIR &= ~BIT(6);\
GPIOAPU &= ~BIT(6);\
GPIOADIR |= BIT(5);\
GPIOAPU |= BIT(5);\
GPIOAFEN |= BIT(5);\
GPIOBDE |= BIT(4);\
GPIOBDIR |= BIT(4);\
GPIOBPU |= BIT(4);\
GPIOBFEN |= BIT(4);\
FUNCMCON0 = SD0MAP_G4;}
#define SD1_IO_INIT() {GPIOADE |= BIT(5)|BIT(6);\
GPIOADIR &= ~BIT(6);\
GPIOADIR |= BIT(5);\
GPIOAPU |= BIT(5);\
GPIOAFEN |= BIT(5);\
GPIOBDE |= BIT(4);\
GPIOBDIR |= BIT(4);\
GPIOBPU |= BIT(4);\
GPIOBFEN |= BIT(4);\
FUNCMCON0 = SD0MAP_G4;}
#define SD1_CLK_DIR_IN() {GPIOADIR |= BIT(6); GPIOAPU |= BIT(6);}
#define SD1_CLK_IN_DIS_PU10K() {GPIOADIR |= BIT(6); GPIOAPU &= ~BIT(6);}
#define SD1_CLK_DIR_OUT() {GPIOAPU &= ~BIT(6); GPIOADIR &= ~BIT(6);}
#define SD1_MUX_DETECT_INIT() {GPIOADE |= BIT(6); GPIOAPU |= BIT(6); GPIOADIR |= BIT(6);}
#define SD1_MUX_IS_ONLINE() ((GPIOA & BIT(6)) == 0)
#define SD1_MUX_IS_BUSY() ((GPIOADIR & BIT(6)) == 0)
#define SD1_CMD_MUX_PU300R() {GPIOAPU300 |= BIT(5); GPIOAPU &= ~BIT(5);}
#define SD1_CMD_MUX_PU10K() {GPIOAPU |= BIT(5); GPIOAPU300 &= ~BIT(5);}
#define SD1_DAT_MUX_PU300R() {GPIOBPU300 |= BIT(4); GPIOBPU &= ~BIT(4);}
#define SD1_DAT_MUX_PU10K() {GPIOBPU |= BIT(4); GPIOBPU300 &= ~BIT(4);}
#define SD1_CMD_MUX_IS_ONLINE() ((GPIOA & BIT(5)) == 0)
#define SD1_CLK_OUT_H() {GPIOASET = BIT(6);}
#define SD1_CLK_OUT_L() {GPIOACLR = BIT(6);}
#define SD1_CLK_STA() (GPIOA & BIT(6))
#define SD1_DAT_DIR_OUT() {GPIOBDE |= BIT(4); GPIOBDIR &= ~BIT(4);}
#define SD1_DAT_DIR_IN() {GPIOBDIR |= BIT(4); GPIOBPU |= BIT(4);}
#define SD1_DAT_OUT_H() {GPIOBSET = BIT(4);}
#define SD1_DAT_OUT_L() {GPIOBCLR = BIT(4);}
#define SD1_DAT_STA() (GPIOB & BIT(4))
#define SD1_CMD_DIR_OUT() {GPIOADE |= BIT(5); GPIOADIR &= ~BIT(5);}
#define SD1_CMD_DIR_IN() {GPIOADIR |= BIT(5); GPIOAPU |= BIT(5);}
#define SD1_CMD_OUT_H() {GPIOASET = BIT(5);}
#define SD1_CMD_OUT_L() {GPIOACLR = BIT(5);}
#define SD1_CMD_STA() (GPIOA & BIT(5))
#define SD1CLK_IO IO_PA6
#define SD1CMD_IO IO_PA5
#define SD1DAT_IO IO_PB4
#elif (SD1_MAPPING == SD0MAP_G5)
//SDCMD(PA5), SDCLK(PA6), SDDAT0(PB3)
#define SD1_MUX_IO_INIT() {GPIOADE |= BIT(5)|BIT(6);\
GPIOACLR = BIT(6);\
GPIOADIR &= ~BIT(6);\
GPIOAPU &= ~BIT(6);\
GPIOADIR |= BIT(5);\
GPIOAPU |= BIT(5);\
GPIOAFEN |= BIT(5);\
GPIOBDE |= BIT(3);\
GPIOBDIR |= BIT(3);\
GPIOBPU |= BIT(3);\
GPIOBFEN |= BIT(3);\
FUNCMCON0 = SD0MAP_G5;}
#define SD1_IO_INIT() {GPIOADIR &= ~BIT(6);\
GPIOADIR |= BIT(5);\
GPIOAPU |= BIT(5);\
GPIOAFEN |= BIT(5);\
GPIOBDE |= BIT(3);\
GPIOBDIR |= BIT(3);\
GPIOBPU |= BIT(3);\
GPIOBFEN |= BIT(3);\
FUNCMCON0 = SD0MAP_G5;}
#define SD1_CLK_DIR_IN() {GPIOADIR |= BIT(6); GPIOAPU |= BIT(6);}
#define SD1_CLK_IN_DIS_PU10K() {GPIOADIR |= BIT(6); GPIOAPU &= ~BIT(6);}
#define SD1_CLK_DIR_OUT() {GPIOAPU &= ~BIT(6); GPIOADIR &= ~BIT(6);}
#define SD1_MUX_DETECT_INIT() {GPIOADE |= BIT(6); GPIOAPU |= BIT(6); GPIOADIR |= BIT(6);}
#define SD1_MUX_IS_ONLINE() ((GPIOA & BIT(6)) == 0)
#define SD1_MUX_IS_BUSY() ((GPIOADIR & BIT(6)) == 0)
#define SD1_CMD_MUX_PU300R() {GPIOAPU300 |= BIT(5); GPIOAPU &= ~BIT(5);}
#define SD1_CMD_MUX_PU10K() {GPIOAPU |= BIT(5); GPIOAPU300 &= ~BIT(5);}
#define SD1_DAT_MUX_PU300R() {GPIOBPU300 |= BIT(3); GPIOBPU &= ~BIT(3);}
#define SD1_DAT_MUX_PU10K() {GPIOBPU |= BIT(3); GPIOBPU300 &= ~BIT(3);}
#define SD1_CMD_MUX_IS_ONLINE() ((GPIOA & BIT(5)) == 0)
#define SD1_CLK_OUT_H() {GPIOASET = BIT(6);}
#define SD1_CLK_OUT_L() {GPIOACLR = BIT(6);}
#define SD1_CLK_STA() (GPIOA & BIT(6))
#define SD1_DAT_DIR_OUT() {GPIOBDE |= BIT(3); GPIOBDIR &= ~BIT(3);}
#define SD1_DAT_DIR_IN() {GPIOBDIR |= BIT(3); GPIOBPU |= BIT(3);}
#define SD1_DAT_OUT_H() {GPIOBSET = BIT(3);}
#define SD1_DAT_OUT_L() {GPIOBCLR = BIT(3);}
#define SD1_DAT_STA() (GPIOB & BIT(3))
#define SD1_CMD_DIR_OUT() {GPIOADE |= BIT(5); GPIOADIR &= ~BIT(5);}
#define SD1_CMD_DIR_IN() {GPIOADIR |= BIT(5); GPIOAPU |= BIT(5);}
#define SD1_CMD_OUT_H() {GPIOASET = BIT(5);}
#define SD1_CMD_OUT_L() {GPIOACLR = BIT(5);}
#define SD1_CMD_STA() (GPIOA & BIT(5))
#define SD1CLK_IO IO_PA6
#define SD1CMD_IO IO_PA5
#define SD1DAT_IO IO_PB3
#elif (SD1_MAPPING == SD0MAP_G6)
//SDCMD(PB3), SDCLK(PA6), SDDAT0(PB4)
#define SD1_MUX_IO_INIT() {GPIOADE |= BIT(6);\
GPIOACLR = BIT(6);\
GPIOADIR &= ~BIT(6);\
GPIOAPU &= ~BIT(6);\
GPIOBDE |= BIT(3)|BIT(4);\
GPIOBDIR |= BIT(3) | BIT(4);\
GPIOBPU |= BIT(3) | BIT(4);\
GPIOBFEN |= BIT(3) | BIT(4);\
FUNCMCON0 = SD0MAP_G6;}
#define SD1_IO_INIT() {GPIOADE |= BIT(6);\
GPIOADIR &= ~BIT(6);\
GPIOBDE |= BIT(3)|BIT(4);\
GPIOBDIR |= BIT(3) | BIT(4);\
GPIOBPU |= BIT(3) | BIT(4);\
GPIOBFEN |= BIT(3) | BIT(4);\
FUNCMCON0 = SD0MAP_G6;}
#define SD1_CLK_DIR_IN() {GPIOADIR |= BIT(6); GPIOAPU |= BIT(6);}
#define SD1_CLK_IN_DIS_PU10K() {GPIOADIR |= BIT(6); GPIOAPU &= ~BIT(6);}
#define SD1_CLK_DIR_OUT() {GPIOAPU &= ~BIT(6); GPIOADIR &= ~BIT(6);}
#define SD1_MUX_DETECT_INIT() {GPIOADE |= BIT(6); GPIOAPU |= BIT(6); GPIOADIR |= BIT(6);}
#define SD1_MUX_IS_ONLINE() ((GPIOA & BIT(6)) == 0)
#define SD1_MUX_IS_BUSY() ((GPIOADIR & BIT(6)) == 0)
#define SD1_CMD_MUX_PU300R() {GPIOBPU300 |= BIT(3); GPIOBPU &= ~BIT(3);}
#define SD1_CMD_MUX_PU10K() {GPIOBPU |= BIT(3); GPIOBPU300 &= ~BIT(3);}
#define SD1_DAT_MUX_PU300R() {GPIOBPU300 |= BIT(4); GPIOBPU &= ~BIT(4);}
#define SD1_DAT_MUX_PU10K() {GPIOBPU |= BIT(4); GPIOBPU300 &= ~BIT(4);}
#define SD1_CMD_MUX_IS_ONLINE() ((GPIOB & BIT(3)) == 0)
#define SD1_CLK_OUT_H() {GPIOASET = BIT(6);}
#define SD1_CLK_OUT_L() {GPIOACLR = BIT(6);}
#define SD1_CLK_STA() (GPIOA & BIT(6))
#define SD1_DAT_DIR_OUT() {GPIOBDE |= BIT(4); GPIOBDIR &= ~BIT(4);}
#define SD1_DAT_DIR_IN() {GPIOBDIR |= BIT(4); GPIOBPU |= BIT(4);}
#define SD1_DAT_OUT_H() {GPIOBSET = BIT(4);}
#define SD1_DAT_OUT_L() {GPIOBCLR = BIT(4);}
#define SD1_DAT_STA() (GPIOB & BIT(4))
#define SD1_CMD_DIR_OUT() {GPIOBDE |= BIT(3); GPIOBDIR &= ~BIT(3);}
#define SD1_CMD_DIR_IN() {GPIOBDIR |= BIT(3); GPIOBPU |= BIT(3);}
#define SD1_CMD_OUT_H() {GPIOBSET = BIT(3);}
#define SD1_CMD_OUT_L() {GPIOBCLR = BIT(3);}
#define SD1_CMD_STA() (GPIOB & BIT(3))
#define SD1CLK_IO IO_PA6
#define SD1CMD_IO IO_PB3
#define SD1DAT_IO IO_PB4
#else
#define SD1_MUX_IO_INIT()
#define SD1_IO_INIT()
#define SD1_CLK_DIR_IN()
#define SD1_CLK_IN_DIS_PU10K()
#define SD1_CLK_DIR_OUT()
#define SD1_MUX_DETECT_INIT()
#define SD1_MUX_IS_ONLINE() 0
#define SD1_MUX_IS_BUSY() 0
#define SD1_CMD_MUX_PU300R()
#define SD1_CMD_MUX_PU10K()
#define SD1_CMD_MUX_IS_ONLINE() 0
#define SD1_CLK_OUT_H()
#define SD1_CLK_OUT_L()
#define SD1_CLK_STA() 0
#define SD1_DAT_DIR_OUT()
#define SD1_DAT_DIR_IN()
#define SD1_DAT_OUT_H()
#define SD1_DAT_OUT_L()
#define SD1_DAT_STA() 0
#define SD1_CMD_DIR_OUT()
#define SD1_CMD_DIR_IN()
#define SD1_CMD_OUT_H()
#define SD1_CMD_OUT_L()
#define SD1_CMD_STA() 0
#define SD1CLK_IO IO_NONE
#define SD1CMD_IO IO_NONE
#define SD1DAT_IO IO_NONE
#endif
#endif //__IO_DEF_H