• 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 "hal_config.h"
18 #include "i2c_hw.h"
19 #include "i2c_ll.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 typedef struct {
26 	i2c_hw_t hw;
27 	i2c_unit_t id;
28 } i2c_hal_t;
29 
30 #define i2c_hal_set_pin(hal) i2c_ll_set_pin(&(hal)->hw, (hal)->id)
31 #define i2c_hal_enable(hal) i2c_ll_enable(&(hal)->hw, (hal)->id)
32 #define i2c_hal_disable(hal) i2c_ll_disable(&(hal)->hw, (hal)->id)
33 #define i2c_hal_enable_start(hal) i2c_ll_enable_start(&(hal)->hw, (hal)->id)
34 #define i2c_hal_disable_start(hal) i2c_ll_disable_start(&(hal)->hw, (hal)->id)
35 #define i2c_hal_is_start(hal) i2c_ll_is_start(&(hal)->hw, (hal)->id)
36 #define i2c_hal_is_start_triggered(hal, int_status) i2c_ll_is_start_triggered(&(hal)->hw, (hal)->id, int_status)
37 #define i2c_hal_enable_stop(hal) i2c_ll_enable_stop(&(hal)->hw, (hal)->id)
38 #define i2c_hal_disable_stop(hal) i2c_ll_disable_stop(&(hal)->hw, (hal)->id)
39 #define i2c_hal_is_stop_triggered(hal, int_status) i2c_ll_is_stop_triggered(&(hal)->hw, (hal)->id, int_status)
40 #define i2c_hal_reset_config_to_default(hal) i2c_ll_reset_config_to_default(&(hal)->hw, (hal)->id)
41 #define i2c_hal_set_clk_src(hal, clk_src) i2c_ll_set_clk_src(&(hal)->hw, (hal)->id, clk_src)
42 #define i2c_hal_set_slave_addr(hal, slave_addr)i2c_ll_set_slave_addr(&(hal)->hw, (hal)->id, slave_addr)
43 
44 #define i2c_hal_get_write_empty_fifo_num(hal) i2c_ll_get_write_empty_fifo_num(&(hal)->hw, (hal)->id)
45 #define i2c_hal_get_read_fifo_num(hal) i2c_ll_get_read_fifo_num(&(hal)->hw, (hal)->id)
46 #define i2c_hal_is_busy(hal) i2c_ll_is_busy(&(hal)->hw, (hal)->id)
47 
48 #define i2c_hal_get_interrupt_status(hal) i2c_ll_get_interrupt_status(&(hal)->hw, (hal)->id)
49 #define i2c_hal_clear_interrupt_status(hal, status) i2c_ll_clear_interrupt_status(&(hal)->hw, (hal)->id, status)
50 #define i2c_hal_is_sm_int_triggered(hal, int_status) i2c_ll_is_sm_int_triggered(&(hal)->hw, (hal)->id, int_status)
51 #define i2c_hal_is_scl_timeout_triggered(hal, int_status) i2c_ll_is_scl_timeout_triggered(&(hal)->hw, (hal)->id, int_status)
52 #define i2c_hal_is_arb_lost_triggered(hal, int_status) i2c_ll_is_arb_lost_triggered(&(hal)->hw, (hal)->id, int_status)
53 #define i2c_hal_is_tx_ack_triggered(hal, int_status) i2c_ll_is_tx_ack_triggered(&(hal)->hw, (hal)->id, int_status)
54 #define i2c_hal_is_rx_ack_triggered(hal, int_status) i2c_ll_is_rx_ack_triggered(&(hal)->hw, (hal)->id, int_status)
55 #define i2c_hal_tx_ack(hal) i2c_ll_tx_ack(&(hal)->hw, (hal)->id)
56 #define i2c_hal_tx_non_ack(hal) i2c_ll_tx_non_ack(&(hal)->hw, (hal)->id)
57 #define i2c_hal_is_addr_matched(hal) i2c_ll_is_addr_matched(&(hal)->hw, (hal)->id)
58 #define i2c_hal_is_tx_mode(hal) i2c_ll_is_tx_mode(&(hal)->hw, (hal)->id)
59 #define i2c_hal_is_rx_mode(hal) i2c_ll_is_rx_mode(&(hal)->hw, (hal)->id)
60 #define i2c_hal_set_tx_mode(hal) i2c_ll_set_tx_mode(&(hal)->hw, (hal)->id)
61 #define i2c_hal_set_rx_mode(hal) i2c_ll_set_rx_mode(&(hal)->hw, (hal)->id)
62 
63 #define i2c_hal_write_byte(hal, data) i2c_ll_write_byte(&(hal)->hw, (hal)->id, data)
64 #define i2c_hal_read_byte(hal) i2c_ll_read_byte(&(hal)->hw, (hal)->id)
65 
66 bk_err_t i2c_hal_init(i2c_hal_t *hal);
67 bk_err_t i2c_hal_set_baud_rate(i2c_hal_t *hal, uint32_t baud_rate);
68 bk_err_t i2c_hal_configure(i2c_hal_t *hal, const i2c_config_t *cfg);
69 bk_err_t i2c_hal_start_common(i2c_hal_t *hal);
70 bk_err_t i2c_hal_stop_common(i2c_hal_t *hal);
71 bk_err_t i2c_hal_set_write_int_mode(i2c_hal_t *hal, uint32_t data_size);
72 bk_err_t i2c_hal_set_read_int_mode(i2c_hal_t *hal, uint32_t data_size);
73 
74 #if CFG_HAL_DEBUG_I2C
75 void i2c_struct_dump(i2c_id_t id);
76 #else
77 #define i2c_struct_dump(id)
78 #endif
79 
80 #ifdef __cplusplus
81 }
82 #endif
83 
84