forked from xuos/xiuos
				
			delete useless H file on xidatong-riscv64 board
This commit is contained in:
		
							parent
							
								
									09ff679c4c
								
							
						
					
					
						commit
						f55022fc46
					
				| 
						 | 
				
			
			@ -173,7 +173,6 @@ struct InitSequenceDesc _board_init[] =
 | 
			
		|||
	{ "io_config", IoConfigInit },
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef BSP_USING_CH438
 | 
			
		||||
 | 
			
		||||
    { "hw_extuart", HwCh438Init },
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef BSP_USING_SPI
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,45 +92,5 @@ if BSP_USING_CH438
 | 
			
		|||
        int "485 direction pin number for ch438"
 | 
			
		||||
        default 18
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    menuconfig BSP_USING_4G_OR_NB
 | 
			
		||||
        bool "Select using the ec200t(4G) or bc28(NB-IOT)"
 | 
			
		||||
        default y
 | 
			
		||||
        if BSP_USING_4G_OR_NB
 | 
			
		||||
            choice
 | 
			
		||||
                prompt "Select using the ec200t(4G) or bc28(NB-IOT)"
 | 
			
		||||
                default BSP_USING_4G
 | 
			
		||||
                config BSP_USING_4G
 | 
			
		||||
                    bool "Using ec200t(4G)"
 | 
			
		||||
                config BSP_USING_NBIOT
 | 
			
		||||
                    bool "Using bc26(NB-IOT)"
 | 
			
		||||
            endchoice
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if BSP_USING_4G
 | 
			
		||||
                config BSP_4G_STATUS
 | 
			
		||||
                    int "STATUS pin number for ec200t"
 | 
			
		||||
                    default 21
 | 
			
		||||
                config BSP_4G_POWERKEY
 | 
			
		||||
                    int "POWERKEY pin number for ec200t"
 | 
			
		||||
                    default 37
 | 
			
		||||
            endif
 | 
			
		||||
 | 
			
		||||
            if BSP_USING_NBIOT
 | 
			
		||||
                config BSP_NB_RESET
 | 
			
		||||
                    int "RESET pin number for bc28"
 | 
			
		||||
                    default 21
 | 
			
		||||
            endif
 | 
			
		||||
        endif
 | 
			
		||||
 | 
			
		||||
    menuconfig BSP_USING_WIFI_HFA21
 | 
			
		||||
        bool "Using the hfa21(WIFI)"
 | 
			
		||||
        default y
 | 
			
		||||
        if BSP_USING_WIFI_HFA21
 | 
			
		||||
            config BSP_WIFI_RST
 | 
			
		||||
                int "RESET pin number for hfa21"
 | 
			
		||||
                default 22
 | 
			
		||||
        endif
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,37 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2020 AIIT XUOS Lab
 | 
			
		||||
* XiUOS is licensed under Mulan PSL v2.
 | 
			
		||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
 | 
			
		||||
* You may obtain a copy of Mulan PSL v2 at:
 | 
			
		||||
*        http://license.coscl.org.cn/MulanPSL2
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | 
			
		||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | 
			
		||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | 
			
		||||
* See the Mulan PSL v2 for more details.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file connect_hwtimer.h
 | 
			
		||||
* @brief define kd233-board hwtimer function and struct
 | 
			
		||||
* @version 1.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-07-25
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef CONNECT_HWTIMER_H
 | 
			
		||||
#define CONNECT_HWTIMER_H
 | 
			
		||||
 | 
			
		||||
#include <device.h>
 | 
			
		||||
#include "hardware_hwtimer.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int HwTimerInit(void);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2020 AIIT XUOS Lab
 | 
			
		||||
* XiUOS is licensed under Mulan PSL v2.
 | 
			
		||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
 | 
			
		||||
* You may obtain a copy of Mulan PSL v2 at:
 | 
			
		||||
*        http://license.coscl.org.cn/MulanPSL2
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | 
			
		||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | 
			
		||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | 
			
		||||
* See the Mulan PSL v2 for more details.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file connect_rtc.h
 | 
			
		||||
* @brief define kd233-board rtc function and struct
 | 
			
		||||
* @version 1.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-07-25
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef CONNECT_RTC_H
 | 
			
		||||
#define CONNECT_RTC_H
 | 
			
		||||
 | 
			
		||||
#include <device.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int HwRtcInit(void);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2020 AIIT XUOS Lab
 | 
			
		||||
* XiUOS is licensed under Mulan PSL v2.
 | 
			
		||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
 | 
			
		||||
* You may obtain a copy of Mulan PSL v2 at:
 | 
			
		||||
*        http://license.coscl.org.cn/MulanPSL2
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | 
			
		||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | 
			
		||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | 
			
		||||
* See the Mulan PSL v2 for more details.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file connect_spi.h
 | 
			
		||||
* @brief define kd233-board spi function and struct
 | 
			
		||||
* @version 1.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-07-25
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef CONNECT_SPI_H
 | 
			
		||||
#define CONNECT_SPI_H
 | 
			
		||||
 | 
			
		||||
#include <device.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int HwSpiInit(void);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2020 AIIT XUOS Lab
 | 
			
		||||
* XiUOS is licensed under Mulan PSL v2.
 | 
			
		||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
 | 
			
		||||
* You may obtain a copy of Mulan PSL v2 at:
 | 
			
		||||
*        http://license.coscl.org.cn/MulanPSL2
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | 
			
		||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | 
			
		||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | 
			
		||||
* See the Mulan PSL v2 for more details.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file connect_wdt.h
 | 
			
		||||
* @brief define kd233-board wdt function and struct
 | 
			
		||||
* @version 1.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-07-25
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef CONNECT_WDT_H
 | 
			
		||||
#define CONNECT_WDT_H
 | 
			
		||||
 | 
			
		||||
#include <device.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int HwWdtInit(void);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,171 +0,0 @@
 | 
			
		|||
/* Copyright 2018 Canaan Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file hardware_hwtimer.h
 | 
			
		||||
* @brief add from Canaan k210 SDK
 | 
			
		||||
*                https://canaan-creative.com/developer
 | 
			
		||||
* @version 1.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-07-25
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __HARDWARE_HWTIMER_H__
 | 
			
		||||
#define __HARDWARE_HWTIMER_H__
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* clang-format off */
 | 
			
		||||
typedef struct _timer_channel
 | 
			
		||||
{
 | 
			
		||||
    /* TIMER_N Load Count Register              (0x00+(N-1)*0x14) */
 | 
			
		||||
    volatile uint32_t load_count;
 | 
			
		||||
    /* TIMER_N Current Value Register           (0x04+(N-1)*0x14) */
 | 
			
		||||
    volatile uint32_t current_value;
 | 
			
		||||
    /* TIMER_N Control Register                 (0x08+(N-1)*0x14) */
 | 
			
		||||
    volatile uint32_t control;
 | 
			
		||||
    /* TIMER_N Interrupt Clear Register         (0x0c+(N-1)*0x14) */
 | 
			
		||||
    volatile uint32_t eoi;
 | 
			
		||||
    /* TIMER_N Interrupt Status Register        (0x10+(N-1)*0x14) */
 | 
			
		||||
    volatile uint32_t intr_stat;
 | 
			
		||||
} __attribute__((packed, aligned(4))) timer_channel_t;
 | 
			
		||||
 | 
			
		||||
