FDC2214.C


1 #include "fdc2214.h" 2 #include "delay.h" 3 #include "led.h" 4 5 u32 Data_FDC; 6 void FDC_IIC_Delay(void) 7 { 8 delay_us(2); 9 } 10 11 void FDC_GPIO_Init(void) 12 { 13 14 } 15 16 void FDC_IIC_Init(void) 17 { 18 GPIO_InitTypeDef GPIO_InitStructure; 19 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//先使能外设IO PORTC时钟 20 21 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;//端口配置 22 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 23 //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 24 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz 25 GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化GPIO 26 27 GPIO_SetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5); //PC.4,PC.5 输出高 28 } 29 30 //产生IIC起始信号 31 void FDC_IIC_Start(void) 32 { 33 FDC_SDA_OUT(); //sda线输出 34 FDC_IIC_SDA=1; 35 FDC_IIC_SCL=1; 36 FDC_IIC_Delay(); 37 FDC_IIC_SDA=0;//START:when CLK is high,DATA change form high to low 38 FDC_IIC_Delay(); 39 FDC_IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 40 } 41 //产生IIC停止信号 42 void FDC_IIC_Stop(void) 43 { 44 FDC_SDA_OUT();//sda线输出 45 FDC_IIC_SCL=0; 46 FDC_IIC_SDA=0;//STOP:when CLK is high DATA change form low to high 47 FDC_IIC_Delay(); 48 FDC_IIC_SCL=1; 49 FDC_IIC_SDA=1;//发送I2C总线结束信号 50 FDC_IIC_Delay(); 51 } 52 //等待应答信号到来 53 //返回值:1,接收应答失败 54 // 0,接收应答成功 55 u8 FDC_IIC_Wait_Ack(void) 56 { 57 u8 ucErrTime=0; 58 FDC_SDA_IN(); //SDA设置为输入 59 FDC_IIC_SDA=1;FDC_IIC_Delay(); 60 FDC_IIC_SCL=1;FDC_IIC_Delay(); 61 while(FDC_READ_SDA) 62 { 63 ucErrTime++; 64 if(ucErrTime>250) 65 { 66 FDC_IIC_Stop(); 67 return 1; 68 } 69 } 70 FDC_IIC_SCL=0;//时钟输出0 71 return 0; 72 } 73 74 75 //产生ACK应答 76 //void FDC_IIC_Ack(void) 77 //{ 78 // FDC_IIC_SCL=0; 79 // FDC_SDA_OUT(); 80 // FDC_IIC_SDA=0; 81 // FDC_IIC_Delay(); 82 // FDC_IIC_SCL=1; 83 // FDC_IIC_Delay(); 84 // FDC_IIC_SCL=0;