#ifndef _SEMA_H_ #define _SEMA_H_ #ifdef __cplusplus extern "C" { #endif #define LOCAL_CPx 1 #define rSemaGate(x) (*(volatile unsigned int *)(REGS_SEMA_BASE + (x) * 4)) #define rSemaCPINE(x) (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x100 + (LOCAL_CPx * 0x10) + (x) * 8)) #define rSemaCPNTF(x) (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x120 + (LOCAL_CPx * 0x10) + (x) * 8)) #define rSemaRSTGT (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x140)) #define rSemaRSTNTF (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x150)) #define rSemaCPINTFLG(x) (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x160 + (LOCAL_CPx * 0x10) + (x) * 8)) #define rSemaIRQCLR (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x180 + (LOCAL_CPx * 4))) typedef enum{ SEMA_GATE_USB = 0, SEMA_GATE_SDMMC0, SEMA_GATE_DMA, SEMA_GATE_LCD, SEMA_GATE_SDMMC1, SEMA_GATE_GPU, SEMA_GATE_PXP, SEMA_GATE_MFC, // 7 SEMA_GATE_ITU, SEMA_GATE_QOI, SEMA_GATE_BLENDING, SEMA_GATE_ETH, SEMA_GATE_WRAP, SEMA_GATE_SPI0, SEMA_GATE_SPI2, SEMA_GATE_CRC, // 15 SEMA_GATE_SYS, SEMA_GATE_ECSPI, SEMA_GATE_I2C0, SEMA_GATE_I2C1, SEMA_GATE_UART0, SEMA_GATE_UART1, SEMA_GATE_UART2, SEMA_GATE_UART3, // 23 SEMA_GATE_GPIO, SEMA_GATE_TIMER, SEMA_GATE_PWM, SEMA_GATE_WDT, SEMA_GATE_I2S0, SEMA_GATE_I2S1, SEMA_GATE_RTC, SEMA_GATE_ADC0, // 31 SEMA_GATE_ADC1, SEMA_GATE_ADC2, SEMA_GATE_DDRCTL, SEMA_GATE_DDRPHY, SEMA_GATE_VBUS, SEMA_GATE_GBUS, SEMA_GATE_CHBUS, SEMA_GATE_CABUS, // 39 SEMA_GATE_DSI, SEMA_GATE_CSI, SEMA_GATE_RCRT, SEMA_GATE_DDRRDC, SEMA_GATE_SRAMRDC, SEMA_GATE_MAX, }sema_gate_e; typedef enum{ SEMA_GATE_S_FREE = 0, SEMA_GATE_S_CPU0_LOCK, SEMA_GATE_S_CPU1_LOCK, SEMA_GATE_S_UNLOCK, }sema_gate_state_e; void sema_init(void); int sema_take(sema_gate_e gate, TickType_t xTicksToWait); int sema_give(sema_gate_e gate); #ifdef __cplusplus } #endif #endif /* _SEMA_H_ */