board.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. * 2009-09-22 Bernard add board.h to this bsp
  9. * 2018-09-02 xuzhuoyi modify for TMS320F28379D version
  10. */
  11. #include <rtthread.h>
  12. #include "board.h"
  13. #include "drv_sci.h"
  14. #include "F28x_Project.h"
  15. extern rt_uint32_t rt_thread_switch_interrupt_flag;
  16. extern interrupt void RTOSINT_Handler();
  17. void trap_rtosint()
  18. {
  19. if(rt_thread_switch_interrupt_flag)
  20. asm(" trap #16");
  21. }
  22. /**
  23. * This is the timer interrupt service routine.
  24. *
  25. */
  26. interrupt void cpu_timer2_isr(void)
  27. {
  28. CpuTimer2Regs.TCR.all = 0xC000;
  29. /* enter interrupt */
  30. rt_interrupt_enter();
  31. rt_tick_increase();
  32. /* leave interrupt */
  33. rt_interrupt_leave();
  34. }
  35. /**
  36. * This function will initial TMS320F28379D board.
  37. */
  38. void rt_hw_board_init()
  39. {
  40. /* Configure the system clock @ 84 Mhz */
  41. InitSysCtrl();
  42. DINT;
  43. InitPieCtrl();
  44. IER = 0x0000;
  45. IFR = 0x0000;
  46. InitPieVectTable();
  47. EALLOW; // This is needed to write to EALLOW protected registers
  48. PieVectTable.TIMER2_INT = &cpu_timer2_isr;
  49. PieVectTable.RTOS_INT = &RTOSINT_Handler;
  50. EDIS;
  51. InitCpuTimers();
  52. ConfigCpuTimer(&CpuTimer2, 200, 1000000 / RT_TICK_PER_SECOND);
  53. CpuTimer2Regs.TCR.all = 0x4000;
  54. IER |= M_INT14;
  55. #ifdef RT_USING_HEAP
  56. rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
  57. #endif
  58. rt_hw_sci_init();
  59. #ifdef RT_USING_COMPONENTS_INIT
  60. rt_components_board_init();
  61. #endif
  62. #if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
  63. rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
  64. #endif
  65. rt_interrupt_leave_sethook((void (*)(void))trap_rtosint);
  66. }