• 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 #pragma once
16 
17 #include <soc/soc.h>
18 #include "adc_hw.h"
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #define ADC_LL_REG_BASE()		SOC_SADC_REG_BASE
25 
adc_ll_init(adc_hw_t * hw)26 static inline void adc_ll_init(adc_hw_t *hw)
27 {
28 	hw->ctrl.v = 0;
29 }
30 
adc_ll_deinit(adc_hw_t * hw)31 static inline void adc_ll_deinit(adc_hw_t *hw)
32 {
33 	hw->ctrl.v = 0;
34 	hw->sat_ctrl.v =0;
35 	hw->steady_ctrl.v =0;
36 }
37 
adc_ll_set_sleep_mode(adc_hw_t * hw)38 static inline void adc_ll_set_sleep_mode(adc_hw_t *hw)
39 {
40 	hw->ctrl.adc_mode = 0;
41 }
42 
adc_ll_set_single_step_mode(adc_hw_t * hw)43 static inline void adc_ll_set_single_step_mode(adc_hw_t *hw)
44 {
45 	hw->ctrl.adc_mode = 1;
46 }
47 
adc_ll_set_software_control_mode(adc_hw_t * hw)48 static inline void adc_ll_set_software_control_mode(adc_hw_t *hw)
49 {
50 	hw->ctrl.adc_mode = 2;
51 }
52 
adc_ll_set_continuous_mode(adc_hw_t * hw)53 static inline void adc_ll_set_continuous_mode(adc_hw_t *hw)
54 {
55 	hw->ctrl.adc_mode = 3;
56 }
57 
adc_ll_get_adc_mode(adc_hw_t * hw)58 static inline uint32_t adc_ll_get_adc_mode(adc_hw_t *hw)
59 {
60 	return (hw->ctrl.adc_mode & 0x03);
61 }
62 
adc_ll_enable(adc_hw_t * hw)63 static inline void adc_ll_enable(adc_hw_t *hw)
64 {
65 	hw->ctrl.adc_en = 1;
66 }
67 
adc_ll_disable(adc_hw_t * hw)68 static inline void adc_ll_disable(adc_hw_t *hw)
69 {
70 	hw->ctrl.adc_en = 0;
71 }
72 
adc_ll_sel_channel(adc_hw_t * hw,uint32_t id)73 static inline void adc_ll_sel_channel(adc_hw_t *hw, uint32_t id)
74 {
75 	hw->ctrl.adc_channel = (id & 0xFF);
76 }
77 
adc_ll_wait_4_cycle(adc_hw_t * hw)78 static inline void adc_ll_wait_4_cycle(adc_hw_t *hw)
79 {
80 	hw->ctrl.adc_setting = 0;
81 }
82 
adc_ll_wait_8_cycle(adc_hw_t * hw)83 static inline void adc_ll_wait_8_cycle(adc_hw_t *hw)
84 {
85 	hw->ctrl.adc_setting = 1;
86 }
87 
adc_ll_clear_int_status(adc_hw_t * hw)88 static inline void adc_ll_clear_int_status(adc_hw_t *hw)
89 {
90 	hw->ctrl.adc_int_clear = 1;
91 }
92 
adc_ll_enable_32m_clk(adc_hw_t * hw)93 static inline void adc_ll_enable_32m_clk(adc_hw_t *hw)
94 {
95 	hw->ctrl.adc_32m_mode = 1;
96 }
97 
adc_ll_disable_32m_clk(adc_hw_t * hw)98 static inline void adc_ll_disable_32m_clk(adc_hw_t *hw)
99 {
100 	hw->ctrl.adc_32m_mode = 0;
101 }
102 
adc_ll_set_pre_div(adc_hw_t * hw,uint32_t div)103 static inline void adc_ll_set_pre_div(adc_hw_t *hw, uint32_t div)
104 {
105 	hw->ctrl.adc_div = (div & 0x3F);
106 }
107 
adc_ll_set_sample_rate(adc_hw_t * hw,uint32_t sample_rate)108 static inline void adc_ll_set_sample_rate(adc_hw_t *hw, uint32_t sample_rate)
109 {
110 	hw->ctrl.adc_samp_rate = (sample_rate & 0x3F);
111 }
112 
adc_ll_set_adc_filter(adc_hw_t * hw,uint32_t filter)113 static inline void adc_ll_set_adc_filter(adc_hw_t *hw, uint32_t filter)
114 {
115 	hw->ctrl.adc_filter = (filter & 0x7F);
116 }
117 
adc_ll_check_adc_busy(adc_hw_t * hw)118 static inline bool adc_ll_check_adc_busy(adc_hw_t *hw)
119 {
120 	return !!(hw->ctrl.adc_busy) ;
121 }
122 
adc_ll_is_fifo_empty(adc_hw_t * hw)123 static inline bool adc_ll_is_fifo_empty(adc_hw_t *hw)
124 {
125 	return !!(hw->ctrl.fifo_empty) ;
126 }
127 
adc_ll_is_fifo_full(adc_hw_t * hw)128 static inline bool adc_ll_is_fifo_full(adc_hw_t *hw)
129 {
130 	return !!(hw->ctrl.fifo_full) ;
131 }
132 
adc_ll_get_adc_raw_data(adc_hw_t * hw)133 static inline uint32_t adc_ll_get_adc_raw_data(adc_hw_t *hw)
134 {
135 	return hw->adc_raw_data ;
136 }
137 
adc_ll_set_fifo_threshold(adc_hw_t * hw,uint32_t value)138 static inline void adc_ll_set_fifo_threshold(adc_hw_t *hw, uint32_t value)
139 {
140 	if(value >= 32)
141 		value = 0x1F;
142 
143 	hw->steady_ctrl.fifo_level = (value & 0x1F);
144 }
145 
adc_ll_set_steady_ctrl(adc_hw_t * hw,uint32_t value)146 static inline void adc_ll_set_steady_ctrl(adc_hw_t *hw, uint32_t value)
147 {
148 	hw->steady_ctrl.steady_ctrl = (value & 0x7);
149 }
150 
151 
152 //bk7231n :this sat_enable value set const to same as other soc
adc_ll_set_sat_ctrl(adc_hw_t * hw,uint32_t value)153 static inline void adc_ll_set_sat_ctrl(adc_hw_t *hw, uint32_t value)
154 {
155 	hw->sat_ctrl.sat_ctrl = (value & 0x03);
156 }
157 
adc_ll_get_sat_ctrl(adc_hw_t * hw)158 static inline uint32_t adc_ll_get_sat_ctrl(adc_hw_t *hw)
159 {
160 	return (hw->sat_ctrl.sat_ctrl & 0x03);
161 }
162 
adc_ll_enable_sat_process(adc_hw_t * hw)163 static inline void adc_ll_enable_sat_process(adc_hw_t *hw)
164 {
165 	hw->sat_ctrl.sat_enable = 1;
166 }
167 
adc_ll_disable_sat_process(adc_hw_t * hw)168 static inline void adc_ll_disable_sat_process(adc_hw_t *hw)
169 {
170 	hw->sat_ctrl.sat_enable = 0;
171 }
172 
adc_ll_is_over_flow(adc_hw_t * hw)173 static inline bool adc_ll_is_over_flow(adc_hw_t *hw)
174 {
175 	return !!(hw->sat_ctrl.over_flow) ;
176 }
177 
adc_ll_get_adc_data(adc_hw_t * hw)178 static inline uint16_t adc_ll_get_adc_data(adc_hw_t *hw)
179 {
180 	return (hw->adc_data & 0xFFFF);
181 }
182 
adc_ll_check_adc_enable(adc_hw_t * hw)183 static inline bool adc_ll_check_adc_enable(adc_hw_t *hw)
184 {
185 	return !!(hw->ctrl.adc_en);
186 }
187 
adc_ll_enable_bypass_calib(adc_hw_t * hw)188 static inline void adc_ll_enable_bypass_calib(adc_hw_t *hw)
189 {
190 	hw->steady_ctrl.bypass_calibration = 1;
191 }
192 
adc_ll_disable_bypass_calib(adc_hw_t * hw)193 static inline void adc_ll_disable_bypass_calib(adc_hw_t *hw)
194 {
195 	hw->steady_ctrl.bypass_calibration = 0;
196 }
197 
adc_ll_is_analog_channel(adc_hw_t * hw,int id)198 static inline bool adc_ll_is_analog_channel(adc_hw_t *hw, int id)
199 {
200 	return ((id == 7) || (id == 8) || (id == 9));
201 }
202 
adc_ll_is_digital_channel(adc_hw_t * hw,int id)203 static inline bool adc_ll_is_digital_channel(adc_hw_t *hw, int id)
204 {
205 	return (((id >= 1) && (id <= 6)) || (id == 10) || (id == 11));
206 }
207 
adc_ll_get_fifo_data(adc_hw_t * hw)208 static inline uint16_t adc_ll_get_fifo_data(adc_hw_t *hw)
209 {
210 	return (hw->fifo_data.fifo_data_16 & 0xFFFF);
211 }
212 
adc_ll_set_dc_offset(adc_hw_t * hw,uint32_t value)213 static inline uint16_t adc_ll_set_dc_offset(adc_hw_t *hw, uint32_t value)
214 {
215 	return hw->dc_offset_ctrl.dc_offset = (value & 0xFFF);
216 }
217 
adc_ll_get_dc_offset(adc_hw_t * hw)218 static inline uint16_t adc_ll_get_dc_offset(adc_hw_t *hw)
219 {
220 	return (hw->dc_offset_ctrl.dc_offset);
221 }
222 
adc_ll_set_gain(adc_hw_t * hw,uint32_t value)223 static inline uint16_t adc_ll_set_gain(adc_hw_t *hw, uint32_t value)
224 {
225 	return hw->gain_ctrl.gain = (value & 0x1FFFF);
226 }
227 
adc_ll_get_gain(adc_hw_t * hw)228 static inline uint16_t adc_ll_get_gain(adc_hw_t *hw)
229 {
230 	return (hw->gain_ctrl.gain & 0x1FFFF);
231 }
232 
233 #define ADC_INIT_SATURATE_MODE  ADC_SATURATE_MODE_1
234 
235 #ifdef __cplusplus
236 }
237 #endif
238