嵌入式單片機應用開發--I2C開發實踐

IIC驅動的實現簡介

 IIC驅動可以有兩種方法實現

  • 阻塞式(等待型)
  • 非阻塞式(中斷型)

阻塞型驅動

 需要打開:

  • I2C外設中斷開關

 一般包含以下函數接口:

  • 初始I2C外設:void i2c_init(void);
  • 去初始I2C外設:void i2c_uninit(void);
  • I2C開始信號:void i2c_start(void);
  • I2C停止信號:void i2c_stop(void);
  • I2C等待:bool i2c_wait(void);
  • I2C判忙:bool i2c_busy(void);
  • I2C讀:void i2c_read(uint8_t addr, uint8_t* data);
  • I2C寫:void i2c_write(uint8_t addr, uint8_t* data, uint8_t size);

 在該.c文件下,由於I2C是由中斷事件觸發的,通過輪詢I2C的寄存器標誌位並加上超時機制來達到目的(函數:i2c_wait()),每進行一個操作都需要I2C外設做出迴應並使用i2c_wait()函數進行等待(阻塞),並應用到讀寫的各個邏輯條件中。

非阻塞型驅動

 需要打開:

  • I2C外設中斷開關
  • 中斷向量表上對應的I2C中斷開關

 一般包含以下函數接口:

  • 初始I2C外設:void i2c_init(void);
  • 去初始I2C外設:void i2c_uninit(void);
  • I2C中斷處理函數:void i2c_interrupt_isr_handler(void)…;
  • I2C中斷讀:void i2c_inter_read(uint8_t addr, uint8_t* data);
  • I2C中斷寫:void i2c_inter_write(uint8_t addr, uint8_t* data, uint8_t size);

 在該.c文件下,使用全局變量來標記各個狀態,由於I2C是由中斷事件觸發的,所以這些全局變量的狀態是在中斷裏面改變的,中斷中改變的標誌可以應用於I2C讀寫的邏輯條件。

應用

寄存器

 I2C中有三個常用的寄存器(幾乎所有的單片機(引腳模擬的不算)中都有,只是名字不一樣):

  • 用於讀寫的數據寄存器:I2CDR
  • 用於控制的寄存器:I2CCR
  • 用於查詢狀態的寄存器:I2CSTR

寫流程:開始信號+地址(7位)+模式(1位)+迴應(1位)

讀流程:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章