⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 open_i2c.c

📁 SD卡的SD模式的读写驱动
💻 C
字号:
#include <io.h>
#include "system.h"
#include "Open_I2C.h"
//-------------------------------------------------------------------------
unsigned int I2C_Read_Period()
{
  unsigned char low,high;
  low = IORD(I2C_0_BASE,I2C_PRER_LO);
  high= IORD(I2C_0_BASE,I2C_PRER_HI);
  return (high<<16)+low;
}
//-------------------------------------------------------------------------
unsigned char I2C_Read_Ctrl()
{
  return  IORD(I2C_0_BASE,I2C_CTR);
}
//-------------------------------------------------------------------------
unsigned char I2C_Read_RX()
{
  return  IORD(I2C_0_BASE,I2C_RXR);
}
//-------------------------------------------------------------------------
unsigned char I2C_Read_Status()
{
  return  IORD(I2C_0_BASE,I2C_SR);
}
//-------------------------------------------------------------------------
void I2C_Write_Period(unsigned int Period)
{
  IOWR(I2C_0_BASE,I2C_PRER_LO,Period&0xFF);
  IOWR(I2C_0_BASE,I2C_PRER_HI,Period>>16);
}
//-------------------------------------------------------------------------
void  I2C_Write_Ctrl(unsigned char value)
{
  IOWR(I2C_0_BASE,I2C_CTR,value);
}
//-------------------------------------------------------------------------
void  I2C_Write_TX(unsigned char value)
{
  IOWR(I2C_0_BASE,I2C_TXR,value);
}
//-------------------------------------------------------------------------
void  I2C_Write_CMD(unsigned char value)
{
  IOWR(I2C_0_BASE,I2C_CR,value);
}
//-------------------------------------------------------------------------
void  I2C_Init(unsigned int Period)
{
  I2C_Ctrl_Reg  a;
  I2C_Write_Period(Period);
  a.I2C_Ctrl_Flags.CORE_ENABLE=1;
  a.I2C_Ctrl_Flags.INT_ENABLE=1;
  a.I2C_Ctrl_Flags.RESERVED=0;
  I2C_Write_Ctrl(a.Value);
}
//-------------------------------------------------------------------------
unsigned char I2C_Send(unsigned char value,unsigned char STA,unsigned char STO)
{
  unsigned char ACK;
  I2C_CMD_Reg     I2C_CMD;
  I2C_Status_Reg  I2C_Status;
  I2C_Write_TX(value);
  I2C_CMD.Value=0;
  if(STA!=0)
  I2C_CMD.I2C_CMD_Flags.STA=1;
  if(STO!=0)
  I2C_CMD.I2C_CMD_Flags.STO=1;
  I2C_CMD.I2C_CMD_Flags.WR=1;
  I2C_Write_CMD(I2C_CMD.Value);
  do
  {
    I2C_Status.Value=I2C_Read_Status();
  }
  while(I2C_Status.I2C_Status_Flags.TIP);
  if(!I2C_Status.I2C_Status_Flags.RXACK)
  ACK=1;
  else
  ACK=0;
  return ACK;
}
//-------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -