wm_cpu.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * @file wm_cpu.c
  3. *
  4. * @brief cpu driver module
  5. *
  6. * @author kevin
  7. *
  8. * Copyright (c) 2014 Winner Microelectronics Co., Ltd.
  9. */
  10. #include "wm_debug.h"
  11. #include "wm_regs.h"
  12. #include "wm_irq.h"
  13. #include "wm_cpu.h"
  14. #include "wm_pwm.h"
  15. /**
  16. * @brief This function is used to set cpu clock
  17. *
  18. * @param[in] clk select cpu clock
  19. * clk == CPU_CLK_80M 80M
  20. * clk == CPU_CLK_40M 40M
  21. *
  22. * @return None
  23. *
  24. * @note None
  25. */
  26. void tls_sys_clk_set(u32 clk)
  27. {
  28. #ifndef TLS_CONFIG_FPGA
  29. u32 RegValue;
  30. u8 wlanDiv, cpuDiv = clk;
  31. u8 bus2Fac;
  32. if ((clk < 2) || (clk > 240))
  33. {
  34. return;
  35. }
  36. RegValue = tls_reg_read32(HR_CLK_DIV_CTL);
  37. wlanDiv = (RegValue>>8)&0xFF;
  38. RegValue &= 0xFF000000;
  39. RegValue |= 0x80000000;
  40. if(cpuDiv > 12)
  41. {
  42. bus2Fac = 1;
  43. wlanDiv = cpuDiv/4;
  44. }
  45. else /*wlan can run*/
  46. {
  47. wlanDiv=3;
  48. bus2Fac = (wlanDiv*4/cpuDiv)&0xFF;
  49. }
  50. RegValue |= (bus2Fac<<16) | (wlanDiv<<8) | cpuDiv;
  51. tls_reg_write32(HR_CLK_DIV_CTL, RegValue);
  52. SysTick_Config(XT806_PLL_CLK_MHZ*UNIT_MHZ/cpuDiv/HZ);
  53. #endif
  54. return;
  55. }
  56. /**
  57. * @brief This function is used to get cpu clock
  58. *
  59. * @param[out] *sysclk point to the addr for system clk output
  60. *
  61. * @return None
  62. *
  63. * @note None
  64. */
  65. void tls_sys_clk_get(tls_sys_clk *sysclk)
  66. {
  67. #ifndef TLS_CONFIG_FPGA
  68. clk_div_reg clk_div;
  69. clk_div.w = tls_reg_read32(HR_CLK_DIV_CTL);
  70. sysclk->cpuclk = XT806_PLL_CLK_MHZ/(clk_div.b.CPU);
  71. sysclk->wlanclk = XT806_PLL_CLK_MHZ/(clk_div.b.WLAN);
  72. sysclk->apbclk = sysclk->cpuclk / clk_div.b.BUS2;
  73. #else
  74. sysclk->apbclk =
  75. sysclk->cpuclk =
  76. sysclk->wlanclk = 40;
  77. #endif
  78. }