2023-12-11 21:45:06 +08:00
|
|
|
|
/*********************************************************************************************************************
|
|
|
|
|
|
* CH32V307VCT6 Opensourec Library <EFBFBD><EFBFBD><EFBFBD><EFBFBD>CH32V307VCT6 <EFBFBD><EFBFBD>Դ<EFBFBD>⣩<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹٷ<EFBFBD> SDK <EFBFBD>ӿڵĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* Copyright (c) 2022 SEEKFREE <EFBFBD><EFBFBD><EFBFBD>ɿƼ<EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>CH32V307VCT6 <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* CH32V307VCT6 <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPL<EFBFBD><EFBFBD>GNU General Public License<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GNUͨ<EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD> GPL <EFBFBD>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><EFBFBD> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<EFBFBD>֤
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>ʺ<EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
|
|
|
|
|
*
|
|
|
|
|
|
* <EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<EFBFBD>յ<EFBFBD>һ<EFBFBD><EFBFBD> GPL <EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
|
|
|
|
|
*
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD> GPL3.0 <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤Э<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>İ汾
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD> libraries/doc <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <EFBFBD>ļ<EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD>ӭ<EFBFBD><EFBFBD>λʹ<EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>뱣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<EFBFBD><EFBFBD>İ<EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> zf_common_fifo
|
|
|
|
|
|
* <EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾
|
|
|
|
|
|
* <EFBFBD>汾<EFBFBD><EFBFBD>Ϣ <EFBFBD>鿴 libraries/doc <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> version <EFBFBD>ļ<EFBFBD> <EFBFBD>汾˵<EFBFBD><EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
|
|
|
|
|
*
|
|
|
|
|
|
* <EFBFBD>ļ<EFBFBD>¼
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ע
|
|
|
|
|
|
* 2022-09-15 <EFBFBD><EFBFBD>W first version
|
|
|
|
|
|
********************************************************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef _zf_common_fifo_h_
|
|
|
|
|
|
#define _zf_common_fifo_h_
|
|
|
|
|
|
|
|
|
|
|
|
#include "zf_common_typedef.h"
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
|
{
|
2024-06-30 16:29:24 +08:00
|
|
|
|
FIFO_SUCCESS, // FIFO <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
2023-12-11 21:45:06 +08:00
|
|
|
|
|
2024-06-30 16:29:24 +08:00
|
|
|
|
FIFO_RESET_UNDO, // FIFO <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>δִ<CEB4><D6B4>
|
|
|
|
|
|
FIFO_CLEAR_UNDO, // FIFO <20><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>δִ<CEB4><D6B4>
|
|
|
|
|
|
FIFO_BUFFER_NULL, // FIFO <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
|
|
|
|
|
FIFO_WRITE_UNDO, // FIFO д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δִ<CEB4><D6B4>
|
|
|
|
|
|
FIFO_SPACE_NO_ENOUGH, // FIFO д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ䲻<D5BC><E4B2BB>
|
|
|
|
|
|
FIFO_READ_UNDO, // FIFO <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>δִ<CEB4><D6B4>
|
|
|
|
|
|
FIFO_DATA_NO_ENOUGH, // FIFO <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD>
|
|
|
|
|
|
}fifo_state_enum; // FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2023-12-11 21:45:06 +08:00
|
|
|
|
|
2024-06-30 16:29:24 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> <20><><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
|
// ˳<><CBB3><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
|
// β<><CEB2><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>˷<EFBFBD>ֹ<EFBFBD>ж<EFBFBD>Ƕ<EFBFBD><EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
|
2023-12-11 21:45:06 +08:00
|
|
|
|
typedef enum
|
|
|
|
|
|
{
|
2024-06-30 16:29:24 +08:00
|
|
|
|
FIFO_IDLE = 0x00, // <20><><EFBFBD><EFBFBD>״̬
|
|
|
|
|
|
|
|
|
|
|
|
FIFO_RESET = 0x01, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
FIFO_CLEAR = 0x02, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
FIFO_WRITE = 0x04, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>д<EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>
|
|
|
|
|
|
FIFO_READ = 0x08, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}fifo_execution_enum; // FIFO <20><><EFBFBD><EFBFBD>״̬ ΪǶ<CEAA><C7B6>ʹ<EFBFBD><CAB9>Ԥ<EFBFBD><D4A4> <20><EFBFBD><DEB7><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2023-12-11 21:45:06 +08:00
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
|
{
|
2024-06-30 16:29:24 +08:00
|
|
|
|
FIFO_READ_AND_CLEAN, // FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷŶ<CDB7>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
FIFO_READ_ONLY, // FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD>ȡ
|
2023-12-11 21:45:06 +08:00
|
|
|
|
}fifo_operation_enum;
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
|
{
|
2024-06-30 16:29:24 +08:00
|
|
|
|
FIFO_DATA_8BIT, // FIFO <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> 8bit
|
|
|
|
|
|
FIFO_DATA_16BIT, // FIFO <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> 16bit
|
|
|
|
|
|
FIFO_DATA_32BIT, // FIFO <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> 32bit
|
2023-12-11 21:45:06 +08:00
|
|
|
|
}fifo_data_type_enum;
|
|
|
|
|
|
|
2024-06-30 16:29:24 +08:00
|
|
|
|
typedef struct __attribute__((packed))
|
2023-12-11 21:45:06 +08:00
|
|
|
|
{
|
|
|
|
|
|
uint8 execution; // ִ<>в<EFBFBD><D0B2><EFBFBD>
|
|
|
|
|
|
fifo_data_type_enum type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2024-06-30 16:29:24 +08:00
|
|
|
|
void *buffer; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
2023-12-11 21:45:06 +08:00
|
|
|
|
uint32 head; // <20><><EFBFBD><EFBFBD>ͷָ<CDB7><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>յĻ<D5B5><C4BB><EFBFBD>
|
|
|
|
|
|
uint32 end; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ǿջ<C7BF><D5BB>棨<EFBFBD><E6A3A8><EFBFBD><EFBFBD>ȫ<EFBFBD>ճ<EFBFBD><D5B3>⣩
|
|
|
|
|
|
uint32 size; // <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD>С
|
|
|
|
|
|
uint32 max; // <20><><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С
|
|
|
|
|
|
}fifo_struct;
|
|
|
|
|
|
|
|
|
|
|
|
fifo_state_enum fifo_clear (fifo_struct *fifo);
|
|
|
|
|
|
uint32 fifo_used (fifo_struct *fifo);
|
|
|
|
|
|
|
|
|
|
|
|
fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
|
|
|
|
|
|
fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
|
|
|
|
|
|
fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
|
|
|
|
|
|
fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
|
|
|
|
|
|
fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
|
|
|
|
|
|
|
|
|
|
|
|
fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|