Skip to content

Commit afae6b3

Browse files
authored
board/teensy40: Add I2C support (#1471)
* teensy40: add I2C support
1 parent 2825b4f commit afae6b3

File tree

4 files changed

+710
-8
lines changed

4 files changed

+710
-8
lines changed

src/machine/board_teensy40.go

+46
Original file line numberDiff line numberDiff line change
@@ -346,3 +346,49 @@ const (
346346
I2C3_SDA_PIN = D25
347347
I2C3_SCL_PIN = D24
348348
)
349+
350+
var (
351+
I2C0 = I2C1 // I2C0 is an alias for I2C1 (LPI2C1)
352+
I2C1 = &_I2C1
353+
_I2C1 = I2C{
354+
Bus: nxp.LPI2C1,
355+
sda: I2C1_SDA_PIN, // D18 (PA17 [AD_B1_01])
356+
scl: I2C1_SCL_PIN, // D19 (PA16 [AD_B1_00])
357+
muxSDA: muxSelect{
358+
mux: nxp.IOMUXC_LPI2C1_SDA_SELECT_INPUT_DAISY_GPIO_AD_B1_01_ALT3,
359+
sel: &nxp.IOMUXC.LPI2C1_SDA_SELECT_INPUT,
360+
},
361+
muxSCL: muxSelect{
362+
mux: nxp.IOMUXC_LPI2C1_SCL_SELECT_INPUT_DAISY_GPIO_AD_B1_00_ALT3,
363+
sel: &nxp.IOMUXC.LPI2C1_SCL_SELECT_INPUT,
364+
},
365+
}
366+
I2C2 = &_I2C2
367+
_I2C2 = I2C{
368+
Bus: nxp.LPI2C3,
369+
sda: I2C2_SDA_PIN, // D17 (PA22 [AD_B1_06])
370+
scl: I2C2_SCL_PIN, // D16 (PA23 [AD_B1_07])
371+
muxSDA: muxSelect{
372+
mux: nxp.IOMUXC_LPI2C3_SDA_SELECT_INPUT_DAISY_GPIO_AD_B1_06_ALT1,
373+
sel: &nxp.IOMUXC.LPI2C3_SDA_SELECT_INPUT,
374+
},
375+
muxSCL: muxSelect{
376+
mux: nxp.IOMUXC_LPI2C3_SCL_SELECT_INPUT_DAISY_GPIO_AD_B1_07_ALT1,
377+
sel: &nxp.IOMUXC.LPI2C3_SCL_SELECT_INPUT,
378+
},
379+
}
380+
I2C3 = &_I2C3
381+
_I2C3 = I2C{
382+
Bus: nxp.LPI2C4,
383+
sda: I2C3_SDA_PIN, // D25 (PA13 [AD_B0_13])
384+
scl: I2C3_SCL_PIN, // D24 (PA12 [AD_B0_12])
385+
muxSDA: muxSelect{
386+
mux: nxp.IOMUXC_LPI2C4_SDA_SELECT_INPUT_DAISY_GPIO_AD_B0_13_ALT0,
387+
sel: &nxp.IOMUXC.LPI2C4_SDA_SELECT_INPUT,
388+
},
389+
muxSCL: muxSelect{
390+
mux: nxp.IOMUXC_LPI2C4_SCL_SELECT_INPUT_DAISY_GPIO_AD_B0_12_ALT0,
391+
sel: &nxp.IOMUXC.LPI2C4_SCL_SELECT_INPUT,
392+
},
393+
}
394+
)

src/machine/machine_mimxrt1062.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -342,10 +342,10 @@ func (jt *pinJumpTable) dispatchInterrupt(interrupt.Interrupt) {
342342
if status := gpio.ISR.Get() & gpio.IMR.Get(); status != 0 {
343343
gpio.ISR.Set(status) // clear interrupt
344344
for status != 0 {
345-
p := Pin(bits.TrailingZeros32(status))
346-
i := Pin(port + p)
347-
jt.lut[i](i)
348-
status &^= 1 << p
345+
off := Pin(bits.TrailingZeros32(status)) // ctz
346+
pin := Pin(port + off)
347+
jt.lut[pin](pin)
348+
status &^= 1 << off
349349
}
350350
}
351351
}

0 commit comments

Comments
 (0)