typedef struct _kendryte_timer
 | 
			
		||||
{
 | 
			
		||||
    /* TIMER_N Register                         (0x00-0x4c) */
 | 
			
		||||
    volatile timer_channel_t channel[4];
 | 
			
		||||
    /* reserverd                                (0x50-0x9c) */
 | 
			
		||||
    volatile uint32_t resv1[20];
 | 
			
		||||
    /* TIMER Interrupt Status Register          (0xa0) */
 | 
			
		||||
    volatile uint32_t intr_stat;
 | 
			
		||||
    /* TIMER Interrupt Clear Register           (0xa4) */
 | 
			
		||||
    volatile uint32_t eoi;
 | 
			
		||||
    /* TIMER Raw Interrupt Status Register      (0xa8) */
 | 
			
		||||
    volatile uint32_t raw_intr_stat;
 | 
			
		||||
    /* TIMER Component Version Register         (0xac) */
 | 
			
		||||
    volatile uint32_t comp_version;
 | 
			
		||||
    /* TIMER_N Load Count2 Register             (0xb0-0xbc) */
 | 
			
		||||
    volatile uint32_t load_count2[4];
 | 
			
		||||
} __attribute__((packed, aligned(4))) kendryte_timer_t;
 | 
			
		||||
 | 
			
		||||
typedef enum _timer_deivce_number
 | 
			
		||||
{
 | 
			
		||||
    TIMER_DEVICE_0,
 | 
			
		||||
    TIMER_DEVICE_1,
 | 
			
		||||
    TIMER_DEVICE_2,
 | 
			
		||||
    TIMER_DEVICE_MAX,
 | 
			
		||||
} timer_device_number_t;
 | 
			
		||||
 | 
			
		||||
typedef enum _timer_channel_number
 | 
			
		||||
{
 | 
			
		||||
    TIMER_CHANNEL_0,
 | 
			
		||||
    TIMER_CHANNEL_1,
 | 
			
		||||
    TIMER_CHANNEL_2,
 | 
			
		||||
    TIMER_CHANNEL_3,
 | 
			
		||||
    TIMER_CHANNEL_MAX,
 | 
			
		||||
} timer_channel_number_t;
 | 
			
		||||
 | 
			
		||||
/* TIMER Control Register */
 | 
			
		||||
#define TIMER_CR_ENABLE             0x00000001
 | 
			
		||||
#define TIMER_CR_MODE_MASK          0x00000002
 | 
			
		||||
#define TIMER_CR_FREE_MODE          0x00000000
 | 
			
		||||
#define TIMER_CR_USER_MODE          0x00000002
 | 
			
		||||
#define TIMER_CR_INTERRUPT_MASK     0x00000004
 | 
			
		||||
#define TIMER_CR_PWM_ENABLE         0x00000008
 | 
			
		||||
/* clang-format on */
 | 
			
		||||
 | 
			
		||||
extern volatile kendryte_timer_t *const timer[3];
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Definitions for the timer callbacks
 | 
			
		||||
 */
 | 
			
		||||
typedef int (*timer_callback_t)(void *ctx);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set timer timeout
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   timer           timer
 | 
			
		||||
 * @param[in]   channel         channel
 | 
			
		||||
 * @param[in]   nanoseconds     timeout
 | 
			
		||||
 *
 | 
			
		||||
 * @return      the real timeout
 | 
			
		||||
 */
 | 
			
		||||
size_t timer_set_interval(timer_device_number_t timer_number, timer_channel_number_t channel, size_t nanoseconds);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Init timer
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   timer       timer
 | 
			
		||||
 */
 | 
			
		||||
void timer_init(timer_device_number_t timer_number);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       [DEPRECATED] Set timer timeout function
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   timer           timer
 | 
			
		||||
 * @param[in]   channel         channel
 | 
			
		||||
 * @param[in]   func            timeout function
 | 
			
		||||
 * @param[in]   priority        interrupt priority
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void timer_set_irq(timer_device_number_t timer_number, timer_channel_number_t channel, void(*func)(),  uint32_t priority);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief      Register timer interrupt user callback function
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]  device       The timer device number
 | 
			
		||||
 * @param[in]  channel      The channel
 | 
			
		||||
 * @param[in]  is_one_shot  Indicates if single shot
 | 
			
		||||
 * @param[in]  priority     The priority
 | 
			
		||||
 * @param[in]  callback     The callback function
 | 
			
		||||
 * @param[in]  ctx          The context
 | 
			
		||||
 *
 | 
			
		||||
 * @return     result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
int timer_irq_register(timer_device_number_t device, timer_channel_number_t channel, int is_single_shot, uint32_t priority, timer_callback_t callback, void *ctx);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief      Deregister timer interrupt user callback function
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]  device   The timer device number
 | 
			
		||||
 * @param[in]  channel  The channel
 | 
			
		||||
 *
 | 
			
		||||
 * @return     result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
int timer_irq_unregister(timer_device_number_t device, timer_channel_number_t channel);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Enable timer
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   timer       timer
 | 
			
		||||
 * @param[in]   channel     channel
 | 
			
		||||
 * @param[in]   enable      Enable or disable
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void timer_set_enable(timer_device_number_t timer_number, timer_channel_number_t channel, uint32_t enable);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __TIMER_H__ */
 | 
			
		||||
| 
						 | 
				
			
			@ -1,443 +0,0 @@
 | 
			
		|||
/* Copyright 2018 Canaan Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file hardware_rtc.h
 | 
			
		||||
* @brief add from Canaan k210 SDK
 | 
			
		||||
*                https://canaan-creative.com/developer
 | 
			
		||||
* @version 1.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-07-25
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __HARDWARE_RTC_H__
 | 
			
		||||
#define __HARDWARE_RTC_H__
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include "platform.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief      RTC timer mode
 | 
			
		||||
 *
 | 
			
		||||
 *             Timer mode selector
 | 
			
		||||
 *             | Mode | Description            |
 | 
			
		||||
 *             |------|------------------------|
 | 
			
		||||
 *             | 0    | Timer pause            |
 | 
			
		||||
 *             | 1    | Timer time running     |
 | 
			
		||||
 *             | 2    | Timer time setting     |
 | 
			
		||||
 */
 | 
			
		||||
typedef enum _rtc_timer_mode_e
 | 
			
		||||
{
 | 
			
		||||
    /* 0: Timer pause */
 | 
			
		||||
    RTC_TIMER_PAUSE,
 | 
			
		||||
    /* 1: Timer time running */
 | 
			
		||||
    RTC_TIMER_RUNNING,
 | 
			
		||||
    /* 2: Timer time setting */
 | 
			
		||||
    RTC_TIMER_SETTING,
 | 
			
		||||
    /* Max count of this enum*/
 | 
			
		||||
    RTC_TIMER_MAX
 | 
			
		||||
} rtc_timer_mode_t;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * @brief      RTC tick interrupt mode
 | 
			
		||||
 *
 | 
			
		||||
 *             Tick interrupt mode selector
 | 
			
		||||
 *             | Mode | Description            |
 | 
			
		||||
 *             |------|------------------------|
 | 
			
		||||
 *             | 0    | Interrupt every second |
 | 
			
		||||
 *             | 1    | Interrupt every minute |
 | 
			
		||||
 *             | 2    | Interrupt every hour   |
 | 
			
		||||
 *             | 3    | Interrupt every day    |
 | 
			
		||||
 */
 | 
			
		||||
