pounder io extender: hack around some bug
This commit is contained in:
parent
79f8838104
commit
94f60c100c
|
@ -17,6 +17,7 @@ use rf_power::PowerMeasurementInterface;
|
||||||
|
|
||||||
use embedded_hal::{adc::OneShot, blocking::spi::Transfer};
|
use embedded_hal::{adc::OneShot, blocking::spi::Transfer};
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
const EXT_CLK_SEL_PIN: u8 = 8 + 7;
|
const EXT_CLK_SEL_PIN: u8 = 8 + 7;
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
const OSC_EN_N_PIN: u8 = 8 + 6;
|
const OSC_EN_N_PIN: u8 = 8 + 6;
|
||||||
|
@ -300,16 +301,16 @@ impl PounderDevices {
|
||||||
adc2_in_p,
|
adc2_in_p,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Configure power-on-default state for pounder. All LEDs are on, on-board oscillator
|
// Configure power-on-default state for pounder. All LEDs are off, on-board oscillator
|
||||||
// selected, attenuators out of reset. Note that testing indicates the output state needs to
|
// selected and enabled, attenuators out of reset. Note that testing indicates the
|
||||||
// be set first to properly update the output registers.
|
// output state needs to be set first to properly update the output registers.
|
||||||
devices
|
devices
|
||||||
.mcp23017
|
.mcp23017
|
||||||
.all_pin_mode(mcp23017::PinMode::OUTPUT)
|
.all_pin_mode(mcp23017::PinMode::OUTPUT)
|
||||||
.map_err(|_| Error::I2c)?;
|
.map_err(|_| Error::I2c)?;
|
||||||
devices
|
devices
|
||||||
.mcp23017
|
.mcp23017
|
||||||
.write_gpio(mcp23017::Port::GPIOA, 0x3F)
|
.write_gpio(mcp23017::Port::GPIOA, 0x00)
|
||||||
.map_err(|_| Error::I2c)?;
|
.map_err(|_| Error::I2c)?;
|
||||||
devices
|
devices
|
||||||
.mcp23017
|
.mcp23017
|
||||||
|
@ -324,12 +325,11 @@ impl AttenuatorInterface for PounderDevices {
|
||||||
/// Reset all of the attenuators to a power-on default state.
|
/// Reset all of the attenuators to a power-on default state.
|
||||||
fn reset_attenuators(&mut self) -> Result<(), Error> {
|
fn reset_attenuators(&mut self) -> Result<(), Error> {
|
||||||
self.mcp23017
|
self.mcp23017
|
||||||
.digital_write(ATT_RST_N_PIN, false)
|
.write_gpio(mcp23017::Port::GPIOB, 0x0f)
|
||||||
.map_err(|_| Error::I2c)?;
|
.map_err(|_| Error::I2c)?;
|
||||||
// TODO: Measure the I2C transaction speed to the RST pin to ensure that the delay is
|
// Duration of one I2C transaction is sufficiently long.
|
||||||
// sufficient. Document the delay here.
|
|
||||||
self.mcp23017
|
self.mcp23017
|
||||||
.digital_write(ATT_RST_N_PIN, true)
|
.write_gpio(mcp23017::Port::GPIOB, 0x2f)
|
||||||
.map_err(|_| Error::I2c)?;
|
.map_err(|_| Error::I2c)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -341,21 +341,17 @@ impl AttenuatorInterface for PounderDevices {
|
||||||
/// * `channel` - The attenuator channel to latch.
|
/// * `channel` - The attenuator channel to latch.
|
||||||
fn latch_attenuator(&mut self, channel: Channel) -> Result<(), Error> {
|
fn latch_attenuator(&mut self, channel: Channel) -> Result<(), Error> {
|
||||||
let pin = match channel {
|
let pin = match channel {
|
||||||
Channel::In0 => ATT_LE0_PIN,
|
Channel::In0 => 0,
|
||||||
Channel::In1 => ATT_LE2_PIN,
|
Channel::Out0 => 1,
|
||||||
Channel::Out0 => ATT_LE1_PIN,
|
Channel::In1 => 2,
|
||||||
Channel::Out1 => ATT_LE3_PIN,
|
Channel::Out1 => 3,
|
||||||
};
|
};
|
||||||
self.mcp23017
|
self.mcp23017
|
||||||
.digital_write(pin, false)
|
.write_gpio(mcp23017::Port::GPIOB, 0x2f & !(1 << pin))
|
||||||
.map_err(|_| Error::I2c)?;
|
.map_err(|_| Error::I2c)?;
|
||||||
|
// Duration of one I2C transaction is sufficiently long.
|
||||||
self.mcp23017
|
self.mcp23017
|
||||||
.digital_write(pin, false)
|
.write_gpio(mcp23017::Port::GPIOB, 0x2f)
|
||||||
.map_err(|_| Error::I2c)?;
|
|
||||||
// TODO: Measure the I2C transaction speed to the RST pin to ensure that the delay is
|
|
||||||
// sufficient. Document the delay here.
|
|
||||||
self.mcp23017
|
|
||||||
.digital_write(pin, true)
|
|
||||||
.map_err(|_| Error::I2c)?;
|
.map_err(|_| Error::I2c)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue