sema.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #ifndef _SEMA_H_
  2. #define _SEMA_H_
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #define LOCAL_CPx 1
  7. #define rSemaGate(x) (*(volatile unsigned int *)(REGS_SEMA_BASE + (x) * 4))
  8. #define rSemaCPINE(x) (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x100 + (LOCAL_CPx * 0x10) + (x) * 8))
  9. #define rSemaCPNTF(x) (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x120 + (LOCAL_CPx * 0x10) + (x) * 8))
  10. #define rSemaRSTGT (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x140))
  11. #define rSemaRSTNTF (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x150))
  12. #define rSemaCPINTFLG(x) (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x160 + (LOCAL_CPx * 0x10) + (x) * 8))
  13. #define rSemaIRQCLR (*(volatile unsigned int *)(REGS_SEMA_BASE + 0x180 + (LOCAL_CPx * 4)))
  14. typedef enum{
  15. SEMA_GATE_USB = 0,
  16. SEMA_GATE_SDMMC0,
  17. SEMA_GATE_DMA,
  18. SEMA_GATE_LCD,
  19. SEMA_GATE_SDMMC1,
  20. SEMA_GATE_GPU,
  21. SEMA_GATE_PXP,
  22. SEMA_GATE_MFC, // 7
  23. SEMA_GATE_ITU,
  24. SEMA_GATE_QOI,
  25. SEMA_GATE_BLENDING,
  26. SEMA_GATE_ETH,
  27. SEMA_GATE_WRAP,
  28. SEMA_GATE_SPI0,
  29. SEMA_GATE_SPI2,
  30. SEMA_GATE_CRC, // 15
  31. SEMA_GATE_SYS,
  32. SEMA_GATE_ECSPI,
  33. SEMA_GATE_I2C0,
  34. SEMA_GATE_I2C1,
  35. SEMA_GATE_UART0,
  36. SEMA_GATE_UART1,
  37. SEMA_GATE_UART2,
  38. SEMA_GATE_UART3, // 23
  39. SEMA_GATE_GPIO,
  40. SEMA_GATE_TIMER,
  41. SEMA_GATE_PWM,
  42. SEMA_GATE_WDT,
  43. SEMA_GATE_I2S0,
  44. SEMA_GATE_I2S1,
  45. SEMA_GATE_RTC,
  46. SEMA_GATE_ADC0, // 31
  47. SEMA_GATE_ADC1,
  48. SEMA_GATE_ADC2,
  49. SEMA_GATE_DDRCTL,
  50. SEMA_GATE_DDRPHY,
  51. SEMA_GATE_VBUS,
  52. SEMA_GATE_GBUS,
  53. SEMA_GATE_CHBUS,
  54. SEMA_GATE_CABUS, // 39
  55. SEMA_GATE_DSI,
  56. SEMA_GATE_CSI,
  57. SEMA_GATE_RCRT,
  58. SEMA_GATE_DDRRDC,
  59. SEMA_GATE_SRAMRDC,
  60. SEMA_GATE_MAX,
  61. }sema_gate_e;
  62. typedef enum{
  63. SEMA_GATE_S_FREE = 0,
  64. SEMA_GATE_S_CPU0_LOCK,
  65. SEMA_GATE_S_CPU1_LOCK,
  66. SEMA_GATE_S_UNLOCK,
  67. }sema_gate_state_e;
  68. void sema_init(void);
  69. int sema_take(sema_gate_e gate, TickType_t xTicksToWait);
  70. int sema_give(sema_gate_e gate);
  71. #ifdef __cplusplus
  72. }
  73. #endif
  74. #endif /* _SEMA_H_ */