Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void I2C1_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- //GPIO_DeInit(GPIOB);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- // Configure I2C1 pins: SCL and SDA
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
- void I2C_delay(void)
- {
- unsigned int i=150;
- while(i)
- {
- i--;
- }
- }
- bool I2C1_Start(void)
- {
- SDAH;
- SCLH;
- I2C_delay();
- if(!SDAread)return FALSE;
- SDAL;
- I2C_delay();
- if(SDAread) return FALSE;
- SDAL;
- I2C_delay();
- return TRUE;
- }
- void I2C1_Stop(void)
- {
- SCLL;
- I2C_delay();
- SDAL;
- I2C_delay();
- SCLH;
- I2C_delay();
- SDAH;
- I2C_delay();
- }
- void I2C1_Ack(void)
- {
- SCLL;
- I2C_delay();
- SDAL;
- I2C_delay();
- SCLH;
- I2C_delay();
- SCLL;
- I2C_delay();
- }
- void I2C1_NoAck(void)
- {
- SCLL;
- I2C_delay();
- SDAH;
- I2C_delay();
- SCLH;
- I2C_delay();
- SCLL;
- I2C_delay();
- }
- bool I2C1_WaitAck(void)
- {
- SCLL;
- I2C_delay();
- SDAH;
- I2C_delay();
- SCLH;
- I2C_delay();
- if(SDAread)
- {
- SCLL;
- return FALSE;
- }
- SCLL;
- return TRUE;
- }
- void I2C1_SendByte(unsigned char SendByte)
- {
- unsigned char i=8;
- while(i--)
- {
- SCLL;
- I2C_delay();
- if(SendByte&0x80)
- SDAH;
- else
- SDAL;
- SendByte<<=1;
- I2C_delay();
- SCLH;
- I2C_delay();
- }
- SCLL;
- }
- unsigned char I2C1_ReceiveByte(void)
- {
- unsigned char i=8;
- unsigned char ReceiveByte=0;
- SDAH;
- while(i--)
- {
- ReceiveByte<<=1;
- SCLL;
- I2C_delay();
- SCLH;
- I2C_delay();
- if(SDAread)
- {
- ReceiveByte|=0x01;
- }
- }
- SCLL;
- return ReceiveByte;
- }
- unsigned char I2C1_ReadByte( unsigned char DeviceAddress, int ReadAddress)
- {
- unsigned char temp;
- if(!I2C1_Start())return FALSE;
- I2C1_SendByte((DeviceAddress & 0xFE));
- if(!I2C1_WaitAck()){I2C1_Stop(); return FALSE;}
- I2C1_SendByte((unsigned char)((ReadAddress>>8) & 0xFF));
- I2C1_WaitAck();
- I2C1_SendByte((unsigned char)((ReadAddress) & 0xFF));
- I2C1_WaitAck();
- I2C1_Start();
- I2C1_SendByte((DeviceAddress & 0xFE)|0x01);
- I2C1_WaitAck();
- temp = I2C1_ReceiveByte();
- I2C1_NoAck();
- I2C1_Stop();
- return temp;
- }
- /************************************MAIN****************************/
- int main( void )
- {
- prvSetupHardware();
- I2C1_GPIO_Config();
- initDisplay();
- itoc(I2C1_ReadByte(I2C_ADDRESS, 0x0F));
- GLCD_displayStringLn(Line3, string);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement