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  * 2012-11-20     Bernard    the first version
9  */
10 
11 #include <rthw.h>
12 #include <rtthread.h>
13 
14 #include "board.h"
15 
16 #include <registers/regsarmglobaltimer.h>
17 #include <registers/regsepit.h>
18 
19 #include <imx_uart.h>
20 #include <epit.h>
21 #include <cortex_a.h>
22 
23 #include <mmu.h>
24 
25 struct mem_desc platform_mem_desc[] = {
26     {0x00000000, 0x80000000, 0x00000000, DEVICE_MEM},
27     {0x80000000, 0xFFF00000, 0x80000000, NORMAL_MEM}
28 };
29 
30 const rt_uint32_t platform_mem_desc_size = sizeof(platform_mem_desc)/sizeof(platform_mem_desc[0]);
31 
rt_hw_timer_isr(int vector,void * param)32 static void rt_hw_timer_isr(int vector, void *param)
33 {
34     rt_tick_increase();
35     epit_get_compare_event(HW_EPIT1);
36 }
37 
rt_hw_timer_init(void)38 int rt_hw_timer_init(void)
39 {
40     uint32_t freq;
41 
42     // Make sure the timer is off.
43     HW_ARMGLOBALTIMER_CONTROL.B.TIMER_ENABLE = 0;
44 
45     HW_ARMGLOBALTIMER_CONTROL.B.FCR0 =1;
46 
47     HW_ARMGLOBALTIMER_CONTROL.B.FCR1 =0;
48 
49     HW_ARMGLOBALTIMER_CONTROL.B.DBG_ENABLE =0;
50 
51     // Clear counter.
52     HW_ARMGLOBALTIMER_COUNTER_HI_WR(0);
53     HW_ARMGLOBALTIMER_COUNTER_LO_WR(0);
54 
55     // Now turn on the timer.
56     HW_ARMGLOBALTIMER_CONTROL.B.TIMER_ENABLE = 1;
57 
58     freq = get_main_clock(IPG_CLK);
59 
60     epit_init(HW_EPIT1, CLKSRC_IPG_CLK, freq / 1000000,
61               SET_AND_FORGET, 10000, WAIT_MODE_EN | STOP_MODE_EN);
62 
63     epit_counter_enable(HW_EPIT1, 10000, IRQ_MODE);
64 
65     rt_hw_interrupt_install(IMX_INT_EPIT1, rt_hw_timer_isr, RT_NULL, "tick");
66     rt_hw_interrupt_umask(IMX_INT_EPIT1);
67 
68     return 0;
69 }
70 INIT_BOARD_EXPORT(rt_hw_timer_init);
71 
72 /**
73  * This function will initialize hardware board
74  */
rt_hw_board_init(void)75 void rt_hw_board_init(void)
76 {
77     enable_neon_fpu();
78     disable_strict_align_check();
79 
80     rt_components_board_init();
81     rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
82 }
83 
84 /*@}*/
85