@@ -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 ) ;
}