api_sys.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #ifndef _API_SYS_H
  2. #define _API_SYS_H
  3. #define IRQ_TMR2_VECTOR 5
  4. #define IRQ_UART_VECTOR 14
  5. #define IRQ_HUART_VECTOR 15
  6. #define IRQ_TMR3_VECTOR 16
  7. #define IRQ_PORT_VECTOR 26
  8. typedef void (*isr_t)(void);
  9. typedef uint8_t bd_addr_t[6];
  10. //按时钟频率升序
  11. enum {
  12. SYS_RC3M, //typical = 3.02MHz
  13. SYS_26M,
  14. SYS_52M,
  15. SYS_80M,
  16. SYS_120M,
  17. };
  18. enum {
  19. INDEX_VOICE,
  20. INDEX_DECODE,
  21. INDEX_STACK,
  22. INDEX_RES_PLAY,
  23. INDEX_RSVD0,
  24. INDEX_RSVD1,
  25. INDEX_RSVD2,
  26. INDEX_RSVD3,
  27. INDEX_MAX_NB = 8,
  28. };
  29. typedef struct _sys_t {
  30. u8 cnt_1us; //delay 1us cnt
  31. u8 main_start; //Main是否已启动
  32. u8 aupll_type;
  33. u8 aupll_band;
  34. u8 aupllhz_div;
  35. u8 clk_sel; //clock select
  36. u8 clk_curr; //curre sysclk
  37. u8 clk_set; //main thread sysclk
  38. u8 clk_req[8]; //[0]=voice, [1]=music, [2]=stack
  39. u8 vddcore_sel;
  40. u8 e2p_xcfg_mem_en; //e2p同时用于xcfg及memory记忆
  41. u8 tmr1ms_cnt;
  42. u8 resv;
  43. u32 rc2m_rtc_clk;
  44. u32 rc3m_clk;
  45. u8 tmr5ms_cnt0;
  46. u8 tmr5ms_cnt1;
  47. u8 tmr5ms_cnt2;
  48. u8 tmr5ms_cnt3;
  49. u32 uart0baud;
  50. u8 spi_baud;
  51. u8 spi_baud_w;
  52. } sys_t;
  53. extern sys_t sys;
  54. typedef struct {
  55. u8 vbg; //trim到0.6V的寄存器配置值 RI_BGTRIM, RTCCON8[28:24]
  56. u8 vbat; //trim到4.2V的寄存器配置值 RI_BGCH_TRIM, RTCCON8[14 10]
  57. u16 chg_icoef; //充电电流换算系数
  58. u8 dig_gain; //rf digital gain
  59. u8 ft_trim_flag;
  60. u16 dac_digvol;
  61. u16 vbg_volt; //vbg目标值, 默认1200. FT TRIM可以进行偏移调整
  62. u8 resv[2];
  63. } sys_trim_t;
  64. extern sys_trim_t sys_trim;
  65. extern u32 vuart_baudrate;
  66. extern uint8_t cfg_spiflash_speed_up_en;
  67. isr_t register_isr(int vector, isr_t isr);
  68. uint8_t sys_clk_get(void);
  69. void sys_clk_set_do(u32 sys_clk); //上电启动未启用OS时调用
  70. bool sys_clk_set(uint8_t sys_clk); //main线程调用,一般给客户调用
  71. bool sys_clk_req(uint8_t index, uint8_t sys_clk); //其它任务调用,一般在库内调用
  72. bool sys_clk_free(uint8_t index); //跟sys_clk_req成对使用
  73. bool sys_clk_free_all(void);
  74. u32 sys_get_rc2m_clkhz(u32 type);
  75. void dbg_clk_out(u32 type, u32 div);
  76. void sys_uart0_baud_set(u32 baud);
  77. bool sys_irq_init(int vector, int pr, isr_t isr); //注册一个系统中断(pr=1注册高优先级中断时, 中断函数需要加FIQ), 详见timer.c例程
  78. void watch_point_set(u32 addr);
  79. void wdt_irq_init(void);
  80. void uart_putchar(char ch);
  81. void spi_init(void);
  82. void my_spi_putc(u8 ch);
  83. void bt_dbg_pin_init(void);
  84. uint calc_crc(void *buf, uint len, uint seed);
  85. #endif // _API_SYS_H