drv_cache.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-05-17 ZYH first implementation
  9. */
  10. #include <rthw.h>
  11. #include <stm32f7xx.h>
  12. void rt_hw_cpu_icache_enable(void)
  13. {
  14. SCB_EnableICache();
  15. }
  16. void rt_hw_cpu_icache_disable(void)
  17. {
  18. SCB_DisableICache();
  19. }
  20. rt_base_t rt_hw_cpu_icache_status(void)
  21. {
  22. return 0;
  23. }
  24. void rt_hw_cpu_icache_ops(int ops, void *addr, int size)
  25. {
  26. UNUSED(addr);
  27. UNUSED(size);
  28. if (ops & RT_HW_CACHE_INVALIDATE)
  29. {
  30. SCB_InvalidateICache();
  31. }
  32. }
  33. void rt_hw_cpu_dcache_enable(void)
  34. {
  35. SCB_EnableDCache();
  36. }
  37. void rt_hw_cpu_dcache_disable(void)
  38. {
  39. SCB_DisableDCache();
  40. }
  41. rt_base_t rt_hw_cpu_dcache_status(void)
  42. {
  43. return 0;
  44. }
  45. void rt_hw_cpu_dcache_ops(int ops, void *addr, int size)
  46. {
  47. if (ops & (RT_HW_CACHE_FLUSH | RT_HW_CACHE_INVALIDATE))
  48. {
  49. SCB_CleanInvalidateDCache_by_Addr(addr, size);
  50. }
  51. else if (ops & RT_HW_CACHE_FLUSH)
  52. {
  53. SCB_CleanDCache_by_Addr(addr, size);
  54. }
  55. else if (ops & RT_HW_CACHE_INVALIDATE)
  56. {
  57. SCB_InvalidateDCache_by_Addr(addr, size);
  58. }
  59. else
  60. {
  61. RT_ASSERT(0);
  62. }
  63. }