humpback-dds/src/lib.rs

85 lines
1.5 KiB
Rust
Raw Normal View History

2020-08-10 17:04:40 +08:00
#![no_std]
2020-08-11 00:07:07 +08:00
extern crate embedded_hal;
2020-08-31 11:36:05 +08:00
use embedded_hal::{
digital::v2::OutputPin,
blocking::spi::Transfer,
};
use core::{
cell,
marker::PhantomData,
};
2020-08-10 18:06:15 +08:00
use cortex_m;
use cortex_m_semihosting::hprintln;
2020-08-13 16:51:08 +08:00
#[macro_use]
pub mod bitmask_macro;
2020-08-10 18:06:15 +08:00
pub mod spi_slave;
2020-08-31 11:36:05 +08:00
// use crate::spi_slave::{
// Parts,
// SPISlave,
// };
2020-08-11 00:07:07 +08:00
2020-08-31 09:31:56 +08:00
pub mod cpld;
2020-08-31 11:36:05 +08:00
use crate::cpld::CPLD;
2020-08-31 09:31:56 +08:00
2020-08-11 16:51:17 +08:00
pub mod config_register;
2020-08-31 11:36:05 +08:00
use crate::config_register::ConfigRegister;
2020-08-11 00:07:07 +08:00
pub mod attenuator;
2020-08-31 11:36:05 +08:00
use crate::attenuator::Attenuator;
2020-08-17 12:15:11 +08:00
pub mod dds;
2020-08-31 11:36:05 +08:00
use crate::dds::DDS;
pub mod scpi;
2020-08-13 16:51:08 +08:00
2020-08-10 18:06:15 +08:00
/*
* Enum for structuring error
*/
#[derive(Debug)]
pub enum Error<E> {
SPI(E),
CSError,
GetRefMutDataError,
2020-08-11 11:29:47 +08:00
AttenuatorError,
2020-08-24 17:03:44 +08:00
IOUpdateError,
2020-08-26 13:18:50 +08:00
DDSError,
2020-08-10 18:06:15 +08:00
}
2020-08-31 11:36:05 +08:00
/*
* Struct for Urukul master device
*/
pub struct Urukul<SPI> {
config_register: ConfigRegister<SPI>,
attenuator: Attenuator<SPI>,
dds: [DDS<SPI>; 4],
}
impl<SPI, E> Urukul<SPI>
where
SPI: Transfer<u8, Error = E>,
{
/*
* Master constructor for the entire Urukul device
*/
pub fn new(spi1: SPI, spi2: SPI, spi3: SPI, spi4: SPI, spi5: SPI, spi6: SPI, spi7: SPI, f_ref_clks: [u64; 4]) -> Self {
// Construct cpld and get parts
// let switch = CPLD::new(spi, chip_select, io_update);
// let parts = switch.split();
// Construct Urukul
Urukul {
config_register: ConfigRegister::new(spi1),
attenuator: Attenuator::new(spi2),
dds: [
DDS::new(spi4, f_ref_clks[1]),
DDS::new(spi5, f_ref_clks[1]),
DDS::new(spi6, f_ref_clks[2]),
DDS::new(spi7, f_ref_clks[3]),
],
// _phantom: PhantomData,
}
}
}