1 // Copyright (C) 2022 Beken Corporation
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include <os/os.h>
16 #include <os/mem.h>
17 #include "icu_hal.h"
18 #include "icu_driver.h"
19 #include <os/os.h>
20 #include "interrupt_base.h"
21
22 icu_driver_t s_icu = {0};
23
bk_icu_driver_init(void)24 bk_err_t bk_icu_driver_init(void)
25 {
26 os_memset(&s_icu, 0, sizeof(s_icu));
27 icu_hal_init(&s_icu.hal);
28 icu_enable_global_interrupt();
29
30 return BK_OK;
31 }
32
bk_icu_driver_deinit(void)33 bk_err_t bk_icu_driver_deinit(void)
34 {
35 icu_disable_global_interrupt();
36 return BK_OK;
37 }
38
39
40 /** icu contrl cpu intterrupt api for internal**/
41
42 #if (CONFIG_ALIOS)
bk_icu_deafult_swi(void)43 void bk_icu_deafult_swi(void)
44 {
45 while (1);
46 }
47 #endif
48
icu_enable_global_interrupt(void)49 bk_err_t icu_enable_global_interrupt(void)
50 {
51 icu_enable_irq();
52 icu_enable_fiq();
53
54 return BK_OK;
55 }
56
icu_disable_global_interrupt(void)57 bk_err_t icu_disable_global_interrupt(void)
58 {
59 icu_disable_all_interrupt();
60 icu_disable_irq();
61 icu_disable_fiq();
62 interrupt_deinit();
63
64 return BK_OK;
65 }
66
67
68
69
70 #if (CONFIG_ICU_GPIO)
71
icu_set_gpio_perial_mode(gpio_id_t id,uint32_t mode)72 void icu_set_gpio_perial_mode(gpio_id_t id, uint32_t mode)
73 {
74 icu_hal_set_gpio_perial_mode(&s_icu.hal, id, mode);
75 }
76
icu_get_gpio_perial_mode(gpio_id_t id)77 uint32_t icu_get_gpio_perial_mode(gpio_id_t id)
78 {
79 return icu_hal_get_gpio_perial_mode(&s_icu.hal, id);
80 }
81
icu_uart2_gpio_sel(icu_gpio_uart2_map_mode_t mode)82 void icu_uart2_gpio_sel(icu_gpio_uart2_map_mode_t mode)
83 {
84
85 icu_hal_uart2_gpio_sel(&s_icu.hal, mode);
86 }
87
icu_spi3_gpio_sel(icu_gpio_spi3_map_mode_t mode)88 void icu_spi3_gpio_sel(icu_gpio_spi3_map_mode_t mode)
89 {
90
91 icu_hal_spi3_gpio_sel(&s_icu.hal, mode);
92 }
93
icu_sdio_gpio_sel(icu_gpio_sdio_map_mode_t mode)94 void icu_sdio_gpio_sel(icu_gpio_sdio_map_mode_t mode)
95 {
96
97 icu_hal_sdio_gpio_sel(&s_icu.hal, mode);
98 }
99
icu_pwms_gpio_sel(uint32 pwm_chan,icu_gpio_pwms_map_mode_t mode)100 uint32_t icu_pwms_gpio_sel(uint32 pwm_chan, icu_gpio_pwms_map_mode_t mode)
101 {
102 return icu_hal_pwms_gpio_sel(&s_icu.hal, pwm_chan, mode);
103 }
104
icu_sdio_host_enable(void)105 void icu_sdio_host_enable(void)
106 {
107 icu_hal_sdio_host_enable(&s_icu.hal);
108 }
109
icu_sdio_dma_enable(void)110 void icu_sdio_dma_enable(void)
111 {
112 icu_hal_sdio_dma_enable(&s_icu.hal);
113 }
114 #endif
115
116 //global intterrupt APIs
icu_get_global_int_status(void)117 uint32_t icu_get_global_int_status(void)
118 {
119 return icu_hal_get_global_int_status(&s_icu.hal);
120 }
121
icu_get_irq_int_status(void)122 uint32_t icu_get_irq_int_status(void)
123 {
124 return icu_hal_get_irq_int_status(&s_icu.hal);
125 }
126
icu_get_fiq_int_status(void)127 uint32_t icu_get_fiq_int_status(void)
128 {
129 return icu_hal_get_fiq_int_status(&s_icu.hal);
130 }
131
icu_is_pwm_has_two_int(void)132 bool icu_is_pwm_has_two_int(void)
133 {
134 return icu_hal_is_pwm_has_two_int(&s_icu.hal);
135 }
136
icu_get_uart_int_status(void)137 uint32_t icu_get_uart_int_status(void)
138 {
139 return icu_hal_get_uart_int_status(&s_icu.hal);
140 }
141
142