2025-10-10 16:07:00 +08:00

142 lines
2.6 KiB
C

// Copyright 2020-2021 Beken
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <os/os.h>
#include <os/mem.h>
#include "icu_hal.h"
#include "icu_driver.h"
#include <os/os.h>
#include "interrupt_base.h"
icu_driver_t s_icu = {0};
bk_err_t bk_icu_driver_init(void)
{
os_memset(&s_icu, 0, sizeof(s_icu));
icu_hal_init(&s_icu.hal);
icu_enable_global_interrupt();
return BK_OK;
}
bk_err_t bk_icu_driver_deinit(void)
{
icu_disable_global_interrupt();
return BK_OK;
}
/** icu contrl cpu intterrupt api for internal**/
#if (CONFIG_ALIOS)
void bk_icu_deafult_swi(void)
{
while (1);
}
#endif
bk_err_t icu_enable_global_interrupt(void)
{
icu_enable_irq();
icu_enable_fiq();
return BK_OK;
}
bk_err_t icu_disable_global_interrupt(void)
{
icu_disable_all_interrupt();
icu_disable_irq();
icu_disable_fiq();
interrupt_deinit();
return BK_OK;
}
#if (CONFIG_ICU_GPIO)
void icu_set_gpio_perial_mode(gpio_id_t id, uint32_t mode)
{
icu_hal_set_gpio_perial_mode(&s_icu.hal, id, mode);
}
uint32_t icu_get_gpio_perial_mode(gpio_id_t id)
{
return icu_hal_get_gpio_perial_mode(&s_icu.hal, id);
}
void icu_uart2_gpio_sel(icu_gpio_uart2_map_mode_t mode)
{
icu_hal_uart2_gpio_sel(&s_icu.hal, mode);
}
void icu_spi3_gpio_sel(icu_gpio_spi3_map_mode_t mode)
{
icu_hal_spi3_gpio_sel(&s_icu.hal, mode);
}
void icu_sdio_gpio_sel(icu_gpio_sdio_map_mode_t mode)
{
icu_hal_sdio_gpio_sel(&s_icu.hal, mode);
}
uint32_t icu_pwms_gpio_sel(uint32 pwm_chan, icu_gpio_pwms_map_mode_t mode)
{
return icu_hal_pwms_gpio_sel(&s_icu.hal, pwm_chan, mode);
}
void icu_sdio_host_enable(void)
{
icu_hal_sdio_host_enable(&s_icu.hal);
}
void icu_sdio_dma_enable(void)
{
icu_hal_sdio_dma_enable(&s_icu.hal);
}
#endif
//global intterrupt APIs
uint32_t icu_get_global_int_status(void)
{
return icu_hal_get_global_int_status(&s_icu.hal);
}
uint32_t icu_get_irq_int_status(void)
{
return icu_hal_get_irq_int_status(&s_icu.hal);
}
uint32_t icu_get_fiq_int_status(void)
{
return icu_hal_get_fiq_int_status(&s_icu.hal);
}
bool icu_is_pwm_has_two_int(void)
{
return icu_hal_is_pwm_has_two_int(&s_icu.hal);
}
uint32_t icu_get_uart_int_status(void)
{
return icu_hal_get_uart_int_status(&s_icu.hal);
}