• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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