common.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * Copyright (c) 2021, Shenzhen Academy of Aerospace Technology
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-11-16 Dystopia the first version
  9. */
  10. #ifndef __COMMON_H__
  11. #define __COMMON_H__
  12. #include <c6x.h>
  13. #include <cslr_cgem.h>
  14. #include <cslr_device.h>
  15. #include <cslr_bootcfg.h>
  16. #include <cslr_tmr.h>
  17. #include <csl_tmr.h>
  18. /* DSP core clock speed in Hz */
  19. #define DSP_CORE_SPEED_HZ 1000000000
  20. extern CSL_CgemRegs * gp_cgem_regs;
  21. extern CSL_BootcfgRegs * gp_bootcfg_regs;
  22. /*----------------------Timer plus registers definition----------------*/
  23. typedef struct {
  24. volatile unsigned int PID12;
  25. volatile unsigned int EMUMGT_CLKSPD;
  26. volatile unsigned int GPINT_EN;
  27. volatile unsigned int GPDIR_DAT;
  28. volatile unsigned int CNTLO;
  29. volatile unsigned int CNTHI;
  30. volatile unsigned int PRDLO;
  31. volatile unsigned int PRDHI;
  32. volatile unsigned int TCR;
  33. volatile unsigned int TGCR;
  34. volatile unsigned int WDTCR;
  35. volatile unsigned int TLGC;
  36. volatile unsigned int TLMR;
  37. volatile unsigned int RELLO;
  38. volatile unsigned int RELHI;
  39. volatile unsigned int CAPLO;
  40. volatile unsigned int CAPHI;
  41. volatile unsigned int INTCTL_STAT;
  42. volatile unsigned char RSVD0[24];
  43. volatile unsigned int TIMERLO_COMPARE_REG[8];
  44. volatile unsigned char RSVD1[32];
  45. } CSL_TmrPlusRegs;
  46. #define TMR_TCR_READRSTMODE_HI_SHIFT (26)
  47. #define TMR_TCR_CAPEVTMODE_LO_SHIFT (12)
  48. #define TMR_TCR_CAPMODE_LO_SHIFT (11)
  49. #define TMR_TCR_READRSTMODE_LO_SHIFT (10)
  50. #define TMR_TCR_READRSTMODE_HI_MASK (1<<26)
  51. #define TMR_TCR_CAPEVTMODE_LO_MASK (3<<12)
  52. #define TMR_TCR_CAPMODE_LO_MASK (1<<11)
  53. #define TMR_TCR_READRSTMODE_LO_MASK (1<<10)
  54. #define TMR_TGCR_PLUSEN_SHIFT 4
  55. #define TMR_TGCR_PLUSEN_MASK (1<<4)
  56. #define TMR_INTCTLSTAT_EN_ALL_CLR_ALL 0x000F000F
  57. #define CSL_TMR_WDTCR_WDKEY_CMD1 (0x0000A5C6u)
  58. #define CSL_TMR_WDTCR_WDKEY_CMD2 (0x0000DA7Eu)
  59. #define CSL_TMR_ENAMODE_CONT_RELOAD 3
  60. extern CSL_TmrPlusRegs * gp_timer0_regs;
  61. extern CSL_TmrPlusRegs * gp_timer1_regs;
  62. extern CSL_TmrPlusRegs * gp_timer2_regs;
  63. extern CSL_TmrPlusRegs * gp_timer3_regs;
  64. extern CSL_TmrPlusRegs * gp_timer4_regs;
  65. extern CSL_TmrPlusRegs * gp_timer5_regs;
  66. extern CSL_TmrPlusRegs * gp_timer6_regs;
  67. extern CSL_TmrPlusRegs * gp_timer7_regs;
  68. extern CSL_TmrPlusRegs * gp_timer8_regs;
  69. extern CSL_TmrPlusRegs * gp_timer_regs[];
  70. typedef enum
  71. {
  72. TIMER_ONE_SHOT_PULSE = 0, /*generate one shot pulse with timer*/
  73. TIMER_PERIODIC_PULSE, /*generate periodic pulse with timer*/
  74. TIMER_PERIODIC_CLOCK, /*generate periodic clock with timer*/
  75. /*generate periodic square wave with period reload feature, the difference
  76. between wave and clock is the duty cycle of clock is always 50%*/
  77. TIMER_PERIODIC_WAVE,
  78. TIMER_WATCH_DOG /*configure timer as watch dog*/
  79. }TTimerMode;
  80. typedef struct {
  81. int timer_num; /*select one timer*/
  82. TTimerMode timerMode; /*select function of the timer*/
  83. unsigned long long period; /*in the unit of DSP core clock/6*/
  84. unsigned long long reload_period; /*the reload value of period*/
  85. int pulseWidth; /*pulse width between 0~3*/
  86. }Timer64_Config;
  87. /* Reset a 64-bit timer */
  88. extern void reset_timer(int timer_num);
  89. /* Initailize a 64-bit timer */
  90. extern void timer64_init(Timer64_Config * tmrCfg);
  91. extern void keystone_cpu_init(void);
  92. #endif /* __COMMON_H__ */