Merge #412
412: Updating IO expander to be configured before AD9959 r=jordens a=ryan-summers This PR fixes #411 by refactoring the code to initialize the IO expander before the AD9959. It was discovered that the oscillator to the AD9959 may not be enabled due to a floating MOSFET gate. This was causing register configs to fail. The fix configures the IO expander first to ensure that the OSC_ENn signal is de-asserted to enable the AD9959 oscillator. Co-authored-by: Ryan Summers <ryan.summers@vertigo-designs.com>
This commit is contained in:
commit
37fa1a0465
@ -769,78 +769,6 @@ pub fn setup(
|
|||||||
delay.delay_ms(2u8);
|
delay.delay_ms(2u8);
|
||||||
let pounder = if pounder_pgood.is_high().unwrap() {
|
let pounder = if pounder_pgood.is_high().unwrap() {
|
||||||
log::info!("Found Pounder");
|
log::info!("Found Pounder");
|
||||||
let ad9959 = {
|
|
||||||
let qspi_interface = {
|
|
||||||
// Instantiate the QUADSPI pins and peripheral interface.
|
|
||||||
let qspi_pins = {
|
|
||||||
let _qspi_ncs = gpioc
|
|
||||||
.pc11
|
|
||||||
.into_alternate_af9()
|
|
||||||
.set_speed(hal::gpio::Speed::VeryHigh);
|
|
||||||
|
|
||||||
let clk = gpiob
|
|
||||||
.pb2
|
|
||||||
.into_alternate_af9()
|
|
||||||
.set_speed(hal::gpio::Speed::VeryHigh);
|
|
||||||
let io0 = gpioe
|
|
||||||
.pe7
|
|
||||||
.into_alternate_af10()
|
|
||||||
.set_speed(hal::gpio::Speed::VeryHigh);
|
|
||||||
let io1 = gpioe
|
|
||||||
.pe8
|
|
||||||
.into_alternate_af10()
|
|
||||||
.set_speed(hal::gpio::Speed::VeryHigh);
|
|
||||||
let io2 = gpioe
|
|
||||||
.pe9
|
|
||||||
.into_alternate_af10()
|
|
||||||
.set_speed(hal::gpio::Speed::VeryHigh);
|
|
||||||
let io3 = gpioe
|
|
||||||
.pe10
|
|
||||||
.into_alternate_af10()
|
|
||||||
.set_speed(hal::gpio::Speed::VeryHigh);
|
|
||||||
|
|
||||||
(clk, io0, io1, io2, io3)
|
|
||||||
};
|
|
||||||
|
|
||||||
let qspi = hal::qspi::Qspi::bank2(
|
|
||||||
device.QUADSPI,
|
|
||||||
qspi_pins,
|
|
||||||
design_parameters::POUNDER_QSPI_FREQUENCY,
|
|
||||||
&ccdr.clocks,
|
|
||||||
ccdr.peripheral.QSPI,
|
|
||||||
);
|
|
||||||
|
|
||||||
pounder::QspiInterface::new(qspi).unwrap()
|
|
||||||
};
|
|
||||||
|
|
||||||
#[cfg(feature = "pounder_v1_1")]
|
|
||||||
let reset_pin = gpiog.pg6.into_push_pull_output();
|
|
||||||
#[cfg(not(feature = "pounder_v1_1"))]
|
|
||||||
let reset_pin = gpioa.pa0.into_push_pull_output();
|
|
||||||
|
|
||||||
let mut io_update = gpiog.pg7.into_push_pull_output();
|
|
||||||
|
|
||||||
let ref_clk: hal::time::Hertz =
|
|
||||||
design_parameters::DDS_REF_CLK.into();
|
|
||||||
|
|
||||||
let mut ad9959 = ad9959::Ad9959::new(
|
|
||||||
qspi_interface,
|
|
||||||
reset_pin,
|
|
||||||
&mut io_update,
|
|
||||||
&mut delay,
|
|
||||||
ad9959::Mode::FourBitSerial,
|
|
||||||
ref_clk.0 as f32,
|
|
||||||
design_parameters::DDS_MULTIPLIER,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
ad9959.self_test().unwrap();
|
|
||||||
|
|
||||||
// Return IO_Update
|
|
||||||
gpiog.pg7 = io_update.into_analog();
|
|
||||||
|
|
||||||
ad9959
|
|
||||||
};
|
|
||||||
|
|
||||||
let io_expander = {
|
let io_expander = {
|
||||||
let sda = gpiob.pb7.into_alternate_af4().set_open_drain();
|
let sda = gpiob.pb7.into_alternate_af4().set_open_drain();
|
||||||
@ -919,6 +847,79 @@ pub fn setup(
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
let ad9959 = {
|
||||||
|
let qspi_interface = {
|
||||||
|
// Instantiate the QUADSPI pins and peripheral interface.
|
||||||
|
let qspi_pins = {
|
||||||
|
let _qspi_ncs = gpioc
|
||||||
|
.pc11
|
||||||
|
.into_alternate_af9()
|
||||||
|
.set_speed(hal::gpio::Speed::VeryHigh);
|
||||||
|
|
||||||
|
let clk = gpiob
|
||||||
|
.pb2
|
||||||
|
.into_alternate_af9()
|
||||||
|
.set_speed(hal::gpio::Speed::VeryHigh);
|
||||||
|
let io0 = gpioe
|
||||||
|
.pe7
|
||||||
|
.into_alternate_af10()
|
||||||
|
.set_speed(hal::gpio::Speed::VeryHigh);
|
||||||
|
let io1 = gpioe
|
||||||
|
.pe8
|
||||||
|
.into_alternate_af10()
|
||||||
|
.set_speed(hal::gpio::Speed::VeryHigh);
|
||||||
|
let io2 = gpioe
|
||||||
|
.pe9
|
||||||
|
.into_alternate_af10()
|
||||||
|
.set_speed(hal::gpio::Speed::VeryHigh);
|
||||||
|
let io3 = gpioe
|
||||||
|
.pe10
|
||||||
|
.into_alternate_af10()
|
||||||
|
.set_speed(hal::gpio::Speed::VeryHigh);
|
||||||
|
|
||||||
|
(clk, io0, io1, io2, io3)
|
||||||
|
};
|
||||||
|
|
||||||
|
let qspi = hal::qspi::Qspi::bank2(
|
||||||
|
device.QUADSPI,
|
||||||
|
qspi_pins,
|
||||||
|
design_parameters::POUNDER_QSPI_FREQUENCY,
|
||||||
|
&ccdr.clocks,
|
||||||
|
ccdr.peripheral.QSPI,
|
||||||
|
);
|
||||||
|
|
||||||
|
pounder::QspiInterface::new(qspi).unwrap()
|
||||||
|
};
|
||||||
|
|
||||||
|
#[cfg(feature = "pounder_v1_1")]
|
||||||
|
let reset_pin = gpiog.pg6.into_push_pull_output();
|
||||||
|
#[cfg(not(feature = "pounder_v1_1"))]
|
||||||
|
let reset_pin = gpioa.pa0.into_push_pull_output();
|
||||||
|
|
||||||
|
let mut io_update = gpiog.pg7.into_push_pull_output();
|
||||||
|
|
||||||
|
let ref_clk: hal::time::Hertz =
|
||||||
|
design_parameters::DDS_REF_CLK.into();
|
||||||
|
|
||||||
|
let mut ad9959 = ad9959::Ad9959::new(
|
||||||
|
qspi_interface,
|
||||||
|
reset_pin,
|
||||||
|
&mut io_update,
|
||||||
|
&mut delay,
|
||||||
|
ad9959::Mode::FourBitSerial,
|
||||||
|
ref_clk.0 as f32,
|
||||||
|
design_parameters::DDS_MULTIPLIER,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
ad9959.self_test().unwrap();
|
||||||
|
|
||||||
|
// Return IO_Update
|
||||||
|
gpiog.pg7 = io_update.into_analog();
|
||||||
|
|
||||||
|
ad9959
|
||||||
|
};
|
||||||
|
|
||||||
let dds_output = {
|
let dds_output = {
|
||||||
let io_update_trigger = {
|
let io_update_trigger = {
|
||||||
let _io_update = gpiog
|
let _io_update = gpiog
|
||||||
|
Loading…
Reference in New Issue
Block a user