Version 3, last updated by fellong at Dec 01 21:49 2008 UTC

/// ===============================================
/// I2C 模組
/// -----------------------------------------------
/// 功能 : I2C 讀寫控制
/// -----------------------------------------------
/// Input Pins :
/// mSDA equ pi.3;
/// Output Pins :
/// mSCL equ pi.2;
/// ===============================================

/// ======== START Public 函式 ========
void Initial_I2C( void ); /// 初始化 IO
void I2C_Start( void ); /// master 送 start Condition 給 slave
void I2C_Stop( void ); /// master 送 stop Condition 給 slave
void I2C_ACK( void ); /// master 送 ack 給 slave
void I2C_NOACK( void ); /// master 送 noack 給 slave
void I2C_AskACK( void ); /// master 等待 slave 回傳 ack 或 noack
void I2C_WriteData( void ); /// master 寫出 8 bits 資料給 slave, a = 資料
#define I2C_WriteDevice() I2C_WriteData();
void I2C_ReadData( void ); /// master 從 slave 端讀入 8 bits 資料, a = 資料
/// ======== END Public 函式 ========


有些裝置使用一些標準的傳輸界面,這時候把這些傳輸界面獨立成一個單一模組會是比較好的選擇,因為,有可能不同的裝置都是用同樣的界面來完成,只不過傳輸格式不同罷了,例如,下一個單元的 PS2 界面。


/// ===============================================
/// EEPROM 模組
/// -----------------------------------------------
/// 功能 : MICROCHIP 24LC02B I2C 介面的 EEPROM 讀寫控制
/// -----------------------------------------------
/// Input Pins :
/// see I2C.h for detail
/// Output Pins :
/// see I2C.h for detail
/// ===============================================

 

/// ======== START Public 函式 ========
void Initial_EEPROM( void ); /// 初始化 EEPROM
void EEPROM_StartWrite( void ); /// 開始 I2C 傳輸,傳入 a = 位址,準備從位址開始寫入資料
void EEPROM_Write( void ); /// 傳入 a = 資料, 寫入資料
void EEPROM_StopWrite( void ); /// 停止寫入資料,結束 I2C 傳輸
void EEPROM_StartRead( void ); /// 開始 I2C 傳輸,傳入 a = 位址,準備從位址開始讀出資料
void EEPROM_Read( void ); /// 讀出資料, a = 資料
void EEPROM_StopRead(); /// 停止讀出資料,結束 I2C 傳輸
/// ======== END Public 函式 ========


24LC02B 便是透過 I2C 界面完成 EEPROM 讀寫的裝置,所以基本上它所提供的函式,都是拿 I2C 界面來封裝的。

而為了讓使用者更方便的使用這個模組,一些模組函式的設計是需要來仔細思考的,除了要符合原來的 DATASHEET 流程,也要有讓使用者方便的叫用程序。