2016年10月25日 星期二

DIY - Robot 機器人 - PIC24FJ64GA008 I2C 模組傳輸速率(十四)

DIY - Robot 機器人 - PIC24FJ64GA008 I2C 組傳輸速率(十四): 

Microchip PIC24FJ64GA0008 作為 I2C 主器件工作時,模組必須產生系統 SCLx 時鐘。通常,I2C 系統時鐘指定為100 kHz400 kHz 1 MHz。系統時鐘速率指定為最小 SCLx 低電平時間加最小 SCLx 高電平時間。在大多數情況下,這由 2 TBRG 時間間隔確定。串列傳輸速率發生器的重載值為 I2CxBRG 寄存器值,當串列傳輸速率發生器裝入該值時,發生器倒計數至 0 並停止,直到發生另一次重載。發生器計數在每個指令週期(TCY)遞減兩次。在串列傳輸速率重新啟動時,將自動重載串列傳輸速率發生器。例如,如果發生時鐘同步,串列傳輸速率發生器將在 SCLx 引腳採樣為高電平時重載。

Microchip PIC24FJ64GA0008 波特率發生器框圖
要計算 I2C 串列傳輸速率發生器重載值,可使用以下公式:
注: 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
}


沒有留言:

張貼留言