當 Microchip PIC24FJ64GA0008 作為 I2C 主器件工作時,模組必須產生系統 SCLx 時鐘。通常,I2C 系統時鐘指定為100 kHz、400 kHz 或 1 MHz。系統時鐘速率指定為最小 SCLx 低電平時間加最小 SCLx 高電平時間。在大多數情況下,這由 2 個 TBRG 時間間隔確定。串列傳輸速率發生器的重載值為 I2CxBRG 寄存器值,當串列傳輸速率發生器裝入該值時,發生器倒計數至 0 並停止,直到發生另一次重載。發生器計數在每個指令週期(TCY)遞減兩次。在串列傳輸速率重新啟動時,將自動重載串列傳輸速率發生器。例如,如果發生時鐘同步,串列傳輸速率發生器將在 SCLx 引腳採樣為高電平時重載。
Microchip PIC24FJ64GA0008 波特率發生器框圖 |
注: I2CxBRG 的值不能小於 2。
Microchip PIC24FJ64GA0008 波特率發生器公式 |
I2C 時鐘速率和傳輸速率 |
Microchip PIC24FJ64GA008 I2C 初始化程式:
void MASTER_I2C2_INIT(void) {
I2C2MSK
= 0x20; // set this
controller's device address
I2C2CONbits.I2CEN
= 1; // enable I2C module
I2C2CONbits.I2CSIDL
= 0; // Continue module operation in
Idle mode
I2C2CONbits.IPMIEN
= 0; // IPMI mode disabled
I2C2CONbits.A10M = 0; // I2C1ADD
is a 7-bit slave address
I2C2CONbits.DISSLW
= 0; // for 400 kHz up enable slew
rate
I2C2CONbits.SMEN
= 1; // signal conditioning
I2C2CONbits.GCEN = 0; //
for slave mode only
I2C2CONbits.STREN
= 1; //
Enable software or receive clock stretching,
// therefore
clock must be release by slave
// when done on
loading data to sync clock
I2C2BRG = 18; // 400kHz
IEC3bits.SI2C2IE
= 0; // enable Slave I2C1 interrupt
IEC3bits.MI2C2IE
= 0; // enable Master I2C1 interrupt
}
|
沒有留言:
張貼留言