Allowing pounder to not be present
This commit is contained in:
parent
a3f5dbeae7
commit
c6859d956e
110
src/main.rs
110
src/main.rs
|
@ -180,7 +180,7 @@ const APP: () = {
|
||||||
eth_mac: ethernet::EthernetMAC,
|
eth_mac: ethernet::EthernetMAC,
|
||||||
mac_addr: net::wire::EthernetAddress,
|
mac_addr: net::wire::EthernetAddress,
|
||||||
|
|
||||||
pounder: pounder::PounderDevices<asm_delay::AsmDelay>,
|
pounder: Option<pounder::PounderDevices<asm_delay::AsmDelay>>,
|
||||||
|
|
||||||
#[init([[0.; 5]; 2])]
|
#[init([[0.; 5]; 2])]
|
||||||
iir_state: [iir::IIRState; 2],
|
iir_state: [iir::IIRState; 2],
|
||||||
|
@ -376,7 +376,18 @@ const APP: () = {
|
||||||
fp_led_2.set_low().unwrap();
|
fp_led_2.set_low().unwrap();
|
||||||
fp_led_3.set_low().unwrap();
|
fp_led_3.set_low().unwrap();
|
||||||
|
|
||||||
let pounder_devices = {
|
// Attempt to instantiate the I2C GPIO expander on pounder.
|
||||||
|
let pounder_gpio_expander = {
|
||||||
|
let sda = gpiob.pb7.into_alternate_af4().set_open_drain();
|
||||||
|
let scl = gpiob.pb8.into_alternate_af4().set_open_drain();
|
||||||
|
let i2c1 = dp.I2C1.i2c((scl, sda), 100.khz(), &clocks);
|
||||||
|
mcp23017::MCP23017::default(i2c1)
|
||||||
|
};
|
||||||
|
|
||||||
|
// If instantiating the GPIO expander was successful, we were able to communicate with the
|
||||||
|
// IO expander and pounder is available. If the GPIO expander did not communicate with I2C,
|
||||||
|
// we will assume that pounder is not available.
|
||||||
|
let pounder_devices = if let Ok(io_expander) = pounder_gpio_expander {
|
||||||
let ad9959 = {
|
let ad9959 = {
|
||||||
let qspi_interface = {
|
let qspi_interface = {
|
||||||
// Instantiate the QUADSPI pins and peripheral interface.
|
// Instantiate the QUADSPI pins and peripheral interface.
|
||||||
|
@ -435,13 +446,6 @@ const APP: () = {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
let io_expander = {
|
|
||||||
let sda = gpiob.pb7.into_alternate_af4().set_open_drain();
|
|
||||||
let scl = gpiob.pb8.into_alternate_af4().set_open_drain();
|
|
||||||
let i2c1 = dp.I2C1.i2c((scl, sda), 100.khz(), &clocks);
|
|
||||||
mcp23017::MCP23017::default(i2c1).unwrap()
|
|
||||||
};
|
|
||||||
|
|
||||||
let spi = {
|
let spi = {
|
||||||
let spi_mosi = gpiod
|
let spi_mosi = gpiod
|
||||||
.pd7
|
.pd7
|
||||||
|
@ -489,16 +493,20 @@ const APP: () = {
|
||||||
let adc1_in_p = gpiof.pf11.into_analog();
|
let adc1_in_p = gpiof.pf11.into_analog();
|
||||||
let adc2_in_p = gpiof.pf14.into_analog();
|
let adc2_in_p = gpiof.pf14.into_analog();
|
||||||
|
|
||||||
pounder::PounderDevices::new(
|
Some(
|
||||||
io_expander,
|
pounder::PounderDevices::new(
|
||||||
ad9959,
|
io_expander,
|
||||||
spi,
|
ad9959,
|
||||||
adc1,
|
spi,
|
||||||
adc2,
|
adc1,
|
||||||
adc1_in_p,
|
adc2,
|
||||||
adc2_in_p,
|
adc1_in_p,
|
||||||
|
adc2_in_p,
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
)
|
)
|
||||||
.unwrap()
|
} else {
|
||||||
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut eeprom_i2c = {
|
let mut eeprom_i2c = {
|
||||||
|
@ -746,23 +754,38 @@ const APP: () = {
|
||||||
"stabilizer/afe1/gain": (|| c.resources.afe1.get_gain()),
|
"stabilizer/afe1/gain": (|| c.resources.afe1.get_gain()),
|
||||||
"stabilizer/afe2/gain": (|| c.resources.afe2.get_gain()),
|
"stabilizer/afe2/gain": (|| c.resources.afe2.get_gain()),
|
||||||
"pounder/in0": (|| {
|
"pounder/in0": (|| {
|
||||||
c.resources.pounder.get_input_channel_state(
|
match c.resources.pounder {
|
||||||
pounder::Channel::In0)
|
Some(pounder) =>
|
||||||
|
pounder.get_input_channel_state(pounder::Channel::In0),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"pounder/in1": (|| {
|
"pounder/in1": (|| {
|
||||||
c.resources.pounder.get_input_channel_state(
|
match c.resources.pounder {
|
||||||
pounder::Channel::In1)
|
Some(pounder) =>
|
||||||
|
pounder.get_input_channel_state(pounder::Channel::In1),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"pounder/out0": (|| {
|
"pounder/out0": (|| {
|
||||||
c.resources.pounder.get_output_channel_state(
|
match c.resources.pounder {
|
||||||
pounder::Channel::Out0)
|
Some(pounder) =>
|
||||||
|
pounder.get_output_channel_state(pounder::Channel::Out0),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"pounder/out1": (|| {
|
"pounder/out1": (|| {
|
||||||
c.resources.pounder.get_output_channel_state(
|
match c.resources.pounder {
|
||||||
pounder::Channel::Out1)
|
Some(pounder) =>
|
||||||
|
pounder.get_output_channel_state(pounder::Channel::Out1),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"pounder/dds/clock": (|| {
|
"pounder/dds/clock": (|| {
|
||||||
c.resources.pounder.get_dds_clock_config()
|
match c.resources.pounder {
|
||||||
|
Some(pounder) => pounder.get_dds_clock_config(),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -790,23 +813,38 @@ const APP: () = {
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
"pounder/in0": pounder::ChannelState, (|state| {
|
"pounder/in0": pounder::ChannelState, (|state| {
|
||||||
c.resources.pounder.set_channel_state(pounder::Channel::In0,
|
match c.resources.pounder {
|
||||||
state)
|
Some(pounder) =>
|
||||||
|
pounder.set_channel_state(pounder::Channel::In0, state),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"pounder/in1": pounder::ChannelState, (|state| {
|
"pounder/in1": pounder::ChannelState, (|state| {
|
||||||
c.resources.pounder.set_channel_state(pounder::Channel::In1,
|
match c.resources.pounder {
|
||||||
state)
|
Some(pounder) =>
|
||||||
|
pounder.set_channel_state(pounder::Channel::In1, state),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"pounder/out0": pounder::ChannelState, (|state| {
|
"pounder/out0": pounder::ChannelState, (|state| {
|
||||||
c.resources.pounder.set_channel_state(pounder::Channel::Out0,
|
match c.resources.pounder {
|
||||||
state)
|
Some(pounder) =>
|
||||||
|
pounder.set_channel_state(pounder::Channel::Out0, state),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"pounder/out1": pounder::ChannelState, (|state| {
|
"pounder/out1": pounder::ChannelState, (|state| {
|
||||||
c.resources.pounder.set_channel_state(pounder::Channel::Out1,
|
match c.resources.pounder {
|
||||||
state)
|
Some(pounder) =>
|
||||||
|
pounder.set_channel_state(pounder::Channel::Out1, state),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"pounder/dds/clock": pounder::DdsClockConfig, (|config| {
|
"pounder/dds/clock": pounder::DdsClockConfig, (|config| {
|
||||||
c.resources.pounder.configure_dds_clock(config)
|
match c.resources.pounder {
|
||||||
|
Some(pounder) => pounder.configure_dds_clock(config),
|
||||||
|
_ => Err(pounder::Error::Access),
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"stabilizer/afe1/gain": afe::Gain, (|gain| {
|
"stabilizer/afe1/gain": afe::Gain, (|gain| {
|
||||||
Ok::<(), ()>(c.resources.afe1.set_gain(gain))
|
Ok::<(), ()>(c.resources.afe1.set_gain(gain))
|
||||||
|
|
|
@ -29,6 +29,7 @@ pub enum Error {
|
||||||
InvalidAddress,
|
InvalidAddress,
|
||||||
InvalidChannel,
|
InvalidChannel,
|
||||||
Adc,
|
Adc,
|
||||||
|
Access,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
|
Loading…
Reference in New Issue