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