From 3b68f8f16ac6afcb5219bc9a580e609db2914c76 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Mon, 26 Sep 2022 18:27:55 +0200 Subject: [PATCH] machine: hide internal pin modes Many pin modes are only for peripherals like SPI and PWM. Do not make these part of the public API: the public API is the Configure method on the peripheral, not the PinMode constant. --- src/machine/machine_atsamd21.go | 36 +++++------ src/machine/machine_atsamd21_usb.go | 4 +- src/machine/machine_atsamd21e18.go | 24 ++++---- src/machine/machine_atsamd21g18.go | 24 ++++---- src/machine/machine_atsamd51.go | 81 ++++++++++++------------- src/machine/machine_atsamd51_usb.go | 4 +- src/machine/machine_atsame5x_can.go | 4 +- src/machine/machine_fe310.go | 22 ++++--- src/machine/machine_mimxrt1062.go | 52 ++++++++-------- src/machine/machine_mimxrt1062_i2c.go | 4 +- src/machine/machine_mimxrt1062_spi.go | 8 +-- src/machine/machine_mimxrt1062_uart.go | 4 +- src/machine/machine_rp2040_adc.go | 2 +- src/machine/machine_rp2040_gpio.go | 22 ++++--- src/machine/machine_rp2040_i2c.go | 4 +- src/machine/machine_rp2040_pwm.go | 2 +- src/machine/machine_rp2040_uart.go | 4 +- src/machine/machine_stm32_adc_f1.go | 2 +- src/machine/machine_stm32_adc_f4.go | 2 +- src/machine/machine_stm32_i2c_revb.go | 4 +- src/machine/machine_stm32_moder_gpio.go | 41 ++++++------- src/machine/machine_stm32_tim.go | 2 +- src/machine/machine_stm32_tim_moder.go | 2 +- src/machine/machine_stm32f103.go | 38 ++++++------ src/machine/machine_stm32f4.go | 14 ++--- src/machine/machine_stm32f7x2.go | 4 +- src/machine/machine_stm32l0.go | 10 +-- src/machine/machine_stm32l4.go | 10 +-- src/machine/machine_stm32l5x2.go | 4 +- src/machine/machine_stm32wlx.go | 10 +-- 30 files changed, 223 insertions(+), 221 deletions(-) diff --git a/src/machine/machine_atsamd21.go b/src/machine/machine_atsamd21.go index 587fb3623..90c1ec96a 100644 --- a/src/machine/machine_atsamd21.go +++ b/src/machine/machine_atsamd21.go @@ -17,20 +17,20 @@ import ( const deviceName = sam.Device const ( - PinAnalog PinMode = 1 - PinSERCOM PinMode = 2 - PinSERCOMAlt PinMode = 3 - PinTimer PinMode = 4 - PinTimerAlt PinMode = 5 - PinCom PinMode = 6 - //PinAC_CLK PinMode = 7 - PinDigital PinMode = 8 PinInput PinMode = 9 PinInputPullup PinMode = 10 PinOutput PinMode = 11 - PinTCC PinMode = PinTimer - PinTCCAlt PinMode = PinTimerAlt PinInputPulldown PinMode = 12 + + // internal pin modes + pinAnalog PinMode = 1 + pinSERCOM PinMode = 2 + pinSERCOMAlt PinMode = 3 + pinTCC PinMode = 4 + pinTCCAlt PinMode = 5 + pinCom PinMode = 6 + //PinAC_CLK PinMode = 7 + pinDigital PinMode = 8 ) type PinChange uint8 @@ -149,7 +149,7 @@ func findPinPadMapping(sercom uint8, pin Pin) (pinMode PinMode, pad uint32, ok b if upper != 0 { // SERCOM if (upper>>1)-1 == sercom { - pinMode = PinSERCOM + pinMode = pinSERCOM pad |= uint32((upper & 1) << 1) ok = true } @@ -157,7 +157,7 @@ func findPinPadMapping(sercom uint8, pin Pin) (pinMode PinMode, pad uint32, ok b if lower != 0 { // SERCOM-ALT if (lower>>1)-1 == sercom { - pinMode = PinSERCOMAlt + pinMode = pinSERCOMAlt pad |= uint32((lower & 1) << 1) ok = true } @@ -381,7 +381,7 @@ func (a ADC) Configure(config ADCConfig) { // 1/2 VDDANA = 0.5 * 3V3 = 1.65V sam.ADC.REFCTRL.SetBits(sam.ADC_REFCTRL_REFSEL_INTVCC1 << sam.ADC_REFCTRL_REFSEL_Pos) - a.Pin.Configure(PinConfig{Mode: PinAnalog}) + a.Pin.Configure(PinConfig{Mode: pinAnalog}) return } @@ -1000,11 +1000,11 @@ func (i2s I2S) Configure(config I2SConfig) { } // configure pin for clock - config.SCK.Configure(PinConfig{Mode: PinCom}) + config.SCK.Configure(PinConfig{Mode: pinCom}) // configure pin for WS, if needed if config.WS != NoPin { - config.WS.Configure(PinConfig{Mode: PinCom}) + config.WS.Configure(PinConfig{Mode: pinCom}) } // now set serializer data size. @@ -1043,7 +1043,7 @@ func (i2s I2S) Configure(config I2SConfig) { } // configure data pin - config.SD.Configure(PinConfig{Mode: PinCom}) + config.SD.Configure(PinConfig{Mode: pinCom}) // re-enable i2s.Bus.CTRLA.SetBits(sam.I2S_CTRLA_ENABLE) @@ -1636,12 +1636,12 @@ func findPinTimerMapping(timer uint8, pin Pin) (PinMode, uint8) { if mapping&0x07 == timer+1 { // PWM output is on peripheral function E. evenChannel := ((mapping >> 3) & 1) * 2 - return PinTCC, evenChannel + uint8(pin&1) + return pinTCC, evenChannel + uint8(pin&1) } if (mapping&0x70)>>4 == timer+1 { // PWM output is on peripheral function F. evenChannel := ((mapping >> 7) & 1) * 2 - return PinTCCAlt, evenChannel + uint8(pin&1) + return pinTCCAlt, evenChannel + uint8(pin&1) } return 0, 0 } diff --git a/src/machine/machine_atsamd21_usb.go b/src/machine/machine_atsamd21_usb.go index 7eeb4d0ce..a1a946f2a 100644 --- a/src/machine/machine_atsamd21_usb.go +++ b/src/machine/machine_atsamd21_usb.go @@ -37,8 +37,8 @@ func (dev *USBDevice) Configure(config UARTConfig) { sam.USB_DEVICE.DESCADD.Set(uint32(uintptr(unsafe.Pointer(&usbEndpointDescriptors)))) // configure pins - USBCDC_DM_PIN.Configure(PinConfig{Mode: PinCom}) - USBCDC_DP_PIN.Configure(PinConfig{Mode: PinCom}) + USBCDC_DM_PIN.Configure(PinConfig{Mode: pinCom}) + USBCDC_DP_PIN.Configure(PinConfig{Mode: pinCom}) // performs pad calibration from store fuses handlePadCalibration() diff --git a/src/machine/machine_atsamd21e18.go b/src/machine/machine_atsamd21e18.go index 26e251678..d2cc1f8ba 100644 --- a/src/machine/machine_atsamd21e18.go +++ b/src/machine/machine_atsamd21e18.go @@ -86,53 +86,53 @@ func (p Pin) Configure(config PinConfig) { sam.PORT.OUTSET0.Set(1 << uint8(p)) p.setPinCfg(sam.PORT_PINCFG0_INEN | sam.PORT_PINCFG0_PULLEN) - case PinSERCOM: + case pinSERCOM: if uint8(p)&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_PMUX0_PMUXE_Msk - p.setPMux(val | (uint8(PinSERCOM) << sam.PORT_PMUX0_PMUXO_Pos)) + p.setPMux(val | (uint8(pinSERCOM) << sam.PORT_PMUX0_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_PMUX0_PMUXO_Msk - p.setPMux(val | (uint8(PinSERCOM) << sam.PORT_PMUX0_PMUXE_Pos)) + p.setPMux(val | (uint8(pinSERCOM) << sam.PORT_PMUX0_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_PINCFG0_PMUXEN | sam.PORT_PINCFG0_DRVSTR | sam.PORT_PINCFG0_INEN) - case PinSERCOMAlt: + case pinSERCOMAlt: if uint8(p)&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_PMUX0_PMUXE_Msk - p.setPMux(val | (uint8(PinSERCOMAlt) << sam.PORT_PMUX0_PMUXO_Pos)) + p.setPMux(val | (uint8(pinSERCOMAlt) << sam.PORT_PMUX0_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_PMUX0_PMUXO_Msk - p.setPMux(val | (uint8(PinSERCOMAlt) << sam.PORT_PMUX0_PMUXE_Pos)) + p.setPMux(val | (uint8(pinSERCOMAlt) << sam.PORT_PMUX0_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_PINCFG0_PMUXEN | sam.PORT_PINCFG0_DRVSTR) - case PinCom: + case pinCom: if uint8(p)&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_PMUX0_PMUXE_Msk - p.setPMux(val | (uint8(PinCom) << sam.PORT_PMUX0_PMUXO_Pos)) + p.setPMux(val | (uint8(pinCom) << sam.PORT_PMUX0_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_PMUX0_PMUXO_Msk - p.setPMux(val | (uint8(PinCom) << sam.PORT_PMUX0_PMUXE_Pos)) + p.setPMux(val | (uint8(pinCom) << sam.PORT_PMUX0_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_PINCFG0_PMUXEN) - case PinAnalog: + case pinAnalog: if uint8(p)&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_PMUX0_PMUXE_Msk - p.setPMux(val | (uint8(PinAnalog) << sam.PORT_PMUX0_PMUXO_Pos)) + p.setPMux(val | (uint8(pinAnalog) << sam.PORT_PMUX0_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_PMUX0_PMUXO_Msk - p.setPMux(val | (uint8(PinAnalog) << sam.PORT_PMUX0_PMUXE_Pos)) + p.setPMux(val | (uint8(pinAnalog) << sam.PORT_PMUX0_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_PINCFG0_PMUXEN | sam.PORT_PINCFG0_DRVSTR) diff --git a/src/machine/machine_atsamd21g18.go b/src/machine/machine_atsamd21g18.go index c933f4bfe..fcde1b7d3 100644 --- a/src/machine/machine_atsamd21g18.go +++ b/src/machine/machine_atsamd21g18.go @@ -137,53 +137,53 @@ func (p Pin) Configure(config PinConfig) { p.setPinCfg(sam.PORT_PINCFG0_INEN | sam.PORT_PINCFG0_PULLEN) } - case PinSERCOM: + case pinSERCOM: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_PMUX0_PMUXE_Msk - p.setPMux(val | (uint8(PinSERCOM) << sam.PORT_PMUX0_PMUXO_Pos)) + p.setPMux(val | (uint8(pinSERCOM) << sam.PORT_PMUX0_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_PMUX0_PMUXO_Msk - p.setPMux(val | (uint8(PinSERCOM) << sam.PORT_PMUX0_PMUXE_Pos)) + p.setPMux(val | (uint8(pinSERCOM) << sam.PORT_PMUX0_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_PINCFG0_PMUXEN | sam.PORT_PINCFG0_DRVSTR | sam.PORT_PINCFG0_INEN) - case PinSERCOMAlt: + case pinSERCOMAlt: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_PMUX0_PMUXE_Msk - p.setPMux(val | (uint8(PinSERCOMAlt) << sam.PORT_PMUX0_PMUXO_Pos)) + p.setPMux(val | (uint8(pinSERCOMAlt) << sam.PORT_PMUX0_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_PMUX0_PMUXO_Msk - p.setPMux(val | (uint8(PinSERCOMAlt) << sam.PORT_PMUX0_PMUXE_Pos)) + p.setPMux(val | (uint8(pinSERCOMAlt) << sam.PORT_PMUX0_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_PINCFG0_PMUXEN | sam.PORT_PINCFG0_DRVSTR) - case PinCom: + case pinCom: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_PMUX0_PMUXE_Msk - p.setPMux(val | (uint8(PinCom) << sam.PORT_PMUX0_PMUXO_Pos)) + p.setPMux(val | (uint8(pinCom) << sam.PORT_PMUX0_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_PMUX0_PMUXO_Msk - p.setPMux(val | (uint8(PinCom) << sam.PORT_PMUX0_PMUXE_Pos)) + p.setPMux(val | (uint8(pinCom) << sam.PORT_PMUX0_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_PINCFG0_PMUXEN) - case PinAnalog: + case pinAnalog: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_PMUX0_PMUXE_Msk - p.setPMux(val | (uint8(PinAnalog) << sam.PORT_PMUX0_PMUXO_Pos)) + p.setPMux(val | (uint8(pinAnalog) << sam.PORT_PMUX0_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_PMUX0_PMUXO_Msk - p.setPMux(val | (uint8(PinAnalog) << sam.PORT_PMUX0_PMUXE_Pos)) + p.setPMux(val | (uint8(pinAnalog) << sam.PORT_PMUX0_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_PINCFG0_PMUXEN | sam.PORT_PINCFG0_DRVSTR) diff --git a/src/machine/machine_atsamd51.go b/src/machine/machine_atsamd51.go index 0c296553b..861f5644f 100644 --- a/src/machine/machine_atsamd51.go +++ b/src/machine/machine_atsamd51.go @@ -21,30 +21,29 @@ func CPUFrequency() uint32 { } const ( - PinAnalog PinMode = 1 - PinSERCOM PinMode = 2 - PinSERCOMAlt PinMode = 3 - PinTimer PinMode = 4 - PinTimerAlt PinMode = 5 - PinTCCPDEC PinMode = 6 - PinCom PinMode = 7 - PinSDHC PinMode = 8 - PinI2S PinMode = 9 - PinPCC PinMode = 10 - PinGMAC PinMode = 11 - PinACCLK PinMode = 12 - PinCCL PinMode = 13 - PinDigital PinMode = 14 PinInput PinMode = 15 PinInputPullup PinMode = 16 PinOutput PinMode = 17 - PinTCCE PinMode = PinTimer - PinTCCF PinMode = PinTimerAlt - PinTCCG PinMode = PinTCCPDEC PinInputPulldown PinMode = 18 - PinCAN PinMode = 19 - PinCAN0 PinMode = PinSDHC - PinCAN1 PinMode = PinCom + + // internal pin modes + pinAnalog PinMode = 1 + pinSERCOM PinMode = 2 + pinSERCOMAlt PinMode = 3 + pinTCCE PinMode = 4 + pinTCCF PinMode = 5 + pinTCCG PinMode = 6 + pinCom PinMode = 7 + pinSDHC PinMode = 8 + pinI2S PinMode = 9 + pinPCC PinMode = 10 + pinGMAC PinMode = 11 + pinACCLK PinMode = 12 + pinCCL PinMode = 13 + pinDigital PinMode = 14 + pinCAN PinMode = 19 + pinCAN0 PinMode = pinSDHC + pinCAN1 PinMode = pinCom ) type PinChange uint8 @@ -338,7 +337,7 @@ func findPinPadMapping(sercom uint8, pin Pin) (pinMode PinMode, pad uint32, ok b if upper != 0 { // SERCOM if (upper>>4)-1 == sercom { - pinMode = PinSERCOM + pinMode = pinSERCOM pad |= uint32(upper % 4) ok = true } @@ -346,7 +345,7 @@ func findPinPadMapping(sercom uint8, pin Pin) (pinMode PinMode, pad uint32, ok b if lower != 0 { // SERCOM-ALT if (lower>>4)-1 == sercom { - pinMode = PinSERCOMAlt + pinMode = pinSERCOMAlt pad |= uint32(lower % 4) ok = true } @@ -580,65 +579,65 @@ func (p Pin) Configure(config PinConfig) { sam.PORT.GROUP[group].OUTSET.Set(1 << pin_in_group) p.setPinCfg(sam.PORT_GROUP_PINCFG_INEN | sam.PORT_GROUP_PINCFG_PULLEN) - case PinSERCOM: + case pinSERCOM: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXE_Msk - p.setPMux(val | (uint8(PinSERCOM) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) + p.setPMux(val | (uint8(pinSERCOM) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXO_Msk - p.setPMux(val | (uint8(PinSERCOM) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) + p.setPMux(val | (uint8(pinSERCOM) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_GROUP_PINCFG_PMUXEN | sam.PORT_GROUP_PINCFG_DRVSTR | sam.PORT_GROUP_PINCFG_INEN) - case PinSERCOMAlt: + case pinSERCOMAlt: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXE_Msk - p.setPMux(val | (uint8(PinSERCOMAlt) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) + p.setPMux(val | (uint8(pinSERCOMAlt) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXO_Msk - p.setPMux(val | (uint8(PinSERCOMAlt) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) + p.setPMux(val | (uint8(pinSERCOMAlt) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_GROUP_PINCFG_PMUXEN | sam.PORT_GROUP_PINCFG_DRVSTR) - case PinCom: + case pinCom: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXE_Msk - p.setPMux(val | (uint8(PinCom) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) + p.setPMux(val | (uint8(pinCom) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXO_Msk - p.setPMux(val | (uint8(PinCom) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) + p.setPMux(val | (uint8(pinCom) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_GROUP_PINCFG_PMUXEN) - case PinAnalog: + case pinAnalog: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXE_Msk - p.setPMux(val | (uint8(PinAnalog) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) + p.setPMux(val | (uint8(pinAnalog) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXO_Msk - p.setPMux(val | (uint8(PinAnalog) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) + p.setPMux(val | (uint8(pinAnalog) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_GROUP_PINCFG_PMUXEN | sam.PORT_GROUP_PINCFG_DRVSTR) - case PinSDHC: + case pinSDHC: if p&1 > 0 { // odd pin, so save the even pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXE_Msk - p.setPMux(val | (uint8(PinSDHC) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) + p.setPMux(val | (uint8(pinSDHC) << sam.PORT_GROUP_PMUX_PMUXO_Pos)) } else { // even pin, so save the odd pins val := p.getPMux() & sam.PORT_GROUP_PMUX_PMUXO_Msk - p.setPMux(val | (uint8(PinSDHC) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) + p.setPMux(val | (uint8(pinSDHC) << sam.PORT_GROUP_PMUX_PMUXE_Pos)) } // enable port config p.setPinCfg(sam.PORT_GROUP_PINCFG_PMUXEN) @@ -814,7 +813,7 @@ func (a ADC) Configure(config ADCConfig) { adc.REFCTRL.SetBits(sam.ADC_REFCTRL_REFSEL_INTVCC1) } - a.Pin.Configure(PinConfig{Mode: PinAnalog}) + a.Pin.Configure(PinConfig{Mode: pinAnalog}) } // Get returns the current value of a ADC pin, in the range 0..0xffff. @@ -1867,7 +1866,7 @@ var pinTimerMapping = [...]struct{ F, G uint8 }{ PB02 / 2: {pinTCC2_2, 0}, } -// findPinPadMapping returns the pin mode (PinTCCF or PinTCCG) and the channel +// findPinPadMapping returns the pin mode (pinTCCF or pinTCCG) and the channel // number for a given timer and pin. A zero PinMode is returned if no mapping // could be found. func findPinTimerMapping(timer uint8, pin Pin) (PinMode, uint8) { @@ -1879,12 +1878,12 @@ func findPinTimerMapping(timer uint8, pin Pin) (PinMode, uint8) { // Check for column F in the datasheet. if mapping.F>>4-1 == timer { - return PinTCCF, mapping.F&0x0f + uint8(pin)&1 + return pinTCCF, mapping.F&0x0f + uint8(pin)&1 } // Check for column G in the datasheet. if mapping.G>>4-1 == timer { - return PinTCCG, mapping.G&0x0f + uint8(pin)&1 + return pinTCCG, mapping.G&0x0f + uint8(pin)&1 } // Nothing found. diff --git a/src/machine/machine_atsamd51_usb.go b/src/machine/machine_atsamd51_usb.go index 7c11f9e1b..b3b93518b 100644 --- a/src/machine/machine_atsamd51_usb.go +++ b/src/machine/machine_atsamd51_usb.go @@ -37,8 +37,8 @@ func (dev *USBDevice) Configure(config UARTConfig) { sam.USB_DEVICE.DESCADD.Set(uint32(uintptr(unsafe.Pointer(&usbEndpointDescriptors)))) // configure pins - USBCDC_DM_PIN.Configure(PinConfig{Mode: PinCom}) - USBCDC_DP_PIN.Configure(PinConfig{Mode: PinCom}) + USBCDC_DM_PIN.Configure(PinConfig{Mode: pinCom}) + USBCDC_DP_PIN.Configure(PinConfig{Mode: pinCom}) // performs pad calibration from store fuses handlePadCalibration() diff --git a/src/machine/machine_atsame5x_can.go b/src/machine/machine_atsame5x_can.go index 47be30514..1cb516077 100644 --- a/src/machine/machine_atsame5x_can.go +++ b/src/machine/machine_atsame5x_can.go @@ -68,9 +68,9 @@ func (can *CAN) Configure(config CANConfig) error { config.Standby.Low() } - mode := PinCAN0 + mode := pinCAN0 if can.instance() == 1 { - mode = PinCAN1 + mode = pinCAN1 } config.Rx.Configure(PinConfig{Mode: mode}) diff --git a/src/machine/machine_fe310.go b/src/machine/machine_fe310.go index 3d9c298db..0e47f987a 100644 --- a/src/machine/machine_fe310.go +++ b/src/machine/machine_fe310.go @@ -18,9 +18,11 @@ func CPUFrequency() uint32 { const ( PinInput PinMode = iota PinOutput - PinPWM - PinSPI - PinI2C = PinSPI + + // internal pin modes + pinPWM + pinSPI + pinI2C = pinSPI ) // Configure this pin with the given configuration. @@ -29,10 +31,10 @@ func (p Pin) Configure(config PinConfig) { switch config.Mode { case PinOutput: sifive.GPIO0.OUTPUT_EN.SetBits(1 << uint8(p)) - case PinPWM: + case pinPWM: sifive.GPIO0.IOF_EN.SetBits(1 << uint8(p)) sifive.GPIO0.IOF_SEL.SetBits(1 << uint8(p)) - case PinSPI: + case pinSPI: sifive.GPIO0.IOF_EN.SetBits(1 << uint8(p)) sifive.GPIO0.IOF_SEL.ClearBits(1 << uint8(p)) } @@ -145,9 +147,9 @@ func (spi SPI) Configure(config SPIConfig) error { } // enable pins for SPI - config.SCK.Configure(PinConfig{Mode: PinSPI}) - config.SDO.Configure(PinConfig{Mode: PinSPI}) - config.SDI.Configure(PinConfig{Mode: PinSPI}) + config.SCK.Configure(PinConfig{Mode: pinSPI}) + config.SDO.Configure(PinConfig{Mode: pinSPI}) + config.SDI.Configure(PinConfig{Mode: pinSPI}) // set default frequency if config.Frequency == 0 { @@ -251,8 +253,8 @@ func (i2c *I2C) Configure(config I2CConfig) error { // enable controller i2c.Bus.CTR.SetBits(sifive.I2C_CTR_EN) - config.SDA.Configure(PinConfig{Mode: PinI2C}) - config.SCL.Configure(PinConfig{Mode: PinI2C}) + config.SDA.Configure(PinConfig{Mode: pinI2C}) + config.SCL.Configure(PinConfig{Mode: pinI2C}) return nil } diff --git a/src/machine/machine_mimxrt1062.go b/src/machine/machine_mimxrt1062.go index 5fd3199fc..29741b483 100644 --- a/src/machine/machine_mimxrt1062.go +++ b/src/machine/machine_mimxrt1062.go @@ -28,21 +28,21 @@ const ( PinDisable // ADC - PinInputAnalog + pinInputAnalog // UART - PinModeUARTTX - PinModeUARTRX + pinModeUARTTX + pinModeUARTRX // SPI - PinModeSPISDI - PinModeSPISDO - PinModeSPICLK - PinModeSPICS + pinModeSPISDI + pinModeSPISDO + pinModeSPICLK + pinModeSPICS // I2C - PinModeI2CSDA - PinModeI2CSCL + pinModeI2CSDA + pinModeI2CSCL ) // Deprecated: use PinInputPullup and PinInputPulldown instead. @@ -283,29 +283,29 @@ func (p Pin) Configure(config PinConfig) { gpio.GDIR.ClearBits(p.getMask()) pad.Set(dse(7) | hys) - case PinInputAnalog: + case pinInputAnalog: gpio.GDIR.ClearBits(p.getMask()) pad.Set(dse(7)) - case PinModeUARTTX: + case pinModeUARTTX: pad.Set(sre | dse(3) | spd(3)) - case PinModeUARTRX: + case pinModeUARTRX: pad.Set(dse(7) | pke | pue | pup(3) | hys) - case PinModeSPISDI: + case pinModeSPISDI: pad.Set(dse(7) | spd(2)) - case PinModeSPISDO: + case pinModeSPISDO: pad.Set(dse(7) | spd(2)) - case PinModeSPICLK: + case pinModeSPICLK: pad.Set(dse(7) | spd(2)) - case PinModeSPICS: + case pinModeSPICS: pad.Set(dse(7)) - case PinModeI2CSDA, PinModeI2CSCL: + case pinModeI2CSDA, pinModeI2CSCL: pad.Set(ode | sre | dse(4) | spd(1) | pke | pue | pup(3)) } @@ -759,7 +759,7 @@ func (p Pin) getMuxMode(config PinConfig) uint32 { return mode // ADC - case PinInputAnalog: + case pinInputAnalog: mode := uint32(0x5) // use alternate function 5 (GPIO) if forcePath { mode |= 0x10 // SION bit @@ -767,7 +767,7 @@ func (p Pin) getMuxMode(config PinConfig) uint32 { return mode // UART RX/TX - case PinModeUARTRX, PinModeUARTTX: + case pinModeUARTRX, pinModeUARTTX: mode := uint32(0x2) // UART is usually alternate function 2 on Teensy 4.x // Teensy 4.1 has a UART (LPUART5) with alternate function 1 if p == PB28 || p == PB29 { @@ -776,7 +776,7 @@ func (p Pin) getMuxMode(config PinConfig) uint32 { return mode // SPI SDI - case PinModeSPISDI: + case pinModeSPISDI: var mode uint32 switch p { case PC15: // LPSPI1 SDI on PC15 alternate function 4 @@ -794,7 +794,7 @@ func (p Pin) getMuxMode(config PinConfig) uint32 { return mode // SPI SDO - case PinModeSPISDO: + case pinModeSPISDO: var mode uint32 switch p { case PC14: // LPSPI1 SDO on PC14 alternate function 4 @@ -812,7 +812,7 @@ func (p Pin) getMuxMode(config PinConfig) uint32 { return mode // SPI SCK - case PinModeSPICLK: + case pinModeSPICLK: var mode uint32 switch p { case PC12: // LPSPI1 SCK on PC12 alternate function 4 @@ -830,7 +830,7 @@ func (p Pin) getMuxMode(config PinConfig) uint32 { return mode // SPI CS - case PinModeSPICS: + case pinModeSPICS: var mode uint32 switch p { case PC13: // LPSPI1 CS on PC13 alternate function 4 @@ -848,7 +848,7 @@ func (p Pin) getMuxMode(config PinConfig) uint32 { return mode // I2C SDA - case PinModeI2CSDA: + case pinModeI2CSDA: var mode uint32 switch p { case PA13: // LPI2C4 SDA on PA13 alternate function 0 @@ -866,7 +866,7 @@ func (p Pin) getMuxMode(config PinConfig) uint32 { return mode // I2C SCL - case PinModeI2CSCL: + case pinModeI2CSCL: var mode uint32 switch p { case PA12: // LPI2C4 SCL on PA12 alternate function 0 @@ -902,7 +902,7 @@ func (a ADC) Configure(config ADCConfig) { defaultSamples = uint32(4) ) - a.Pin.Configure(PinConfig{Mode: PinInputAnalog}) + a.Pin.Configure(PinConfig{Mode: pinInputAnalog}) resolution, samples := config.Resolution, config.Samples if 0 == resolution { diff --git a/src/machine/machine_mimxrt1062_i2c.go b/src/machine/machine_mimxrt1062_i2c.go index e24781bad..b18b617db 100644 --- a/src/machine/machine_mimxrt1062_i2c.go +++ b/src/machine/machine_mimxrt1062_i2c.go @@ -156,8 +156,8 @@ func (i2c *I2C) Configure(config I2CConfig) { sda, scl := i2c.setPins(config) // configure the mux and pad control registers - sda.Configure(PinConfig{Mode: PinModeI2CSDA}) - scl.Configure(PinConfig{Mode: PinModeI2CSCL}) + sda.Configure(PinConfig{Mode: pinModeI2CSDA}) + scl.Configure(PinConfig{Mode: pinModeI2CSCL}) // configure the mux input selector i2c.muxSDA.connect() diff --git a/src/machine/machine_mimxrt1062_spi.go b/src/machine/machine_mimxrt1062_spi.go index 6068f5050..175511929 100644 --- a/src/machine/machine_mimxrt1062_spi.go +++ b/src/machine/machine_mimxrt1062_spi.go @@ -77,10 +77,10 @@ func (spi *SPI) Configure(config SPIConfig) { spi.sdi, spi.sdo, spi.sck, spi.cs = config.getPins() // configure the mux and pad control registers - spi.sdi.Configure(PinConfig{Mode: PinModeSPISDI}) - spi.sdo.Configure(PinConfig{Mode: PinModeSPISDO}) - spi.sck.Configure(PinConfig{Mode: PinModeSPICLK}) - spi.cs.Configure(PinConfig{Mode: PinModeSPICS}) + spi.sdi.Configure(PinConfig{Mode: pinModeSPISDI}) + spi.sdo.Configure(PinConfig{Mode: pinModeSPISDO}) + spi.sck.Configure(PinConfig{Mode: pinModeSPICLK}) + spi.cs.Configure(PinConfig{Mode: pinModeSPICS}) // configure the mux input selector spi.muxSDI.connect() diff --git a/src/machine/machine_mimxrt1062_uart.go b/src/machine/machine_mimxrt1062_uart.go index c366fd453..eb4a87d08 100644 --- a/src/machine/machine_mimxrt1062_uart.go +++ b/src/machine/machine_mimxrt1062_uart.go @@ -68,8 +68,8 @@ func (uart *UART) Configure(config UARTConfig) { uart.tx = config.TX // configure the mux and pad control registers - uart.rx.Configure(PinConfig{Mode: PinModeUARTRX}) - uart.tx.Configure(PinConfig{Mode: PinModeUARTTX}) + uart.rx.Configure(PinConfig{Mode: pinModeUARTRX}) + uart.tx.Configure(PinConfig{Mode: pinModeUARTTX}) // configure the mux input selector uart.muxRX.connect() diff --git a/src/machine/machine_rp2040_adc.go b/src/machine/machine_rp2040_adc.go index 38ba4cf87..b0ce129b6 100644 --- a/src/machine/machine_rp2040_adc.go +++ b/src/machine/machine_rp2040_adc.go @@ -85,7 +85,7 @@ func (c ADCChannel) Configure(config ADCConfig) error { if err != nil { return err } - p.Configure(PinConfig{Mode: PinAnalog}) + p.Configure(PinConfig{Mode: pinAnalog}) return nil } diff --git a/src/machine/machine_rp2040_gpio.go b/src/machine/machine_rp2040_gpio.go index e60f2c3ae..cecf07542 100644 --- a/src/machine/machine_rp2040_gpio.go +++ b/src/machine/machine_rp2040_gpio.go @@ -81,11 +81,13 @@ const ( PinInput PinInputPulldown PinInputPullup - PinAnalog - PinUART - PinPWM - PinI2C - PinSPI + + // internal pin modes + pinAnalog + pinUART + pinPWM + pinI2C + pinSPI ) func (p Pin) PortMaskSet() (*uint32, uint32) { @@ -188,20 +190,20 @@ func (p Pin) Configure(config PinConfig) { case PinInputPullup: p.setFunc(fnSIO) p.pullup() - case PinAnalog: + case pinAnalog: p.setFunc(fnNULL) p.pulloff() - case PinUART: + case pinUART: p.setFunc(fnUART) - case PinPWM: + case pinPWM: p.setFunc(fnPWM) - case PinI2C: + case pinI2C: // IO config according to 4.3.1.3 of rp2040 datasheet. p.setFunc(fnI2C) p.pullup() p.setSchmitt(true) p.setSlew(false) - case PinSPI: + case pinSPI: p.setFunc(fnSPI) } } diff --git a/src/machine/machine_rp2040_i2c.go b/src/machine/machine_rp2040_i2c.go index 3e75e7e68..24db9d660 100644 --- a/src/machine/machine_rp2040_i2c.go +++ b/src/machine/machine_rp2040_i2c.go @@ -105,8 +105,8 @@ func (i2c *I2C) Configure(config I2CConfig) error { if config.Frequency == 0 { config.Frequency = defaultBaud } - config.SDA.Configure(PinConfig{PinI2C}) - config.SCL.Configure(PinConfig{PinI2C}) + config.SDA.Configure(PinConfig{pinI2C}) + config.SCL.Configure(PinConfig{pinI2C}) return i2c.init(config) } diff --git a/src/machine/machine_rp2040_pwm.go b/src/machine/machine_rp2040_pwm.go index 330968a6a..c459a2476 100644 --- a/src/machine/machine_rp2040_pwm.go +++ b/src/machine/machine_rp2040_pwm.go @@ -92,7 +92,7 @@ func (pwm *pwmGroup) Channel(pin Pin) (channel uint8, err error) { if pin > maxPWMPins || pwmGPIOToSlice(pin) != pwm.peripheral() { return 3, ErrInvalidOutputPin } - pin.Configure(PinConfig{PinPWM}) + pin.Configure(PinConfig{pinPWM}) return pwmGPIOToChannel(pin), nil } diff --git a/src/machine/machine_rp2040_uart.go b/src/machine/machine_rp2040_uart.go index 7dd822cf9..1d0468c9b 100644 --- a/src/machine/machine_rp2040_uart.go +++ b/src/machine/machine_rp2040_uart.go @@ -42,8 +42,8 @@ func (uart *UART) Configure(config UARTConfig) error { rp.UART0_UARTCR_TXE) // set GPIO mux to UART for the pins - config.TX.Configure(PinConfig{Mode: PinUART}) - config.RX.Configure(PinConfig{Mode: PinUART}) + config.TX.Configure(PinConfig{Mode: pinUART}) + config.RX.Configure(PinConfig{Mode: pinUART}) // Enable RX IRQ. uart.Interrupt.SetPriority(0x80) diff --git a/src/machine/machine_stm32_adc_f1.go b/src/machine/machine_stm32_adc_f1.go index fb0cee669..03ae0bcb6 100644 --- a/src/machine/machine_stm32_adc_f1.go +++ b/src/machine/machine_stm32_adc_f1.go @@ -41,7 +41,7 @@ func InitADC() { // Configure configures an ADC pin to be able to read analog data. func (a ADC) Configure(ADCConfig) { - a.Pin.Configure(PinConfig{Mode: PinInputModeAnalog}) + a.Pin.Configure(PinConfig{Mode: pinInputModeAnalog}) // set sample time ch := a.getChannel() diff --git a/src/machine/machine_stm32_adc_f4.go b/src/machine/machine_stm32_adc_f4.go index 4f0b8d11b..2e384b413 100644 --- a/src/machine/machine_stm32_adc_f4.go +++ b/src/machine/machine_stm32_adc_f4.go @@ -36,7 +36,7 @@ func InitADC() { // Configure configures an ADC pin to be able to read analog data. func (a ADC) Configure(ADCConfig) { - a.Pin.ConfigureAltFunc(PinConfig{Mode: PinInputAnalog}, 0) + a.Pin.ConfigureAltFunc(PinConfig{Mode: pinInputAnalog}, 0) // set sample time ch := a.getChannel() diff --git a/src/machine/machine_stm32_i2c_revb.go b/src/machine/machine_stm32_i2c_revb.go index 449c28099..90824d8f6 100644 --- a/src/machine/machine_stm32_i2c_revb.go +++ b/src/machine/machine_stm32_i2c_revb.go @@ -102,8 +102,8 @@ func (i2c *I2C) Tx(addr uint16, w, r []byte) error { } func (i2c *I2C) configurePins(config I2CConfig) { - config.SCL.ConfigureAltFunc(PinConfig{Mode: PinModeI2CSCL}, i2c.AltFuncSelector) - config.SDA.ConfigureAltFunc(PinConfig{Mode: PinModeI2CSDA}, i2c.AltFuncSelector) + config.SCL.ConfigureAltFunc(PinConfig{Mode: pinModeI2CSCL}, i2c.AltFuncSelector) + config.SDA.ConfigureAltFunc(PinConfig{Mode: pinModeI2CSDA}, i2c.AltFuncSelector) } func (i2c *I2C) controllerTransmit(addr uint16, w []byte) error { diff --git a/src/machine/machine_stm32_moder_gpio.go b/src/machine/machine_stm32_moder_gpio.go index c1439eb5a..3369a40d5 100644 --- a/src/machine/machine_stm32_moder_gpio.go +++ b/src/machine/machine_stm32_moder_gpio.go @@ -14,29 +14,28 @@ import ( const ( // Mode Flag PinOutput PinMode = 0 - PinInput PinMode = PinInputFloating - PinInputFloating PinMode = 1 + PinInput PinMode = 1 PinInputPulldown PinMode = 2 PinInputPullup PinMode = 3 // for UART - PinModeUARTTX PinMode = 4 - PinModeUARTRX PinMode = 5 + pinModeUARTTX PinMode = 4 + pinModeUARTRX PinMode = 5 // for I2C - PinModeI2CSCL PinMode = 6 - PinModeI2CSDA PinMode = 7 + pinModeI2CSCL PinMode = 6 + pinModeI2CSDA PinMode = 7 // for SPI - PinModeSPICLK PinMode = 8 - PinModeSPISDO PinMode = 9 - PinModeSPISDI PinMode = 10 + pinModeSPICLK PinMode = 8 + pinModeSPISDO PinMode = 9 + pinModeSPISDI PinMode = 10 // for analog/ADC - PinInputAnalog PinMode = 11 + pinInputAnalog PinMode = 11 // for PWM - PinModePWMOutput PinMode = 12 + pinModePWMOutput PinMode = 12 ) // Define several bitfields that have different names across chip families but @@ -83,7 +82,7 @@ func (p Pin) ConfigureAltFunc(config PinConfig, altFunc uint8) { switch config.Mode { // GPIO - case PinInputFloating: + case PinInput: port.MODER.ReplaceBits(gpioModeInput, gpioModeMask, pos) port.PUPDR.ReplaceBits(gpioPullFloating, gpioPullMask, pos) case PinInputPulldown: @@ -97,24 +96,24 @@ func (p Pin) ConfigureAltFunc(config PinConfig, altFunc uint8) { port.OSPEEDR.ReplaceBits(gpioOutputSpeedHigh, gpioOutputSpeedMask, pos) // UART - case PinModeUARTTX: + case pinModeUARTTX: port.MODER.ReplaceBits(gpioModeAlternate, gpioModeMask, pos) port.OSPEEDR.ReplaceBits(gpioOutputSpeedHigh, gpioOutputSpeedMask, pos) port.PUPDR.ReplaceBits(gpioPullUp, gpioPullMask, pos) p.SetAltFunc(altFunc) - case PinModeUARTRX: + case pinModeUARTRX: port.MODER.ReplaceBits(gpioModeAlternate, gpioModeMask, pos) port.PUPDR.ReplaceBits(gpioPullFloating, gpioPullMask, pos) p.SetAltFunc(altFunc) // I2C - case PinModeI2CSCL: + case pinModeI2CSCL: port.MODER.ReplaceBits(gpioModeAlternate, gpioModeMask, pos) port.OTYPER.ReplaceBits(stm32.GPIO_OTYPER_OT0_OpenDrain, stm32.GPIO_OTYPER_OT0_Msk, pos/2) port.OSPEEDR.ReplaceBits(gpioOutputSpeedLow, gpioOutputSpeedMask, pos) port.PUPDR.ReplaceBits(gpioPullUp, gpioPullMask, pos) p.SetAltFunc(altFunc) - case PinModeI2CSDA: + case pinModeI2CSDA: port.MODER.ReplaceBits(gpioModeAlternate, gpioModeMask, pos) port.OTYPER.ReplaceBits(stm32.GPIO_OTYPER_OT0_OpenDrain, stm32.GPIO_OTYPER_OT0_Msk, pos/2) port.OSPEEDR.ReplaceBits(gpioOutputSpeedLow, gpioOutputSpeedMask, pos) @@ -122,31 +121,31 @@ func (p Pin) ConfigureAltFunc(config PinConfig, altFunc uint8) { p.SetAltFunc(altFunc) // SPI - case PinModeSPICLK: + case pinModeSPICLK: port.MODER.ReplaceBits(gpioModeAlternate, gpioModeMask, pos) port.OSPEEDR.ReplaceBits(gpioOutputSpeedHigh, gpioOutputSpeedMask, pos) port.PUPDR.ReplaceBits(gpioPullFloating, gpioPullMask, pos) p.SetAltFunc(altFunc) - case PinModeSPISDO: + case pinModeSPISDO: port.MODER.ReplaceBits(gpioModeAlternate, gpioModeMask, pos) port.OSPEEDR.ReplaceBits(gpioOutputSpeedLow, gpioOutputSpeedMask, pos) port.PUPDR.ReplaceBits(gpioPullFloating, gpioPullMask, pos) p.SetAltFunc(altFunc) - case PinModeSPISDI: + case pinModeSPISDI: port.MODER.ReplaceBits(gpioModeAlternate, gpioModeMask, pos) port.OSPEEDR.ReplaceBits(gpioOutputSpeedLow, gpioOutputSpeedMask, pos) port.PUPDR.ReplaceBits(gpioPullFloating, gpioPullMask, pos) p.SetAltFunc(altFunc) // PWM - case PinModePWMOutput: + case pinModePWMOutput: port.MODER.ReplaceBits(gpioModeAlternate, gpioModeMask, pos) port.OSPEEDR.ReplaceBits(gpioOutputSpeedHigh, gpioOutputSpeedMask, pos) port.PUPDR.ReplaceBits(gpioPullFloating, gpioPullMask, pos) p.SetAltFunc(altFunc) // ADC - case PinInputAnalog: + case pinInputAnalog: port.MODER.ReplaceBits(gpioModeAnalog, gpioModeMask, pos) } } diff --git a/src/machine/machine_stm32_tim.go b/src/machine/machine_stm32_tim.go index 4f607d036..aa4a51f7c 100644 --- a/src/machine/machine_stm32_tim.go +++ b/src/machine/machine_stm32_tim.go @@ -183,7 +183,7 @@ func (t *TIM) Channel(pin Pin) (uint8, error) { for _, p := range ch.Pins { if p.Pin == pin { t.configurePin(uint8(chi), p) - //p.Pin.ConfigureAltFunc(PinConfig{Mode: PinModePWMOutput}, p.AltFunc) + //p.Pin.ConfigureAltFunc(PinConfig{Mode: pinModePWMOutput}, p.AltFunc) return uint8(chi), nil } } diff --git a/src/machine/machine_stm32_tim_moder.go b/src/machine/machine_stm32_tim_moder.go index e868469f4..66d9bdebf 100644 --- a/src/machine/machine_stm32_tim_moder.go +++ b/src/machine/machine_stm32_tim_moder.go @@ -7,5 +7,5 @@ package machine // register (most MCUs except STM32F1 series). func (t *TIM) configurePin(channel uint8, pf PinFunction) { - pf.Pin.ConfigureAltFunc(PinConfig{Mode: PinModePWMOutput}, pf.AltFunc) + pf.Pin.ConfigureAltFunc(PinConfig{Mode: pinModePWMOutput}, pf.AltFunc) } diff --git a/src/machine/machine_stm32f103.go b/src/machine/machine_stm32f103.go index 4c6778023..24c1f0c93 100644 --- a/src/machine/machine_stm32f103.go +++ b/src/machine/machine_stm32f103.go @@ -29,20 +29,20 @@ const ( PinOutput50MHz PinMode = 3 // Output mode, max speed 50MHz PinOutput PinMode = PinOutput2MHz - PinInputModeAnalog PinMode = 0 // Input analog mode - PinInputModeFloating PinMode = 4 // Input floating mode - PinInputModePullUpDown PinMode = 8 // Input pull up/down mode - PinInputModeReserved PinMode = 12 // Input mode (reserved) + pinInputModeAnalog PinMode = 0 // Input analog mode + pinInputModeFloating PinMode = 4 // Input floating mode + pinInputModePullUpDown PinMode = 8 // Input pull up/down mode + pinInputModeReserved PinMode = 12 // Input mode (reserved) - PinOutputModeGPPushPull PinMode = 0 // Output mode general purpose push/pull - PinOutputModeGPOpenDrain PinMode = 4 // Output mode general purpose open drain - PinOutputModeAltPushPull PinMode = 8 // Output mode alt. purpose push/pull - PinOutputModeAltOpenDrain PinMode = 12 // Output mode alt. purpose open drain + pinOutputModeGPPushPull PinMode = 0 // Output mode general purpose push/pull + pinOutputModeGPOpenDrain PinMode = 4 // Output mode general purpose open drain + pinOutputModeAltPushPull PinMode = 8 // Output mode alt. purpose push/pull + pinOutputModeAltOpenDrain PinMode = 12 // Output mode alt. purpose open drain // Pull-up vs Pull down is not part of the CNF0 / CNF1 bits, but is // controlled by PxODR. Encoded using the 'spare' bit 5. - PinInputPulldown PinMode = PinInputModePullUpDown - PinInputPullup PinMode = PinInputModePullUpDown | 0x10 + PinInputPulldown PinMode = pinInputModePullUpDown + PinInputPullup PinMode = pinInputModePullUpDown | 0x10 ) // Pin constants for all stm32f103 package sizes @@ -166,7 +166,7 @@ func (p Pin) Configure(config PinConfig) { // If configured for input pull-up or pull-down, set ODR // for desired pull-up or pull-down. - if (config.Mode & 0xf) == PinInputModePullUpDown { + if (config.Mode & 0xf) == pinInputModePullUpDown { var pullup uint32 if config.Mode == PinInputPullup { pullup = 1 @@ -290,8 +290,8 @@ func (uart *UART) configurePins(config UARTConfig) { default: // use standard TX/RX pins PA9 and PA10 } - config.TX.Configure(PinConfig{Mode: PinOutput50MHz + PinOutputModeAltPushPull}) - config.RX.Configure(PinConfig{Mode: PinInputModeFloating}) + config.TX.Configure(PinConfig{Mode: PinOutput50MHz + pinOutputModeAltPushPull}) + config.RX.Configure(PinConfig{Mode: pinInputModeFloating}) } // Determine the divisor for USARTs to get the given baudrate @@ -363,9 +363,9 @@ func (spi SPI) getBaudRate(config SPIConfig) uint32 { // Configure SPI pins for input output and clock func (spi SPI) configurePins(config SPIConfig) { - config.SCK.Configure(PinConfig{Mode: PinOutput50MHz + PinOutputModeAltPushPull}) - config.SDO.Configure(PinConfig{Mode: PinOutput50MHz + PinOutputModeAltPushPull}) - config.SDI.Configure(PinConfig{Mode: PinInputModeFloating}) + config.SCK.Configure(PinConfig{Mode: PinOutput50MHz + pinOutputModeAltPushPull}) + config.SDO.Configure(PinConfig{Mode: PinOutput50MHz + pinOutputModeAltPushPull}) + config.SDI.Configure(PinConfig{Mode: pinInputModeFloating}) } //---------- I2C related types and code @@ -390,8 +390,8 @@ func (i2c *I2C) configurePins(config I2CConfig) { stm32.AFIO.MAPR.SetBits(stm32.AFIO_MAPR_I2C1_REMAP) } - config.SDA.Configure(PinConfig{Mode: PinOutput50MHz + PinOutputModeAltOpenDrain}) - config.SCL.Configure(PinConfig{Mode: PinOutput50MHz + PinOutputModeAltOpenDrain}) + config.SDA.Configure(PinConfig{Mode: PinOutput50MHz + pinOutputModeAltOpenDrain}) + config.SCL.Configure(PinConfig{Mode: PinOutput50MHz + pinOutputModeAltOpenDrain}) } func (i2c *I2C) getFreqRange(config I2CConfig) uint32 { @@ -717,7 +717,7 @@ func (t *TIM) configurePin(channel uint8, pf PinFunction) { stm32.AFIO.MAPR.ReplaceBits(remap<