typedef enum _rtc_tick_interrupt_mode_e
 | 
			
		||||
{
 | 
			
		||||
    /* 0: Interrupt every second */
 | 
			
		||||
    RTC_INT_SECOND,
 | 
			
		||||
    /* 1: Interrupt every minute */
 | 
			
		||||
    RTC_INT_MINUTE,
 | 
			
		||||
    /* 2: Interrupt every hour */
 | 
			
		||||
    RTC_INT_HOUR,
 | 
			
		||||
    /* 3: Interrupt every day */
 | 
			
		||||
    RTC_INT_DAY,
 | 
			
		||||
    /* Max count of this enum*/
 | 
			
		||||
    RTC_INT_MAX
 | 
			
		||||
} rtc_tick_interrupt_mode_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief      RTC mask structure
 | 
			
		||||
 *
 | 
			
		||||
 *             RTC mask structure for common use
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_mask
 | 
			
		||||
{
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv : 1;
 | 
			
		||||
    /* Second mask */
 | 
			
		||||
    uint32_t second : 1;
 | 
			
		||||
    /* Minute mask */
 | 
			
		||||
    uint32_t minute : 1;
 | 
			
		||||
    /* Hour mask */
 | 
			
		||||
    uint32_t hour : 1;
 | 
			
		||||
    /* Week mask */
 | 
			
		||||
    uint32_t week : 1;
 | 
			
		||||
    /* Day mask */
 | 
			
		||||
    uint32_t day : 1;
 | 
			
		||||
    /* Month mask */
 | 
			
		||||
    uint32_t month : 1;
 | 
			
		||||
    /* Year mask */
 | 
			
		||||
    uint32_t year : 1;
 | 
			
		||||
} __attribute__((packed, aligned(1))) rtc_mask_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       RTC register
 | 
			
		||||
 *
 | 
			
		||||
 * @note        RTC register table
 | 
			
		||||
 *
 | 
			
		||||
 * | Offset    | Name           | Description                         |
 | 
			
		||||
 * |-----------|----------------|-------------------------------------|
 | 
			
		||||
 * | 0x00      | date           | Timer date information              |
 | 
			
		||||
 * | 0x04      | time           | Timer time information              |
 | 
			
		||||
 * | 0x08      | alarm_date     | Alarm date information              |
 | 
			
		||||
 * | 0x0c      | alarm_time     | Alarm time information              |
 | 
			
		||||
 * | 0x10      | initial_count  | Timer counter initial value         |
 | 
			
		||||
 * | 0x14      | current_count  | Timer counter current value         |
 | 
			
		||||
 * | 0x18      | interrupt_ctrl | RTC interrupt settings              |
 | 
			
		||||
 * | 0x1c      | register_ctrl  | RTC register settings               |
 | 
			
		||||
 * | 0x20      | reserved0      | Reserved                            |
 | 
			
		||||
 * | 0x24      | reserved1      | Reserved                            |
 | 
			
		||||
 * | 0x28      | extended       | Timer extended information          |
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Timer date information
 | 
			
		||||
 *
 | 
			
		||||
 *              No. 0 Register (0x00)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_date
 | 
			
		||||
{
 | 
			
		||||
    /* Week. Range [0,6]. 0 is Sunday. */
 | 
			
		||||
    uint32_t week : 3;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv0 : 5;
 | 
			
		||||
    /* Day. Range [1,31] or [1,30] or [1,29] or [1,28] */
 | 
			
		||||
    uint32_t day : 5;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv1 : 3;
 | 
			
		||||
    /* Month. Range [1,12] */
 | 
			
		||||
    uint32_t month : 4;
 | 
			
		||||
    /* Year. Range [0,99] */
 | 
			
		||||
    uint32_t year : 12;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_date_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Timer time information
 | 
			
		||||
 *
 | 
			
		||||
 *              No. 1 Register (0x04)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_time
 | 
			
		||||
{
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv0 : 10;
 | 
			
		||||
    /* Second. Range [0,59] */
 | 
			
		||||
    uint32_t second : 6;
 | 
			
		||||
    /* Minute. Range [0,59] */
 | 
			
		||||
    uint32_t minute : 6;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv1 : 2;
 | 
			
		||||
    /* Hour. Range [0,23] */
 | 
			
		||||
    uint32_t hour : 5;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv2 : 3;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_time_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Alarm date information
 | 
			
		||||
 *
 | 
			
		||||
 *              No. 2 Register (0x08)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_alarm_date
 | 
			
		||||
{
 | 
			
		||||
    /* Alarm Week. Range [0,6]. 0 is Sunday. */
 | 
			
		||||
    uint32_t week : 3;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv0 : 5;
 | 
			
		||||
    /* Alarm Day. Range [1,31] or [1,30] or [1,29] or [1,28] */
 | 
			
		||||
    uint32_t day : 5;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv1 : 3;
 | 
			
		||||
    /* Alarm Month. Range [1,12] */
 | 
			
		||||
    uint32_t month : 4;
 | 
			
		||||
    /* Alarm Year. Range [0,99] */
 | 
			
		||||
    uint32_t year : 12;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_alarm_date_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Alarm time information
 | 
			
		||||
 *
 | 
			
		||||
 *              No. 3 Register (0x0c)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_alarm_time
 | 
			
		||||
{
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv0 : 10;
 | 
			
		||||
    /* Alarm Second. Range [0,59] */
 | 
			
		||||
    uint32_t second : 6;
 | 
			
		||||
    /* Alarm Minute. Range [0,59] */
 | 
			
		||||
    uint32_t minute : 6;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv1 : 2;
 | 
			
		||||
    /* Alarm Hour. Range [0,23] */
 | 
			
		||||
    uint32_t hour : 5;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv2 : 3;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_alarm_time_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Timer counter initial value
 | 
			
		||||
 *
 | 
			
		||||
 *              No. 4 Register (0x10)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_initial_count
 | 
			
		||||
{
 | 
			
		||||
    /* RTC counter initial value */
 | 
			
		||||
    uint32_t count : 32;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_initial_count_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Timer counter current value
 | 
			
		||||
 *
 | 
			
		||||
 *              No. 5 Register (0x14)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_current_count
 | 
			
		||||
{
 | 
			
		||||
    /* RTC counter current value */
 | 
			
		||||
    uint32_t count : 32;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_current_count_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief      RTC interrupt settings
 | 
			
		||||
 *
 | 
			
		||||
 *             No. 6 Register (0x18)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_interrupt_ctrl
 | 
			
		||||
{
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t tick_enable : 1;
 | 
			
		||||
    /* Alarm interrupt enable */
 | 
			
		||||
    uint32_t alarm_enable : 1;
 | 
			
		||||
    /* Tick interrupt enable */
 | 
			
		||||
    uint32_t tick_int_mode : 2;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv : 20;
 | 
			
		||||
    /* Alarm compare mask for interrupt */
 | 
			
		||||
    uint32_t alarm_compare_mask : 8;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_interrupt_ctrl_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       RTC register settings
 | 
			
		||||
 *
 | 
			
		||||
 *              No. 7 Register (0x1c)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_register_ctrl
 | 
			
		||||
{
 | 
			
		||||
    /* RTC timer read enable */
 | 
			
		||||
    uint32_t read_enable : 1;
 | 
			
		||||
    /* RTC timer write enable */
 | 
			
		||||
    uint32_t write_enable : 1;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv0 : 11;
 | 
			
		||||
    /* RTC timer mask */
 | 
			
		||||
    uint32_t TimerMask : 8;
 | 
			
		||||
    /* RTC alarm mask */
 | 
			
		||||
    uint32_t alarm_mask : 8;
 | 
			
		||||
    /* RTC counter initial count value mask */
 | 
			
		||||
    uint32_t initial_count_mask : 1;
 | 
			
		||||
    /* RTC interrupt register mask */
 | 
			
		||||
    uint32_t interrupt_register_mask : 1;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv1 : 1;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_register_ctrl_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Reserved
 | 
			
		||||
 *
 | 
			
		||||
 *              No. 8 Register (0x20)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_reserved0
 | 
			
		||||
{
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv : 32;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_reserved0_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief      Reserved
 | 
			
		||||
 *
 | 
			
		||||
 *             No. 9 Register (0x24)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_reserved1
 | 
			
		||||
{
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv : 32;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_reserved1_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief      Timer extended information
 | 
			
		||||
 *
 | 
			
		||||
 *             No. 10 Register (0x28)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc_extended
 | 
			
		||||
{
 | 
			
		||||
    /* Century. Range [0,31] */
 | 
			
		||||
    uint32_t century : 5;
 | 
			
		||||
    /* Is leap year. 1 is leap year, 0 is not leap year */
 | 
			
		||||
    uint32_t leap_year : 1;
 | 
			
		||||
    /* Reserved */
 | 
			
		||||
    uint32_t resv : 26;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_extended_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Real-time clock struct
 | 
			
		||||
 *
 | 
			
		||||
 *              A real-time clock (RTC) is a computer clock that keeps track of
 | 
			
		||||
 *              the current time.
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _rtc
 | 
			
		||||
{
 | 
			
		||||
    /* No. 0 (0x00): Timer date information */
 | 
			
		||||
    rtc_date_t date;
 | 
			
		||||
    /* No. 1 (0x04): Timer time information */
 | 
			
		||||
    rtc_time_t time;
 | 
			
		||||
    /* No. 2 (0x08): Alarm date information */
 | 
			
		||||
    rtc_alarm_date_t alarm_date;
 | 
			
		||||
    /* No. 3 (0x0c): Alarm time information */
 | 
			
		||||
    rtc_alarm_time_t alarm_time;
 | 
			
		||||
    /* No. 4 (0x10): Timer counter initial value */
 | 
			
		||||
    rtc_initial_count_t initial_count;
 | 
			
		||||
    /* No. 5 (0x14): Timer counter current value */
 | 
			
		||||
    rtc_current_count_t current_count;
 | 
			
		||||
    /* No. 6 (0x18): RTC interrupt settings */
 | 
			
		||||
    rtc_interrupt_ctrl_t interrupt_ctrl;
 | 
			
		||||
    /* No. 7 (0x1c): RTC register settings */
 | 
			
		||||
    rtc_register_ctrl_t register_ctrl;
 | 
			
		||||
    /* No. 8 (0x20): Reserved */
 | 
			
		||||
    rtc_reserved0_t reserved0;
 | 
			
		||||
    /* No. 9 (0x24): Reserved */
 | 
			
		||||
    rtc_reserved1_t reserved1;
 | 
			
		||||
    /* No. 10 (0x28): Timer extended information */
 | 
			
		||||
    rtc_extended_t extended;
 | 
			
		||||
} __attribute__((packed, aligned(4))) rtc_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Real-time clock object
 | 
			
		||||
 */
 | 
			
		||||
extern volatile rtc_t *const rtc;
 | 
			
		||||
extern volatile uint32_t *const rtc_base;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set date time to RTC
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   year        The year
 | 
			
		||||
 * @param[in]   month       The month
 | 
			
		||||
 * @param[in]   day         The day
 | 
			
		||||
 * @param[in]   hour        The hour
 | 
			
		||||
 * @param[in]   minute      The minute
 | 
			
		||||
 * @param[in]   second      The second
 | 
			
		||||
 *
 | 
			
		||||
 * @return      result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
int rtc_timer_set(int year, int month, int day, int hour, int minute, int second);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Get date time from RTC
 | 
			
		||||
 *
 | 
			
		||||
 * @param       year        The year
 | 
			
		||||
 * @param       month       The month
 | 
			
		||||
 * @param       day         The day
 | 
			
		||||
 * @param       hour        The hour
 | 
			
		||||
 * @param       minute      The minute
 | 
			
		||||
 * @param       second      The second
 | 
			
		||||
 *
 | 
			
		||||
 * @return      result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
int rtc_timer_get(int *year, int *month, int *day, int *hour, int *minute, int *second);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Initialize RTC
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
int rtc_init(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set RTC in protect mode or not
 | 
			
		||||
 *
 | 
			
		||||
 * @param       enable        Enable flag
 | 
			
		||||
 *
 | 
			
		||||
 * @return      result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
int rtc_protect_set(int enable);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set RTC timer mode
 | 
			
		||||
 *
 | 
			
		||||
 * @param       timer_mode        Timer mode
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void rtc_timer_set_mode(rtc_timer_mode_t timer_mode);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set RTC timer clock frequency
 | 
			
		||||
 *
 | 
			
		||||
 * @param       frequency        Frequency
 | 
			
		||||
 *
 | 
			
		||||
 * @return      result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
int rtc_timer_set_clock_frequency(unsigned int frequency);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set RTC timer clock count value
 | 
			
		||||
 *
 | 
			
		||||
 * @param       count        Count
 | 
			
		||||
 *
 | 
			
		||||
 * @return      result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
int rtc_timer_set_clock_count_value(unsigned int  count);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _DRIVER_RTC_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -1,494 +0,0 @@
 | 
			
		|||
/* Copyright 2018 Canaan Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file hardware_spi.h
 | 
			
		||||
* @brief add from Canaan k210 SDK
 | 
			
		||||
*                https://canaan-creative.com/developer
 | 
			
		||||
* @version 1.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-07-25
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __HARDWARE_SPI_H__
 | 
			
		||||
#define __HARDWARE_SPI_H__
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include "dmac.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* clang-format off */
 | 
			
		||||
typedef struct _spi
 | 
			
		||||
{
 | 
			
		||||
    /* SPI Control Register 0                                    (0x00)*/
 | 
			
		||||
    volatile uint32_t ctrlr0;
 | 
			
		||||
    /* SPI Control Register 1                                    (0x04)*/
 | 
			
		||||
    volatile uint32_t ctrlr1;
 | 
			
		||||
    /* SPI Enable Register                                       (0x08)*/
 | 
			
		||||
    volatile uint32_t ssienr;
 | 
			
		||||
    /* SPI Microwire Control Register                            (0x0c)*/
 | 
			
		||||
    volatile uint32_t mwcr;
 | 
			
		||||
    /* SPI Slave Enable Register                                 (0x10)*/
 | 
			
		||||
    volatile uint32_t ser;
 | 
			
		||||
    /* SPI Baud Rate Select                                      (0x14)*/
 | 
			
		||||
    volatile uint32_t baudr;
 | 
			
		||||
    /* SPI Transmit FIFO Threshold Level                         (0x18)*/
 | 
			
		||||
    volatile uint32_t txftlr;
 | 
			
		||||
    /* SPI Receive FIFO Threshold Level                          (0x1c)*/
 | 
			
		||||
    volatile uint32_t rxftlr;
 | 
			
		||||
    /* SPI Transmit FIFO Level Register                          (0x20)*/
 | 
			
		||||
    volatile uint32_t txflr;
 | 
			
		||||
    /* SPI Receive FIFO Level Register                           (0x24)*/
 | 
			
		||||
    volatile uint32_t rxflr;
 | 
			
		||||
    /* SPI Status Register                                       (0x28)*/
 | 
			
		||||
    volatile uint32_t sr;
 | 
			
		||||
    /* SPI Interrupt Mask Register                               (0x2c)*/
 | 
			
		||||
    volatile uint32_t imr;
 | 
			
		||||
    /* SPI Interrupt Status Register                             (0x30)*/
 | 
			
		||||
    volatile uint32_t isr;
 | 
			
		||||
    /* SPI Raw Interrupt Status Register                         (0x34)*/
 | 
			
		||||
    volatile uint32_t risr;
 | 
			
		||||
    /* SPI Transmit FIFO Overflow Interrupt Clear Register       (0x38)*/
 | 
			
		||||
    volatile uint32_t txoicr;
 | 
			
		||||
    /* SPI Receive FIFO Overflow Interrupt Clear Register        (0x3c)*/
 | 
			
		||||
    volatile uint32_t rxoicr;
 | 
			
		||||
    /* SPI Receive FIFO Underflow Interrupt Clear Register       (0x40)*/
 | 
			
		||||
    volatile uint32_t rxuicr;
 | 
			
		||||
    /* SPI Multi-Master Interrupt Clear Register                 (0x44)*/
 | 
			
		||||
    volatile uint32_t msticr;
 | 
			
		||||
    /* SPI Interrupt Clear Register                              (0x48)*/
 | 
			
		||||
    volatile uint32_t icr;
 | 
			
		||||
    /* SPI DMA Control Register                                  (0x4c)*/
 | 
			
		||||
    volatile uint32_t dmacr;
 | 
			
		||||
    /* SPI DMA Transmit Data Level                               (0x50)*/
 | 
			
		||||
    volatile uint32_t dmatdlr;
 | 
			
		||||
    /* SPI DMA Receive Data Level                                (0x54)*/
 | 
			
		||||
    volatile uint32_t dmardlr;
 | 
			
		||||
    /* SPI Identification Register                               (0x58)*/
 | 
			
		||||
    volatile uint32_t idr;
 | 
			
		||||
    /* SPI DWC_ssi component version                             (0x5c)*/
 | 
			
		||||
    volatile uint32_t ssic_version_id;
 | 
			
		||||
    /* SPI Data Register 0-36                                    (0x60 -- 0xec)*/
 | 
			
		||||
    volatile uint32_t dr[36];
 | 
			
		||||
    /* SPI RX Sample Delay Register                              (0xf0)*/
 | 
			
		||||
    volatile uint32_t rx_sample_delay;
 | 
			
		||||
    /* SPI SPI Control Register                                  (0xf4)*/
 | 
			
		||||
    volatile uint32_t spi_ctrlr0;
 | 
			
		||||
    /* reserved                                                  (0xf8)*/
 | 
			
		||||
    volatile uint32_t resv;
 | 
			
		||||
    /* SPI XIP Mode bits                                         (0xfc)*/
 | 
			
		||||
    volatile uint32_t xip_mode_bits;
 | 
			
		||||
    /* SPI XIP INCR transfer opcode                              (0x100)*/
 | 
			
		||||
    volatile uint32_t xip_incr_inst;
 | 
			
		||||
    /* SPI XIP WRAP transfer opcode                              (0x104)*/
 | 
			
		||||
    volatile uint32_t xip_wrap_inst;
 | 
			
		||||
    /* SPI XIP Control Register                                  (0x108)*/
 | 
			
		||||
    volatile uint32_t xip_ctrl;
 | 
			
		||||
    /* SPI XIP Slave Enable Register                             (0x10c)*/
 | 
			
		||||
    volatile uint32_t xip_ser;
 | 
			
		||||
    /* SPI XIP Receive FIFO Overflow Interrupt Clear Register    (0x110)*/
 | 
			
		||||
    volatile uint32_t xrxoicr;
 | 
			
		||||
    /* SPI XIP time out register for continuous transfers        (0x114)*/
 | 
			
		||||
    volatile uint32_t xip_cnt_time_out;
 | 
			
		||||
    volatile uint32_t endian;
 | 
			
		||||
} __attribute__((packed, aligned(4))) spi_t;
 | 
			
		||||
/* clang-format on */
 | 
			
		||||
 | 
			
		||||
typedef enum _spi_device_num
 | 
			
		||||
{
 | 
			
		||||
    SPI_DEVICE_0,
 | 
			
		||||
    SPI_DEVICE_1,
 | 
			
		||||
    SPI_DEVICE_2,
 | 
			
		||||
    SPI_DEVICE_3,
 | 
			
		||||
    SPI_DEVICE_MAX,
 | 
			
		||||
} spi_device_num_t;
 | 
			
		||||
 | 
			
		||||
typedef enum _spi_work_mode
 | 
			
		||||
{
 | 
			
		||||
    SPI_WORK_MODE_0,
 | 
			
		||||
    SPI_WORK_MODE_1,
 | 
			
		||||
    SPI_WORK_MODE_2,
 | 
			
		||||
    SPI_WORK_MODE_3,
 | 
			
		||||
} spi_work_mode_t;
 | 
			
		||||
 | 
			
		||||
typedef enum _spi_frame_format
 | 
			
		||||
{
 | 
			
		||||
    SPI_FF_STANDARD,
 | 
			
		||||
    SPI_FF_DUAL,
 | 
			
		||||
    SPI_FF_QUAD,
 | 
			
		||||
    SPI_FF_OCTAL
 | 
			
		||||
} spi_frame_format_t;
 | 
			
		||||
 | 
			
		||||
typedef enum _spi_instruction_address_trans_mode
 | 
			
		||||
{
 | 
			
		||||
    SPI_AITM_STANDARD,
 | 
			
		||||
    SPI_AITM_ADDR_STANDARD,
 | 
			
		||||
    SPI_AITM_AS_FRAME_FORMAT
 | 
			
		||||
} spi_instruction_address_trans_mode_t;
 | 
			
		||||
 | 
			
		||||
typedef enum _spi_transfer_mode
 | 
			
		||||
{
 | 
			
		||||
    SPI_TMOD_TRANS_RECV,
 | 
			
		||||
    SPI_TMOD_TRANS,
 | 
			
		||||
    SPI_TMOD_RECV,
 | 
			
		||||
    SPI_TMOD_EEROM
 | 
			
		||||
} spi_transfer_mode_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef enum _spi_transfer_width
 | 
			
		||||
{
 | 
			
		||||
    SPI_TRANS_CHAR  = 0x1,
 | 
			
		||||
    SPI_TRANS_SHORT = 0x2,
 | 
			
		||||
    SPI_TRANS_INT   = 0x4,
 | 
			
		||||
} spi_transfer_width_t;
 | 
			
		||||
 | 
			
		||||
typedef enum _spi_chip_select
 | 
			
		||||
{
 | 
			
		||||
    SPI_CHIP_SELECT_0,
 | 
			
		||||
    SPI_CHIP_SELECT_1,
 | 
			
		||||
    SPI_CHIP_SELECT_2,
 | 
			
		||||
    SPI_CHIP_SELECT_3,
 | 
			
		||||
    SPI_CHIP_SELECT_MAX,
 | 
			
		||||
} spi_chip_select_t;
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
    WRITE_CONFIG,
 | 
			
		||||
    READ_CONFIG,
 | 
			
		||||
    WRITE_DATA_BYTE,
 | 
			
		||||
    READ_DATA_BYTE,
 | 
			
		||||
    WRITE_DATA_BLOCK,
 | 
			
		||||
    READ_DATA_BLOCK,
 | 
			
		||||
} spi_slave_command_e;
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    uint8_t cmd;
 | 
			
		||||
    uint8_t err;
 | 
			
		||||
    uint32_t addr;
 | 
			
		||||
    uint32_t len;
 | 
			
		||||
} spi_slave_command_t;
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
    IDLE,
 | 
			
		||||
    COMMAND,
 | 
			
		||||
    TRANSFER,
 | 
			
		||||
} spi_slave_status_e;
 | 
			
		||||
 | 
			
		||||
typedef int (*spi_slave_receive_callback_t)(void *ctx);
 | 
			
		||||
 | 
			
		||||
typedef struct _spi_slave_instance
 | 
			
		||||
{
 | 
			
		||||
    uint8_t int_pin;
 | 
			
		||||
    uint8_t ready_pin;
 | 
			
		||||
    dmac_channel_number_t dmac_channel;
 | 
			
		||||
    uint8_t dfs;
 | 
			
		||||
    uint8_t slv_oe;
 | 
			
		||||
    uint8_t work_mode;
 | 
			
		||||
    size_t data_bit_length;
 | 
			
		||||
    volatile spi_slave_status_e status;
 | 
			
		||||
    volatile spi_slave_command_t command;
 | 
			
		||||
    volatile uint8_t *config_ptr;
 | 
			
		||||
    uint32_t config_len;
 | 
			
		||||
    spi_slave_receive_callback_t callback;
 | 
			
		||||
} spi_slave_instance_t;
 | 
			
		||||
 | 
			
		||||
typedef struct _spi_data_t
 | 
			
		||||
{
 | 
			
		||||
    dmac_channel_number_t tx_channel;
 | 
			
		||||
    dmac_channel_number_t rx_channel;
 | 
			
		||||
    uint32_t *tx_buf;
 | 
			
		||||
    size_t tx_len;
 | 
			
		||||
    uint32_t *rx_buf;
 | 
			
		||||
    size_t rx_len;
 | 
			
		||||
    spi_transfer_mode_t TransferMode;
 | 
			
		||||
    bool fill_mode;
 | 
			
		||||
} spi_data_t;
 | 
			
		||||
 | 
			
		||||
extern volatile spi_t *const spi[4];
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set spi configuration
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   spi_num             Spi bus number
 | 
			
		||||
 * @param[in]   mode                Spi mode
 | 
			
		||||
 * @param[in]   frame_format        Spi frame format
 | 
			
		||||
 * @param[in]   data_bit_length     Spi data bit length
 | 
			
		||||
 * @param[in]   endian              0:little-endian 1:big-endian
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Void
 | 
			
		||||
 */
 | 
			
		||||
void spi_init(spi_device_num_t spi_num, spi_work_mode_t work_mode, spi_frame_format_t frame_format,
 | 
			
		||||
              size_t data_bit_length, uint32_t endian);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set multiline configuration
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   spi_num                                 Spi bus number
 | 
			
		||||
 * @param[in]   instruction_length                      Instruction length
 | 
			
		||||
 * @param[in]   address_length                          Address length
 | 
			
		||||
 * @param[in]   wait_cycles                             Wait cycles
 | 
			
		||||
 * @param[in]   instruction_address_trans_mode          Spi transfer mode
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void spi_init_non_standard(spi_device_num_t spi_num, uint32_t instruction_length, uint32_t address_length,
 | 
			
		||||
                           uint32_t wait_cycles, spi_instruction_address_trans_mode_t instruction_address_trans_mode);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi send data
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   chip_select     Spi chip select
 | 
			
		||||
 * @param[in]   CmdBuff        Spi command buffer point
 | 
			
		||||
 * @param[in]   CmdLen         Spi command length
 | 
			
		||||
 * @param[in]   tx_buff         Spi transmit buffer point
 | 
			
		||||
 * @param[in]   tx_len          Spi transmit buffer length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_send_data_standard(spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint8_t *CmdBuff,
 | 
			
		||||
                            size_t CmdLen, const uint8_t *tx_buff, size_t tx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi receive data
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   spi_num             Spi bus number
 | 
			
		||||
 * @param[in]   chip_select         Spi chip select
 | 
			
		||||
 * @param[in]   CmdBuff            Spi command buffer point
 | 
			
		||||
 * @param[in]   CmdLen             Spi command length
 | 
			
		||||
 * @param[in]   rx_buff             Spi receive buffer point
 | 
			
		||||
 * @param[in]   rx_len              Spi receive buffer length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_receive_data_standard(spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint8_t *CmdBuff,
 | 
			
		||||
                               size_t CmdLen, uint8_t *rx_buff, size_t rx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi special receive data
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   chip_select     Spi chip select
 | 
			
		||||
 * @param[in]   CmdBuff        Spi command buffer point
 | 
			
		||||
 * @param[in]   CmdLen         Spi command length
 | 
			
		||||
 * @param[in]   rx_buff         Spi receive buffer point
 | 
			
		||||
 * @param[in]   rx_len          Spi receive buffer length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_receive_data_multiple(spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint32_t *CmdBuff,
 | 
			
		||||
                               size_t CmdLen, uint8_t *rx_buff, size_t rx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi special send data
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   chip_select     Spi chip select
 | 
			
		||||
 * @param[in]   CmdBuff        Spi command buffer point
 | 
			
		||||
 * @param[in]   CmdLen         Spi command length
 | 
			
		||||
 * @param[in]   tx_buff         Spi transmit buffer point
 | 
			
		||||
 * @param[in]   tx_len          Spi transmit buffer length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_send_data_multiple(spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint32_t *CmdBuff,
 | 
			
		||||
                            size_t CmdLen, const uint8_t *tx_buff, size_t tx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi send data by dma
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   channel_num     Dmac channel number
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   chip_select     Spi chip select
 | 
			
		||||
 * @param[in]   CmdBuff        Spi command buffer point
 | 
			
		||||
 * @param[in]   CmdLen         Spi command length
 | 
			
		||||
 * @param[in]   tx_buff         Spi transmit buffer point
 | 
			
		||||
 * @param[in]   tx_len          Spi transmit buffer length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_send_data_standard_dma(dmac_channel_number_t channel_num, spi_device_num_t spi_num,
 | 
			
		||||
                                spi_chip_select_t chip_select,
 | 
			
		||||
                                const uint8_t *CmdBuff, size_t CmdLen, const uint8_t *tx_buff, size_t tx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi receive data by dma
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   w_channel_num       Dmac write channel number
 | 
			
		||||
 * @param[in]   r_channel_num       Dmac read channel number
 | 
			
		||||
 * @param[in]   spi_num             Spi bus number
 | 
			
		||||
 * @param[in]   chip_select         Spi chip select
 | 
			
		||||
 * @param[in]   CmdBuff            Spi command buffer point
 | 
			
		||||
 * @param[in]   CmdLen             Spi command length
 | 
			
		||||
 * @param[in]   rx_buff             Spi receive buffer point
 | 
			
		||||
 * @param[in]   rx_len              Spi receive buffer length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_receive_data_standard_dma(dmac_channel_number_t dma_send_channel_num,
 | 
			
		||||
                                   dmac_channel_number_t dma_receive_channel_num,
 | 
			
		||||
                                   spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint8_t *CmdBuff,
 | 
			
		||||
                                   size_t CmdLen, uint8_t *rx_buff, size_t rx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi special send data by dma
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   channel_num     Dmac channel number
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   chip_select     Spi chip select
 | 
			
		||||
 * @param[in]   CmdBuff        Spi command buffer point
 | 
			
		||||
 * @param[in]   CmdLen         Spi command length
 | 
			
		||||
 * @param[in]   tx_buff         Spi transmit buffer point
 | 
			
		||||
 * @param[in]   tx_len          Spi transmit buffer length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_send_data_multiple_dma(dmac_channel_number_t channel_num, spi_device_num_t spi_num,
 | 
			
		||||
                                spi_chip_select_t chip_select,
 | 
			
		||||
                                const uint32_t *CmdBuff, size_t CmdLen, const uint8_t *tx_buff, size_t tx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi special receive data by dma
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   dma_send_channel_num        Dmac write channel number
 | 
			
		||||
 * @param[in]   dma_receive_channel_num     Dmac read channel number
 | 
			
		||||
 * @param[in]   spi_num                     Spi bus number
 | 
			
		||||
 * @param[in]   chip_select                 Spi chip select
 | 
			
		||||
 * @param[in]   CmdBuff                    Spi command buffer point
 | 
			
		||||
 * @param[in]   CmdLen                     Spi command length
 | 
			
		||||
 * @param[in]   rx_buff                     Spi receive buffer point
 | 
			
		||||
 * @param[in]   rx_len                      Spi receive buffer length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_receive_data_multiple_dma(dmac_channel_number_t dma_send_channel_num,
 | 
			
		||||
                                   dmac_channel_number_t dma_receive_channel_num,
 | 
			
		||||
                                   spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint32_t *CmdBuff,
 | 
			
		||||
                                   size_t CmdLen, uint8_t *rx_buff, size_t rx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi fill dma
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   channel_num     Dmac channel number
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   chip_select     Spi chip select
 | 
			
		||||
 * @param[in]   tx_buff        Spi command buffer point
 | 
			
		||||
 * @param[in]   tx_len         Spi command length
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_fill_data_dma(dmac_channel_number_t channel_num, spi_device_num_t spi_num, spi_chip_select_t chip_select,
 | 
			
		||||
                       const uint32_t *tx_buff, size_t tx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi normal send by dma
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   channel_num     Dmac channel number
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   chip_select     Spi chip select
 | 
			
		||||
 * @param[in]   tx_buff         Spi transmit buffer point
 | 
			
		||||
 * @param[in]   tx_len          Spi transmit buffer length
 | 
			
		||||
 * @param[in]   stw             Spi transfer width
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Result
 | 
			
		||||
 *     - 0      Success
 | 
			
		||||
 *     - Other  Fail
 | 
			
		||||
 */
 | 
			
		||||
void spi_send_data_normal_dma(dmac_channel_number_t channel_num, spi_device_num_t spi_num,
 | 
			
		||||
                              spi_chip_select_t chip_select,
 | 
			
		||||
                              const void *tx_buff, size_t tx_len, spi_transfer_width_t spi_transfer_width);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi normal send by dma
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   spi_clk         Spi clock rate
 | 
			
		||||
 *
 | 
			
		||||
 * @return      The real spi clock rate
 | 
			
		||||
 */
 | 
			
		||||
uint32_t spi_set_clk_rate(spi_device_num_t spi_num, uint32_t spi_clk);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi full duplex send receive data by dma
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   dma_send_channel_num          Dmac write channel number
 | 
			
		||||
 * @param[in]   dma_receive_channel_num       Dmac read channel number
 | 
			
		||||
 * @param[in]   spi_num                       Spi bus number
 | 
			
		||||
 * @param[in]   chip_select                   Spi chip select
 | 
			
		||||
 * @param[in]   tx_buf                        Spi send buffer
 | 
			
		||||
 * @param[in]   tx_len                        Spi send buffer length
 | 
			
		||||
 * @param[in]   rx_buf                        Spi receive buffer
 | 
			
		||||
 * @param[in]   rx_len                        Spi receive buffer length
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void spi_dup_send_receive_data_dma(dmac_channel_number_t dma_send_channel_num,
 | 
			
		||||
                               dmac_channel_number_t dma_receive_channel_num,
 | 
			
		||||
                               spi_device_num_t spi_num, spi_chip_select_t chip_select,
 | 
			
		||||
                               const uint8_t *tx_buf, size_t tx_len, uint8_t *rx_buf, size_t rx_len);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Set spi slave configuration
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   int_pin             SPI master starts sending data interrupt.
 | 
			
		||||
 * @param[in]   ready_pin           SPI slave ready.
 | 
			
		||||
 * @param[in]   dmac_channel        Dmac channel number for block.
 | 
			
		||||
 * @param[in]   data_bit_length     Spi data bit length
 | 
			
		||||
 * @param[in]   data                SPI slave device data buffer.
 | 
			
		||||
 * @param[in]   len                 The length of SPI slave device data buffer.
 | 
			
		||||
 * @param[in]   callback            Callback of spi slave.
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Void
 | 
			
		||||
 */
 | 
			
		||||
void spi_slave_config(uint8_t int_pin, uint8_t ready_pin, dmac_channel_number_t dmac_channel, size_t data_bit_length, uint8_t *data, uint32_t len, spi_slave_receive_callback_t callback);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Spi handle transfer data operations
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   spi_num         Spi bus number
 | 
			
		||||
 * @param[in]   chip_select     Spi chip select
 | 
			
		||||
 * @param[in]   data            Spi transfer data information
 | 
			
		||||
 * @param[in]   cb              Spi DMA callback
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void spi_handle_data_dma(spi_device_num_t spi_num, spi_chip_select_t chip_select, spi_data_t data, plic_interrupt_t *cb);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __HARDWARE_SPI_H__ */
 | 
			
		||||
| 
						 | 
				
			
			@ -1,180 +0,0 @@
 | 
			
		|||
/* Copyright 2018 Canaan Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file wdt.h
 | 
			
		||||
* @brief add from Canaan k210 SDK
 | 
			
		||||
*                https://canaan-creative.com/developer
 | 
			
		||||
* @version 1.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-07-25
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __WDT_H__
 | 
			
		||||
#define __WDT_H__
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include <plic.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* clang-format off */
 | 
			
		||||
typedef struct _wdt
 | 
			
		||||
{
 | 
			
		||||
    /* WDT Control Register                     (0x00) */
 | 
			
		||||
    volatile uint32_t cr;
 | 
			
		||||
    /* WDT Timeout Range Register               (0x04) */
 | 
			
		||||
    volatile uint32_t torr;
 | 
			
		||||
    /* WDT Current Counter Value Register       (0x08) */
 | 
			
		||||
    volatile uint32_t ccvr;
 | 
			
		||||
    /* WDT Counter Restart Register             (0x0c) */
 | 
			
		||||
    volatile uint32_t crr;
 | 
			
		||||
    /* WDT Interrupt Status Register            (0x10) */
 | 
			
		||||
    volatile uint32_t stat;
 | 
			
		||||
    /* WDT Interrupt Clear Register             (0x14) */
 | 
			
		||||
    volatile uint32_t eoi;
 | 
			
		||||
    /* reserverd                                (0x18) */
 | 
			
		||||
    volatile uint32_t resv1;
 | 
			
		||||
    /* WDT Protection level Register            (0x1c) */
 | 
			
		||||
    volatile uint32_t prot_level;
 | 
			
		||||
    /* reserved                                 (0x20-0xe0) */
 | 
			
		||||
    volatile uint32_t resv4[49];
 | 
			
		||||
    /* WDT Component Parameters Register 5      (0xe4) */
 | 
			
		||||
    volatile uint32_t comp_param_5;
 | 
			
		||||
    /* WDT Component Parameters Register 4      (0xe8) */
 | 
			
		||||
    volatile uint32_t comp_param_4;
 | 
			
		||||
    /* WDT Component Parameters Register 3      (0xec) */
 | 
			
		||||
    volatile uint32_t comp_param_3;
 | 
			
		||||
    /* WDT Component Parameters Register 2      (0xf0) */
 | 
			
		||||
    volatile uint32_t comp_param_2;
 | 
			
		||||
    /* WDT Component Parameters Register 1      (0xf4) */
 | 
			
		||||
    volatile uint32_t comp_param_1;
 | 
			
		||||
    /* WDT Component Version Register           (0xf8) */
 | 
			
		||||
    volatile uint32_t comp_version;
 | 
			
		||||
    /* WDT Component Type Register              (0xfc) */
 | 
			
		||||
    volatile uint32_t comp_type;
 | 
			
		||||
} __attribute__((packed, aligned(4))) wdt_t;
 | 
			
		||||
 | 
			
		||||
typedef enum _wdt_device_number
 | 
			
		||||
{
 | 
			
		||||
    WDT_DEVICE_0,
 | 
			
		||||
    WDT_DEVICE_1,
 | 
			
		||||
    WDT_DEVICE_MAX,
 | 
			
		||||
} wdt_device_number_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define WDT_RESET_ALL                                       0x00000000U
 | 
			
		||||
#define WDT_RESET_CPU                                       0x00000001U
 | 
			
		||||
 | 
			
		||||
/* WDT Control Register */
 | 
			
		||||
#define WDT_CR_ENABLE                                       0x00000001U
 | 
			
		||||
#define WDT_CR_RMOD_MASK                                    0x00000002U
 | 
			
		||||
#define WDT_CR_RMOD_RESET                                   0x00000000U
 | 
			
		||||
#define WDT_CR_RMOD_INTERRUPT                               0x00000002U
 | 
			
		||||
#define WDT_CR_RPL_MASK                                     0x0000001CU
 | 
			
		||||
#define WDT_CR_RPL(x)                                       ((x) << 2)
 | 
			
		||||
/* WDT Timeout Range Register */
 | 
			
		||||
#define WDT_TORR_TOP_MASK                                   0x000000FFU
 | 
			
		||||
#define WDT_TORR_TOP(x)                                     ((x) << 4 | (x) << 0)
 | 
			
		||||
/* WDT Current Counter Value Register */
 | 
			
		||||
#define WDT_CCVR_MASK                                       0xFFFFFFFFU
 | 
			
		||||
/* WDT Counter Restart Register */
 | 
			
		||||
#define WDT_CRR_MASK                                        0x00000076U
 | 
			
		||||
/* WDT Interrupt Status Register */
 | 
			
		||||
#define WDT_STAT_MASK                                       0x00000001U
 | 
			
		||||
/* WDT Interrupt Clear Register */
 | 
			
		||||
#define WDT_EOI_MASK                                        0x00000001U
 | 
			
		||||
/* WDT Protection level Register */
 | 
			
		||||
#define WDT_PROT_LEVEL_MASK                                 0x00000007U
 | 
			
		||||
/* WDT Component Parameter Register 5 */
 | 
			
		||||
#define WDT_COMP_PARAM_5_CP_WDT_USER_TOP_MAX_MASK           0xFFFFFFFFU
 | 
			
		||||
/* WDT Component Parameter Register 4 */
 | 
			
		||||
#define WDT_COMP_PARAM_4_CP_WDT_USER_TOP_INIT_MAX_MASK      0xFFFFFFFFU
 | 
			
		||||
/* WDT Component Parameter Register 3 */
 | 
			
		||||
#define WDT_COMP_PARAM_3_CD_WDT_TOP_RST_MASK                0xFFFFFFFFU
 | 
			
		||||
/* WDT Component Parameter Register 2 */
 | 
			
		||||
#define WDT_COMP_PARAM_3_CP_WDT_CNT_RST_MASK                0xFFFFFFFFU
 | 
			
		||||
/* WDT Component Parameter Register 1 */
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_ALWAYS_EN_MASK                 0x00000001U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_DFLT_RMOD_MASK                 0x00000002U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_DUAL_TOP_MASK                  0x00000004U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_HC_RMOD_MASK                   0x00000008U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_HC_RPL_MASK                    0x00000010U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_HC_TOP_MASK                    0x00000020U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_USE_FIX_TOP_MASK               0x00000040U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_PAUSE_MASK                     0x00000080U
 | 
			
		||||
#define WDT_COMP_PARAM_1_APB_DATA_WIDTH_MASK                0x00000300U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_DFLT_RPL_MASK                  0x00001C00U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_DFLT_TOP_MASK                  0x000F0000U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_DFLT_TOP_INIT_MASK             0x00F00000U
 | 
			
		||||
#define WDT_COMP_PARAM_1_WDT_CNT_WIDTH_MASK                 0x1F000000U
 | 
			
		||||
/* WDT Component Version Register */
 | 
			
		||||
#define WDT_COMP_VERSION_MASK                               0xFFFFFFFFU
 | 
			
		||||
/* WDT Component Type Register */
 | 
			
		||||
#define WDT_COMP_TYPE_MASK                                  0xFFFFFFFFU
 | 
			
		||||
/* clang-format on */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Feed wdt
 | 
			
		||||
 */
 | 
			
		||||
void wdt_feed(wdt_device_number_t id);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Start wdt
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   id                  Wdt id 0 or 1
 | 
			
		||||
 * @param[in]   time_out_ms         Wdt trigger time
 | 
			
		||||
 * @param[in]   on_irq              Wdt interrupt callback
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void wdt_start(wdt_device_number_t id, uint64_t time_out_ms, plic_irq_callback_t on_irq);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Start wdt
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   id                 Wdt id 0 or 1
 | 
			
		||||
 * @param[in]   time_out_ms        Wdt trigger time
 | 
			
		||||
 * @param[in]   on_irq             Wdt interrupt callback
 | 
			
		||||
 * @param[in]   ctx                Param of callback
 | 
			
		||||
 *
 | 
			
		||||
 * @return      Wdt time
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
uint32_t wdt_init(wdt_device_number_t id, uint64_t time_out_ms, plic_irq_callback_t on_irq, void *ctx);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Stop wdt
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   id      Wdt id 0 or 1
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void wdt_stop(wdt_device_number_t id);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief       Clear wdt interrupt
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in]   id      Wdt id 0 or 1
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void wdt_clear_interrupt(wdt_device_number_t id);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __WDT_H__ */
 | 
			
		||||
		Loading…
	
		Reference in New Issue