feat: 完成控制代码编写

This commit is contained in:
2024-03-02 16:05:24 +08:00
parent 038098ff2d
commit 0b9db20066
43 changed files with 760 additions and 2166 deletions

View File

@@ -1 +1,185 @@
ENTRY( _start )
ENTRY( _start )
__stack_size = 2048;
PROVIDE( _stack_size = __stack_size );
MEMORY
{
/* CH32V30x_D8C - CH32V305RB-CH32V305FB
CH32V30x_D8 - CH32V303CB-CH32V303RB
*/
/*
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
*/
/* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC
CH32V30x_D8 - CH32V303VC-CH32V303RC
FLASH + RAM supports the following configuration
FLASH-192K + RAM-128K
FLASH-224K + RAM-96K
FLASH-256K + RAM-64K
FLASH-288K + RAM-32K
*/
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 288K
}
SECTIONS
{
.init :
{
_sinit = .;
. = ALIGN(4);
KEEP(*(SORT_NONE(.init)))
. = ALIGN(4);
_einit = .;
} >FLASH AT>FLASH
.vector :
{
*(.vector);
. = ALIGN(64);
} >FLASH AT>FLASH
.text :
{
. = ALIGN(4);
*(.text)
*(.text.*)
*(.rodata)
*(.rodata*)
*(.glue_7)
*(.glue_7t)
*(.gnu.linkonce.t.*)
. = ALIGN(4);
} >FLASH AT>FLASH
.fini :
{
KEEP(*(SORT_NONE(.fini)))
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _etext = . );
PROVIDE( _eitcm = . );
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH AT>FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH AT>FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH AT>FLASH
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} >FLASH AT>FLASH
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} >FLASH AT>FLASH
.dalign :
{
. = ALIGN(4);
PROVIDE(_data_vma = .);
} >RAM AT>FLASH
.dlalign :
{
. = ALIGN(4);
PROVIDE(_data_lma = .);
} >FLASH AT>FLASH
.data :
{
*(.gnu.linkonce.r.*)
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(8);
PROVIDE( __global_pointer$ = . + 0x800 );
*(.sdata .sdata.*)
*(.sdata2.*)
*(.gnu.linkonce.s.*)
. = ALIGN(8);
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
. = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
.bss :
{
. = ALIGN(4);
PROVIDE( _sbss = .);
*(.sbss*)
*(.gnu.linkonce.sb.*)
*(.bss*)
*(.gnu.linkonce.b.*)
*(COMMON*)
. = ALIGN(4);
PROVIDE( _ebss = .);
} >RAM AT>FLASH
PROVIDE( _end = _ebss);
PROVIDE( end = . );
.stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size :
{
PROVIDE( _heap_end = . );
. = ALIGN(4);
PROVIDE(_susrstack = . );
. = . + __stack_size;
PROVIDE( _eusrstack = .);
} >RAM
}

View File

