Browse Source

Merge pull request #11 from FrankBoesing/F_BUS-128MHz

F_BUS 128MHz
main
Paul Stoffregen 6 years ago
parent
commit
6e248dbb0f
No account linked to committer's email address
2 changed files with 23 additions and 7 deletions
  1. +12
    -2
      WireKinetis.cpp
  2. +11
    -5
      WireKinetis.h

+ 12
- 2
WireKinetis.cpp View File

* THE SOFTWARE. * THE SOFTWARE.
*/ */


#include <Arduino.h>
#include "Wire.h" #include "Wire.h"


#if defined(__arm__) && defined(TEENSYDUINO) #if defined(__arm__) && defined(TEENSYDUINO)
{ {
if (!(hardware.clock_gate_register & hardware.clock_gate_mask)) return; if (!(hardware.clock_gate_register & hardware.clock_gate_mask)) return;


#if F_BUS == 120000000
#if F_BUS == 128000000
if (frequency < 400000) {
port().F = I2C_F_DIV1280; // 100 kHz
} else if (frequency < 1000000) {
port().F = I2C_F_DIV320; // 400 kHz
} else {
port().F = I2C_F_DIV128; // 1 MHz
}
port().FLT = 4;
#elif F_BUS == 120000000
if (frequency < 400000) { if (frequency < 400000) {
port().F = I2C_F_DIV1152; // 104 kHz port().F = I2C_F_DIV1152; // 104 kHz
} else if (frequency < 1000000) { } else if (frequency < 1000000) {
port().F = 0x00; // 100 kHz port().F = 0x00; // 100 kHz
port().FLT = 1; port().FLT = 1;
#else #else
#error "F_BUS must be 120, 108, 96, 90, 80, 72, 64, 60, 56, 54, 48, 40, 36, 24, 16, 8, 4 or 2 MHz"
#error "F_BUS must be 128, 120, 108, 96, 90, 80, 72, 64, 60, 56, 54, 48, 40, 36, 24, 16, 8, 4 or 2 MHz"
#endif #endif
} }



+ 11
- 5
WireKinetis.h View File



#if defined(__arm__) && defined(TEENSYDUINO) #if defined(__arm__) && defined(TEENSYDUINO)


#include <inttypes.h>
#include "Arduino.h"
#include <Arduino.h>
#include <stdint.h>


#define BUFFER_LENGTH 32 #define BUFFER_LENGTH 32
#define WIRE_HAS_END 1 #define WIRE_HAS_END 1
inline TWBRemulation & operator = (int val) __attribute__((always_inline)) { inline TWBRemulation & operator = (int val) __attribute__((always_inline)) {
if (val == 12 || val == ((F_CPU / 400000) - 16) / 2) { // 22, 52, 112 if (val == 12 || val == ((F_CPU / 400000) - 16) / 2) { // 22, 52, 112
I2C0_C1 = 0; I2C0_C1 = 0;
#if F_BUS == 120000000
#if F_BUS == 128000000
I2C0_F = I2C_F_DIV320; // 400 kHz
#elif F_BUS == 120000000
I2C0_F = I2C_F_DIV288; // 416 kHz I2C0_F = I2C_F_DIV288; // 416 kHz
#elif F_BUS == 108000000 #elif F_BUS == 108000000
I2C0_F = I2C_F_DIV256; // 422 kHz I2C0_F = I2C_F_DIV256; // 422 kHz
I2C0_C1 = I2C_C1_IICEN; I2C0_C1 = I2C_C1_IICEN;
} else if (val == 72 || val == ((F_CPU / 100000) - 16) / 2) { // 112, 232, 472 } else if (val == 72 || val == ((F_CPU / 100000) - 16) / 2) { // 112, 232, 472
I2C0_C1 = 0; I2C0_C1 = 0;
#if F_BUS == 120000000
#if F_BUS == 128000000
I2C0_F = I2C_F_DIV1280; // 100 kHz
#elif F_BUS == 120000000
I2C0_F = I2C_F_DIV1152; // 104 kHz I2C0_F = I2C_F_DIV1152; // 104 kHz
#elif F_BUS == 108000000 #elif F_BUS == 108000000
I2C0_F = I2C_F_DIV1024; // 105 kHz I2C0_F = I2C_F_DIV1024; // 105 kHz
return *this; return *this;
} }
inline operator int () const __attribute__((always_inline)) { inline operator int () const __attribute__((always_inline)) {
#if F_BUS == 120000000
#if F_BUS == 128000000
if (I2C0_F == I2C_F_DIV320) return 12;
#elif F_BUS == 120000000
if (I2C0_F == I2C_F_DIV288) return 12; if (I2C0_F == I2C_F_DIV288) return 12;
#elif F_BUS == 108000000 #elif F_BUS == 108000000
if (I2C0_F == I2C_F_DIV256) return 12; if (I2C0_F == I2C_F_DIV256) return 12;

Loading…
Cancel
Save