151 lines
3.4 KiB
C
151 lines
3.4 KiB
C
|
|
#include "sccb.h"
|
|||
|
|
#include "delay.h"
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
|||
|
|
//ALIENTEK STM32h7<68><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//OVϵ<56><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ SCCB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2017/8/15
|
|||
|
|
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
|||
|
|
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
|||
|
|
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
|||
|
|
//All rights reserved
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
void SCCB_Delay(void)
|
|||
|
|
{
|
|||
|
|
delay_us(5);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC>SCCB<43>ӿ<EFBFBD>
|
|||
|
|
void SCCB_Init(void)
|
|||
|
|
{
|
|||
|
|
GPIO_InitTypeDef GPIO_Initure;
|
|||
|
|
__HAL_RCC_GPIOB_CLK_ENABLE(); //ʹ<><CAB9>GPIOBʱ<42><CAB1>
|
|||
|
|
|
|||
|
|
//PB3.4<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
GPIO_Initure.Pin=GPIO_PIN_3|GPIO_PIN_4;
|
|||
|
|
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH; //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//SCCB<43><42>ʼ<EFBFBD>ź<EFBFBD>
|
|||
|
|
//<2F><>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD>ߵ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD>ߵĸߵ<C4B8><DFB5><EFBFBD>,ΪSCCB<43><42>ʼ<EFBFBD>ź<EFBFBD>
|
|||
|
|
//<2F>ڼ<EFBFBD><DABC><EFBFBD>״̬<D7B4><CCAC>,SDA<44><41>SCL<43><4C>Ϊ<EFBFBD>͵<EFBFBD>ƽ
|
|||
|
|
void SCCB_Start(void)
|
|||
|
|
{
|
|||
|
|
SCCB_SDA(1); //<2F><><EFBFBD><EFBFBD><EFBFBD>߸ߵ<DFB8>ƽ
|
|||
|
|
SCCB_SCL(1); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD>߸ߵ<DFB8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SDA(0);
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SCL(0); //<2F><><EFBFBD><EFBFBD><EFBFBD>ָ<DFBB><D6B8>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//SCCBֹͣ<CDA3>ź<EFBFBD>
|
|||
|
|
//<2F><>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD>ߵ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD>ߵĵ͵<C4B5><CDB5><EFBFBD>,ΪSCCBֹͣ<CDA3>ź<EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD>,SDA,SCL<43><4C>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ
|
|||
|
|
void SCCB_Stop(void)
|
|||
|
|
{
|
|||
|
|
SCCB_SDA(0);
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SCL(1);
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SDA(1);
|
|||
|
|
SCCB_Delay();
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>NA<4E>ź<EFBFBD>
|
|||
|
|
void SCCB_No_Ack(void)
|
|||
|
|
{
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SDA(1);
|
|||
|
|
SCCB_SCL(1);
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SCL(0);
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SDA(0);
|
|||
|
|
SCCB_Delay();
|
|||
|
|
}
|
|||
|
|
//SCCB,д<><D0B4>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;1,ʧ<><CAA7>.
|
|||
|
|
u8 SCCB_WR_Byte(u8 dat)
|
|||
|
|
{
|
|||
|
|
u8 j,res;
|
|||
|
|
for(j=0;j<8;j++) //ѭ<><D1AD>8<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if(dat&0x80)SCCB_SDA(1);
|
|||
|
|
else SCCB_SDA(0);
|
|||
|
|
dat<<=1;
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SCL(1);
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SCL(0);
|
|||
|
|
}
|
|||
|
|
SCCB_SDA_IN(); //<2F><><EFBFBD><EFBFBD>SDAΪ<41><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SCL(1); //<2F><><EFBFBD>յھ<D5B5>λ,<2C><><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͳɹ<CDB3>
|
|||
|
|
SCCB_Delay();
|
|||
|
|
if(SCCB_READ_SDA)res=1; //SDA=1<><31><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>1
|
|||
|
|
else res=0; //SDA=0<><30><EFBFBD>ͳɹ<CDB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|||
|
|
SCCB_SCL(0);
|
|||
|
|
SCCB_SDA_OUT(); //<2F><><EFBFBD><EFBFBD>SDAΪ<41><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
return res;
|
|||
|
|
}
|
|||
|
|
//SCCB <20><>ȡһ<C8A1><D2BB><EFBFBD>ֽ<EFBFBD>
|
|||
|
|
//<2F><>SCL<43><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u8 SCCB_RD_Byte(void)
|
|||
|
|
{
|
|||
|
|
u8 temp=0,j;
|
|||
|
|
SCCB_SDA_IN(); //<2F><><EFBFBD><EFBFBD>SDAΪ<41><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
for(j=8;j>0;j--) //ѭ<><D1AD>8<EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SCL(1);
|
|||
|
|
temp=temp<<1;
|
|||
|
|
if(SCCB_READ_SDA)temp++;
|
|||
|
|
SCCB_Delay();
|
|||
|
|
SCCB_SCL(0);
|
|||
|
|
}
|
|||
|
|
SCCB_SDA_OUT(); //<2F><><EFBFBD><EFBFBD>SDAΪ<41><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
return temp;
|
|||
|
|
}
|
|||
|
|
////д<>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
|
////<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;1,ʧ<><CAA7>.
|
|||
|
|
//u8 SCCB_WR_Reg(u8 reg,u8 data)
|
|||
|
|
//{
|
|||
|
|
// u8 res=0;
|
|||
|
|
// SCCB_Start(); //<2F><><EFBFBD><EFBFBD>SCCB<43><42><EFBFBD><EFBFBD>
|
|||
|
|
// if(SCCB_WR_Byte(SCCB_ID))res=1; //д<><D0B4><EFBFBD><EFBFBD>ID
|
|||
|
|
// delay_us(100);
|
|||
|
|
// if(SCCB_WR_Byte(reg))res=1; //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
// delay_us(100);
|
|||
|
|
// if(SCCB_WR_Byte(data))res=1; //д<><D0B4><EFBFBD><EFBFBD>
|
|||
|
|
// SCCB_Stop();
|
|||
|
|
// return res;
|
|||
|
|
//}
|
|||
|
|
////<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
|
////<2F><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD>ֵ
|
|||
|
|
//u8 SCCB_RD_Reg(u8 reg)
|
|||
|
|
//{
|
|||
|
|
// u8 val=0;
|
|||
|
|
// SCCB_Start(); //<2F><><EFBFBD><EFBFBD>SCCB<43><42><EFBFBD><EFBFBD>
|
|||
|
|
// SCCB_WR_Byte(SCCB_ID); //д<><D0B4><EFBFBD><EFBFBD>ID
|
|||
|
|
// delay_us(100);
|
|||
|
|
// SCCB_WR_Byte(reg); //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
// delay_us(100);
|
|||
|
|
// SCCB_Stop();
|
|||
|
|
// delay_us(100);
|
|||
|
|
// //<2F><><EFBFBD>üĴ<C3BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><F3A3ACB2>Ƕ<EFBFBD>
|
|||
|
|
// SCCB_Start();
|
|||
|
|
// SCCB_WR_Byte(SCCB_ID|0X01); //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// delay_us(100);
|
|||
|
|
// val=SCCB_RD_Byte(); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
// SCCB_No_Ack();
|
|||
|
|
// SCCB_Stop();
|
|||
|
|
// return val;
|
|||
|
|
//}
|