@@ -228,7 +228,7 @@ uint8 imu660ra_init(void)
#if IMU660RA_USE_SOFT_IIC
soft_iic_init(&imu660ra_iic_struct, IMU660RA_DEV_ADDR, IMU660RA_SOFT_IIC_DELAY, IMU660RA_SCL_PIN, IMU660RA_SDA_PIN); // 配置 IMU660RA 的 IIC 端口
#else
spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, SPI_CS_NULL); // 配置 IMU660RA 的 SPI 端口
spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, IMU660RA_CS_PIN); // 配置 IMU660RA 的 SPI 端口
gpio_init(IMU660RA_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // 配置 IMU660RA 的 CS 端口
imu660ra_read_register(IMU660RA_CHIP_ID); // 读取一下设备 ID 将设备设置为 SPI 模式
#endif

View File

@@ -62,21 +62,21 @@
#if IMU660RA_USE_SOFT_IIC // 这两段 颜色正常的才是正确的 颜色灰的就是没有用的
//====================================================软件 IIC 驱动====================================================
#define IMU660RA_SOFT_IIC_DELAY (10) // 软件 IIC 的时钟延时周期 数值越小 IIC 通信速率越快
#define IMU660RA_SCL_PIN (E7) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚
#define IMU660RA_SDA_PIN (E8) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚
#define IMU660RA_SCL_PIN (B3) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚
#define IMU660RA_SDA_PIN (B5) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚
//====================================================软件 IIC 驱动====================================================
#else
//====================================================硬件 SPI 驱动====================================================
#define IMU660RA_SPI_SPEED (10 * 1000 * 1000) // 硬件 SPI 速率
#define IMU660RA_SPI SPI_3 // 硬件 SPI 号
#define IMU660RA_SPC_PIN SPI3_MAP0_SCK_B3 // 硬件 SPI SCK 引脚
#define IMU660RA_SDI_PIN SPI3_MAP0_MOSI_B5 // 硬件 SPI MOSI 引脚
#define IMU660RA_SDO_PIN SPI3_MAP0_MISO_B4 // 硬件 SPI MISO 引脚
#define IMU660RA_SPI SPI_1 // 硬件 SPI 号
#define IMU660RA_SPC_PIN SPI1_MAP1_SCK_B3 // 硬件 SPI SCK 引脚
#define IMU660RA_SDI_PIN SPI1_MAP1_MOSI_B5 // 硬件 SPI MOSI 引脚
#define IMU660RA_SDO_PIN SPI1_MAP1_MISO_B4 // 硬件 SPI MISO 引脚
//====================================================硬件 SPI 驱动====================================================
#endif
#define IMU660RA_CS_PIN (C10) // CS 片选引脚
#define IMU660RA_CS_PIN (B6) // CS 片选引脚
#define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN)))
typedef enum {

View File

@@ -1,43 +1,43 @@
/*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> 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>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_driver_soft_iic
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version
********************************************************************************************************************/
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> 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>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_driver_soft_iic
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_driver_soft_iic.h"
#define SOFT_IIC_SDA_IO_SWITCH (0) // <20>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ SDA <20><><EFBFBD><EFBFBD> I/O <20>л<EFBFBD> 0-<2D><><EFBFBD><EFBFBD>Ҫ 1-<2D><>Ҫ
#define SOFT_IIC_SDA_IO_SWITCH (0) // <20>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ SDA <20><><EFBFBD><EFBFBD> I/O <20>л<EFBFBD> 0-<2D><><EFBFBD><EFBFBD>Ҫ 1-<2D><>Ҫ
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IIC <20><>ʱ
@@ -46,12 +46,12 @@
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_delay(1);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
//static void soft_iic_delay (vuint32 delay)
// static void soft_iic_delay (vuint32 delay)
//{
// volatile uint32 count = delay;
// while(count --);
//}
#define soft_iic_delay(x) for(uint32 i = x; i--; )
#define soft_iic_delay(x) for (uint32 i = x; i--;)
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IIC START <20>ź<EFBFBD>
@@ -60,16 +60,16 @@
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_start(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_start (soft_iic_info_struct *soft_iic_obj)
static void soft_iic_start(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
gpio_high(soft_iic_obj->scl_pin); // SCL <20>ߵ<EFBFBD>ƽ
gpio_high(soft_iic_obj->sda_pin); // SDA <20>ߵ<EFBFBD>ƽ
gpio_high(soft_iic_obj->scl_pin); // SCL <20>ߵ<EFBFBD>ƽ
gpio_high(soft_iic_obj->sda_pin); // SDA <20>ߵ<EFBFBD>ƽ
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_low(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//-------------------------------------------------------------------------------------------------------------------
@@ -79,16 +79,16 @@ static void soft_iic_start (soft_iic_info_struct *soft_iic_obj)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_stop(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_stop (soft_iic_info_struct *soft_iic_obj)
static void soft_iic_stop(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
gpio_low(soft_iic_obj->sda_pin); // SDA <20>͵<EFBFBD>ƽ
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
gpio_low(soft_iic_obj->sda_pin); // SDA <20>͵<EFBFBD>ƽ
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_high(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
soft_iic_delay(soft_iic_obj->delay);
}
@@ -100,25 +100,22 @@ static void soft_iic_stop (soft_iic_info_struct *soft_iic_obj)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_send_ack(soft_iic_obj, 1);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_send_ack (soft_iic_info_struct *soft_iic_obj, uint8 ack)
static void soft_iic_send_ack(soft_iic_info_struct *soft_iic_obj, uint8 ack)
{
zf_assert(soft_iic_obj != NULL);
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
if(ack)
{
gpio_high(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD>
}
else
{
gpio_low(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD>
if (ack) {
gpio_high(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD>
} else {
gpio_low(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD>
}
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
gpio_high(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD>
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
gpio_high(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD>
}
//-------------------------------------------------------------------------------------------------------------------
@@ -128,25 +125,24 @@ static void soft_iic_send_ack (soft_iic_info_struct *soft_iic_obj, uint8 ack)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_wait_ack(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj)
static uint8 soft_iic_wait_ack(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
gpio_high(soft_iic_obj->sda_pin); // SDA <20>ߵ<EFBFBD>ƽ <20>ͷ<EFBFBD> SDA
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
gpio_high(soft_iic_obj->sda_pin); // SDA <20>ߵ<EFBFBD>ƽ <20>ͷ<EFBFBD> SDA
#if SOFT_IIC_SDA_IO_SWITCH
gpio_set_dir(soft_iic_obj->sda_pin, GPI, GPI_FLOATING_IN);
#endif
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL <20>ߵ<EFBFBD>ƽ
gpio_high(soft_iic_obj->scl_pin); // SCL <20>ߵ<EFBFBD>ƽ
soft_iic_delay(soft_iic_obj->delay);
if(gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin))
{
if (gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin)) {
temp = 1;
}
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
#if SOFT_IIC_SDA_IO_SWITCH
gpio_set_dir(soft_iic_obj->sda_pin, GPO, GPO_OPEN_DTAIN);
#endif
@@ -162,22 +158,21 @@ static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj)
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ACK ״̬
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8 data)
static uint8 soft_iic_send_data(soft_iic_info_struct *soft_iic_obj, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0x80;
while(temp)
{
// gpio_set_level(soft_iic_obj->sda_pin, data & temp);
while (temp) {
// gpio_set_level(soft_iic_obj->sda_pin, data & temp);
((data & temp) ? (gpio_high(soft_iic_obj->sda_pin)) : (gpio_low(soft_iic_obj->sda_pin)));
temp >>= 1;
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
}
return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1 );
return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -187,27 +182,26 @@ static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack)
static uint8 soft_iic_read_data(soft_iic_info_struct *soft_iic_obj, uint8 ack)
{
zf_assert(soft_iic_obj != NULL);
uint8 data = 0x00;
uint8 temp = 8;
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->sda_pin); // SDA <20>ߵ<EFBFBD>ƽ <20>ͷ<EFBFBD> SDA
gpio_high(soft_iic_obj->sda_pin); // SDA <20>ߵ<EFBFBD>ƽ <20>ͷ<EFBFBD> SDA
#if SOFT_IIC_SDA_IO_SWITCH
gpio_set_dir(soft_iic_obj->sda_pin, GPI, GPI_FLOATING_IN);
#endif
while(temp --)
{
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
while (temp--) {
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
soft_iic_delay(soft_iic_obj->delay);
data = ((data << 1) | gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin));
}
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
#if SOFT_IIC_SDA_IO_SWITCH
gpio_set_dir(soft_iic_obj->sda_pin, GPO, GPO_OPEN_DTAIN);
#endif
@@ -220,11 +214,11 @@ static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IIC <20>ӿ<EFBFBD>д 8bit <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_8bit_register(soft_iic_obj, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data)
void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -238,19 +232,18 @@ void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data <20><><EFBFBD>ݴ<EFBFBD><DDB4>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_8bit_array(soft_iic_obj, data, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len)
void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(len --)
{
soft_iic_send_data(soft_iic_obj, *data ++);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}
@@ -259,11 +252,11 @@ void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IIC <20>ӿ<EFBFBD><D3BF><EFBFBD>д 16bit <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_16bit(soft_iic_obj, 0x0101);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data)
void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -278,20 +271,19 @@ void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data <20><><EFBFBD>ݴ<EFBFBD><DDB4>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_16bit_array(soft_iic_obj, data, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len)
void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(len --)
{
while (len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*data++ & 0x00FF));
}
soft_iic_stop(soft_iic_obj);
}
@@ -301,11 +293,11 @@ void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint1
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_8bit_register(soft_iic_obj, 0x01, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data)
void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -321,20 +313,19 @@ void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uin
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data <20><><EFBFBD>ݴ<EFBFBD><DDB4>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_8bit_registers(soft_iic_obj, 0x01, data, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len)
void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name);
while(len --)
{
soft_iic_send_data(soft_iic_obj, *data ++);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}
@@ -344,11 +335,11 @@ void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_16bit_register(soft_iic_obj, 0x0101, 0x0101);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data)
void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -366,11 +357,11 @@ void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const ui
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data <20><><EFBFBD>ݴ<EFBFBD><DDB4>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_16bit_registers(soft_iic_obj, 0x0101, data, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len)
void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -378,10 +369,9 @@ void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const u
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, (uint8)((register_name & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(register_name & 0x00FF));
while(len--)
{
while (len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*data++ & 0x00FF));
}
soft_iic_stop(soft_iic_obj);
}
@@ -391,9 +381,9 @@ void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const u
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1> 8bit <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_8bit(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj)
uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -410,19 +400,18 @@ uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵĻ<DDB5><C4BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_8bit_array(soft_iic_obj, data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len)
void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
*data ++ = soft_iic_read_data(soft_iic_obj, len == 0);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
@@ -433,16 +422,16 @@ void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data,
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1> 16bit <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_16bit(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj)
uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint16 temp = 0;
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
temp = soft_iic_read_data(soft_iic_obj, 0);
temp = ((temp << 8)| soft_iic_read_data(soft_iic_obj, 1));
temp = ((temp << 8) | soft_iic_read_data(soft_iic_obj, 1));
soft_iic_stop(soft_iic_obj);
return temp;
}
@@ -452,21 +441,20 @@ uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵĻ<DDB5><C4BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_16bit_array(soft_iic_obj, data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len)
void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
while (len--) {
*data = soft_iic_read_data(soft_iic_obj, 0);
*data = ((*data << 8)| soft_iic_read_data(soft_iic_obj, len == 0));
data ++;
*data = ((*data << 8) | soft_iic_read_data(soft_iic_obj, len == 0));
data++;
}
soft_iic_stop(soft_iic_obj);
}
@@ -477,9 +465,9 @@ void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1> 8bit <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_8bit_register(soft_iic_obj, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -499,11 +487,11 @@ uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uin
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵĻ<DDB5><C4BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_8bit_registers(soft_iic_obj, 0x01, data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len)
void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -512,9 +500,8 @@ void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uin
soft_iic_send_data(soft_iic_obj, register_name);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
*data ++ = soft_iic_read_data(soft_iic_obj, len == 0);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
@@ -525,9 +512,9 @@ void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uin
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1> 16bit <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_16bit_register(soft_iic_obj, 0x0101);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name)
uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint16 temp = 0;
@@ -538,7 +525,7 @@ uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const u
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
temp = soft_iic_read_data(soft_iic_obj, 0);
temp = ((temp << 8)| soft_iic_read_data(soft_iic_obj, 1));
temp = ((temp << 8) | soft_iic_read_data(soft_iic_obj, 1));
soft_iic_stop(soft_iic_obj);
return temp;
}
@@ -549,11 +536,11 @@ uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const u
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵĻ<DDB5><C4BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_16bit_registers(soft_iic_obj, 0x0101, data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len)
void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -563,11 +550,10 @@ void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
soft_iic_send_data(soft_iic_obj, (uint8)(register_name & 0x00FF));
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
while (len--) {
*data = soft_iic_read_data(soft_iic_obj, 0);
*data = ((*data << 8)| soft_iic_read_data(soft_iic_obj, len == 0));
data ++;
*data = ((*data << 8) | soft_iic_read_data(soft_iic_obj, len == 0));
data++;
}
soft_iic_stop(soft_iic_obj);
}
@@ -579,29 +565,26 @@ void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> write_len <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *read_data <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD><DDB4>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> read_len <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> iic_transfer_8bit_array(IIC_1, addr, data, 64, data, 64);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len)
void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(write_data != NULL);
zf_assert(read_data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(write_len --)
{
soft_iic_send_data(soft_iic_obj, *write_data ++);
while (write_len--) {
soft_iic_send_data(soft_iic_obj, *write_data++);
}
if(read_len)
{
if (read_len) {
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(read_len --)
{
*read_data ++ = soft_iic_read_data(soft_iic_obj, read_len == 0);
while (read_len--) {
*read_data++ = soft_iic_read_data(soft_iic_obj, read_len == 0);
}
}
soft_iic_stop(soft_iic_obj);
@@ -614,31 +597,28 @@ void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uin
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> write_len <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *read_data <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD><DDB4>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> read_len <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> iic_transfer_16bit_array(IIC_1, addr, data, 64, data, 64);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len)
void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(write_data != NULL);
zf_assert(read_data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(write_len--)
{
while (write_len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*write_data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*write_data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*write_data++ & 0x00FF));
}
if(read_len)
{
if (read_len) {
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(read_len --)
{
while (read_len--) {
*read_data = soft_iic_read_data(soft_iic_obj, 0);
*read_data = ((*read_data << 8)| soft_iic_read_data(soft_iic_obj, read_len == 0));
read_data ++;
*read_data = ((*read_data << 8) | soft_iic_read_data(soft_iic_obj, read_len == 0));
read_data++;
}
}
soft_iic_stop(soft_iic_obj);
@@ -649,11 +629,11 @@ void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const ui
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *soft_iic_obj <20><><EFBFBD><EFBFBD> IIC ָ<><D6B8><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD> zf_driver_soft_iic.h <20><><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_sccb_write_register(soft_iic_obj, 0x01, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data)
void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -669,9 +649,9 @@ void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uin
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> register_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1> 8bit <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_sccb_read_register(soft_iic_obj, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -694,18 +674,46 @@ uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uin
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> delay <20><><EFBFBD><EFBFBD> IIC <20><>ʱ <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>Ӹߵ<D3B8>ƽʱ<C6BD><CAB1> Խ<><D4BD> IIC <20><><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> scl_pin <20><><EFBFBD><EFBFBD> IIC ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> zf_driver_gpio.h <20><> gpio_pin_enum ö<><C3B6><EFBFBD><EFBFBD><E5B6A8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> sda_pin <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> zf_driver_gpio.h <20><> gpio_pin_enum ö<><C3B6><EFBFBD><EFBFBD><E5B6A8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_init(&soft_iic_obj, addr, 100, B6, B7);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin)
void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(scl_pin != sda_pin); // <20><><EFBFBD>ѣ<EFBFBD> scl_pin <20><> sda_pin <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
zf_assert(scl_pin != sda_pin); // <20><><EFBFBD>ѣ<EFBFBD> scl_pin <20><> sda_pin <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
soft_iic_obj->scl_pin = scl_pin;
soft_iic_obj->sda_pin = sda_pin;
soft_iic_obj->addr = addr;
soft_iic_obj->delay = delay;
gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // <20><>ȡ<EFBFBD><C8A1>ӦIO<49><4F><EFBFBD><EFBFBD> AF<41><46><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // <20><>ȡ<EFBFBD><C8A1>ӦIO<49><4F><EFBFBD><EFBFBD> AF<41><46><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
soft_iic_obj->addr = addr;
soft_iic_obj->delay = delay;
gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // <20><>ȡ<EFBFBD><C8A1>ӦIO<49><4F><EFBFBD><EFBFBD> AF<41><46><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // <20><>ȡ<EFBFBD><C8A1>ӦIO<49><4F><EFBFBD><EFBFBD> AF<41><46><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
}
void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name_h);
soft_iic_send_data(soft_iic_obj, register_name_l);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name_h);
soft_iic_send_data(soft_iic_obj, register_name_l);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}

View File

@@ -1,83 +1,84 @@
/*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> 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>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_driver_soft_iic
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version
********************************************************************************************************************/
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> 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>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_driver_soft_iic
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version
********************************************************************************************************************/
#ifndef _zf_driver_soft_iic_h_
#define _zf_driver_soft_iic_h_
#include "zf_driver_gpio.h"
typedef struct
{
gpio_pin_enum scl_pin; // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
gpio_pin_enum sda_pin; // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
uint8 addr; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>λ<EFBFBD><CEBB>ַģʽ
uint32 delay; // ģ<><C4A3> IIC <20><><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
}soft_iic_info_struct;
gpio_pin_enum scl_pin; // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
gpio_pin_enum sda_pin; // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
uint8 addr; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>λ<EFBFBD><CEBB>ַģʽ
uint32 delay; // ģ<><C4A3> IIC <20><><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
} soft_iic_info_struct;
void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data);
void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len);
void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data);
void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len);
void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data);
void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len);
void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data);
void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len);
void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data);
void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len);
void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data);
void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len);
void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data);
void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len);
void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data);
void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len);
uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len);
uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len);
uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len);
uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len);
uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len);
uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len);
uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name);
void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len);
uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name);
void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len);
void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len);
void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len);
void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len);
void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len);
void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data);
uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data);
uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin);
void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin);
void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len);
void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len);
#endif