rt_low_level_init.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-02-08 RT-Thread the first version
  9. */
  10. void rt_low_level_init(void)
  11. {
  12. volatile unsigned int *addr;
  13. volatile unsigned int time;
  14. int i;
  15. //change cpu clk source to 24M
  16. addr = (unsigned int *)(0x01c20000 + 0x050);
  17. *addr = 0x10000;
  18. //init cpu pll clk 408M
  19. addr = (unsigned int *)(0x01c20000 + 0x000);
  20. *addr = 0x80001000;
  21. time = 0xffff;
  22. while ((!(*addr & (0x1 << 28))) && (time--));
  23. //change cpu clk source to pll
  24. if (time > 0)
  25. {
  26. addr = (unsigned int *)(0x01c20000 + 0x050);
  27. *addr = 0x20000;
  28. }
  29. //init periph pll clk:600M
  30. //init ahb pll clk:200M
  31. //init apb pll clk:100M
  32. addr = (unsigned int *)(0x01c20000 + 0x028);
  33. if (*addr & (0x1 << 31))
  34. return;
  35. addr = (unsigned int *)(0x01c20000 + 0x200);
  36. *addr = 0x1ff;
  37. addr = (unsigned int *)(0x01c20000 + 0x204);
  38. *addr = 0x1ff;
  39. addr = (unsigned int *)(0x01c20000 + 0x028);
  40. *addr |= (0x1 << 31);
  41. while (!(*addr & (0x1 << 28)));
  42. addr = (unsigned int *)(0x01c20000 + 0x054);
  43. *addr = (0x0 << 16) | (0x3 << 12) | (0x0 << 8) | (0x2 << 6) | (0x0 << 4);
  44. //init gpio config
  45. for (i = 0; i < 6; i++)
  46. {
  47. if (i == 1)
  48. continue;// not config gpio B
  49. addr = (unsigned int *)(0x01c20800 + i * 0x24 + 0x00);
  50. *addr = 0x77777777;
  51. addr = (unsigned int *)(0x01c20800 + i * 0x24 + 0x04);
  52. *addr = 0x77777777;
  53. addr = (unsigned int *)(0x01c20800 + i * 0x24 + 0x08);
  54. *addr = 0x77777777;
  55. addr = (unsigned int *)(0x01c20800 + i * 0x24 + 0x0C);
  56. *addr = 0x77777777;
  57. }
  58. }