2krom写满了,都不知道怎么优化了
This commit is contained in:
@@ -6,3 +6,100 @@
|
||||
*/
|
||||
|
||||
#include "iic.h"
|
||||
#include "gpio.h"
|
||||
#define iic_sda(x) HAL_GPIO_WritePin(iic_sda_GPIO_Port, iic_sda_Pin, x)
|
||||
#define iic_scl(x) HAL_GPIO_WritePin(iic_scl_GPIO_Port, iic_scl_Pin, x)
|
||||
#define read_iic_sda HAL_GPIO_ReadPin(iic_sda_GPIO_Port, iic_sda_Pin)
|
||||
|
||||
|
||||
void iic_start()
|
||||
{
|
||||
iic_sda(1);
|
||||
iic_scl(1);
|
||||
iic_sda(0);
|
||||
iic_scl(0);
|
||||
}
|
||||
|
||||
void iic_stop()
|
||||
{
|
||||
iic_sda(0);
|
||||
iic_scl(1);
|
||||
iic_sda(1);
|
||||
}
|
||||
|
||||
void iic_ack()
|
||||
{
|
||||
iic_scl(1);
|
||||
iic_scl(0);
|
||||
}
|
||||
|
||||
void IIC_Write_Byte(unsigned char IIC_Byte){
|
||||
iic_scl(0);
|
||||
change_io_function(iic_sda_GPIO_Port, iic_sda_Pin,0);
|
||||
for(unsigned char i=0;i<8;i++)
|
||||
{
|
||||
if(IIC_Byte & 0x80)
|
||||
{
|
||||
iic_sda(1);
|
||||
}else{
|
||||
iic_sda(0);
|
||||
}
|
||||
IIC_Byte<<=1;
|
||||
iic_scl(1);
|
||||
iic_scl(0);
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char IIC_Read_Byte()
|
||||
{
|
||||
unsigned char k=0;
|
||||
iic_scl(0);
|
||||
change_io_function(iic_sda_GPIO_Port, iic_sda_Pin,1);
|
||||
for(unsigned char i=0; i<8; i++)
|
||||
{
|
||||
iic_scl(1);
|
||||
if(read_iic_sda==1)
|
||||
{
|
||||
k|=0x01;
|
||||
}
|
||||
k<<=1;
|
||||
iic_scl(0);
|
||||
}
|
||||
return(k);
|
||||
}
|
||||
|
||||
|
||||
void IIC_SAND_DATE(unsigned char DEVICE_ADD,unsigned char IN_DEVICE_ADD,char *DATAS,uint16_t LONG)
|
||||
{
|
||||
iic_start();
|
||||
IIC_Write_Byte(DEVICE_ADD);
|
||||
iic_ack();
|
||||
IIC_Write_Byte(IN_DEVICE_ADD);
|
||||
iic_ack();
|
||||
for(int a=0;a<LONG;a++)
|
||||
{
|
||||
IIC_Write_Byte(*DATAS);
|
||||
DATAS++;
|
||||
}
|
||||
iic_ack();
|
||||
iic_stop();
|
||||
}
|
||||
|
||||
void IIC_READ_DATE(unsigned char DEVICE_ADD,unsigned char IN_DEVICE_ADD,char *DATAS,uint16_t LONG)
|
||||
{
|
||||
iic_start();
|
||||
IIC_Write_Byte(DEVICE_ADD);
|
||||
iic_ack();
|
||||
IIC_Write_Byte(IN_DEVICE_ADD);
|
||||
iic_ack();
|
||||
iic_start();
|
||||
IIC_Write_Byte(IN_DEVICE_ADD+1);
|
||||
iic_ack();
|
||||
for(int a=0;a<LONG;a++)
|
||||
{
|
||||
*DATAS=IIC_Read_Byte();
|
||||
DATAS++;
|
||||
}
|
||||
iic_ack();
|
||||
iic_stop();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user