examples improvements
This commit is contained in:
@@ -1 +1,3 @@
|
|||||||
/target
|
/target
|
||||||
|
.zed
|
||||||
|
.gdbinit
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ Two example backends are provided, both based on the LPCXpresso55S28 demo board,
|
|||||||
## LPC55S28 (LPCXpresso55S28)
|
## LPC55S28 (LPCXpresso55S28)
|
||||||
|
|
||||||
These examples work on the
|
These examples work on the
|
||||||
(LPCXpresso55S28)[https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso55s28-development-board:LPC55S28-EVK]
|
[LPCXpresso55S28](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso55s28-development-board:LPC55S28-EVK)
|
||||||
development board. They use the onboard WM8904 codec, so don't require any
|
development board. They use the onboard WM8904 codec, so don't require any
|
||||||
additional hardware for audio I/O.
|
additional hardware for audio I/O.
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,3 @@
|
|||||||
[target.thumbv8m.main-none-eabi]
|
|
||||||
rustflags = [
|
|
||||||
"-C", "link-arg=-Tlink.x",
|
|
||||||
"-C", "link-arg=-Tdefmt.x",
|
|
||||||
"-C", "debug-assertions",
|
|
||||||
]
|
|
||||||
|
|
||||||
[target.thumbv8m.main-none-eabihf]
|
[target.thumbv8m.main-none-eabihf]
|
||||||
rustflags = [
|
rustflags = [
|
||||||
"-C", "link-arg=-Tlink.x",
|
"-C", "link-arg=-Tlink.x",
|
||||||
|
|||||||
@@ -24,9 +24,3 @@ static_cell = "2.1.1"
|
|||||||
lpc55-hal = { git = "https://github.com/ktims/lpc55-hal", branch = "main" }
|
lpc55-hal = { git = "https://github.com/ktims/lpc55-hal", branch = "main" }
|
||||||
usb-device.workspace = true
|
usb-device.workspace = true
|
||||||
usbd-uac2 = { workspace = true, features = ["defmt"] }
|
usbd-uac2 = { workspace = true, features = ["defmt"] }
|
||||||
|
|
||||||
[profile.release]
|
|
||||||
opt-level = "z"
|
|
||||||
lto = true
|
|
||||||
debug = true
|
|
||||||
codegen-units = 1
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ use pac::interrupt;
|
|||||||
use static_cell::StaticCell;
|
use static_cell::StaticCell;
|
||||||
use usb_device::{
|
use usb_device::{
|
||||||
bus::{self},
|
bus::{self},
|
||||||
device::{StringDescriptors, UsbDeviceBuilder, UsbVidPid},
|
device::{StringDescriptors, UsbVidPid},
|
||||||
};
|
};
|
||||||
use usbd_uac2::TerminalConfig;
|
use usbd_uac2::TerminalConfig;
|
||||||
use usbd_uac2::{
|
use usbd_uac2::{
|
||||||
@@ -53,6 +53,12 @@ mod dma;
|
|||||||
mod hw;
|
mod hw;
|
||||||
mod wm8904;
|
mod wm8904;
|
||||||
|
|
||||||
|
// pid.codes test IDs
|
||||||
|
const USB_VID: u16 = 0x1209;
|
||||||
|
const USB_PID: u16 = 0x0001;
|
||||||
|
const USB_MANUFACTURER: &str = "usbd_uac2";
|
||||||
|
const USB_PRODUCT: &str = "DMA example device";
|
||||||
|
|
||||||
const CODEC_I2C_ADDR: u8 = 0b0011010;
|
const CODEC_I2C_ADDR: u8 = 0b0011010;
|
||||||
const MCLK_FREQ: u32 = 12288000;
|
const MCLK_FREQ: u32 = 12288000;
|
||||||
|
|
||||||
@@ -199,6 +205,11 @@ impl<const N: usize, const MAX_SLOT_BYTES: usize, B: bus::UsbBus> AudioHandler<'
|
|||||||
self.running.store(true, Ordering::Relaxed)
|
self.running.store(true, Ordering::Relaxed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fn audio_data_tx(
|
||||||
|
&mut self,
|
||||||
|
_ep: &usb_device::endpoint::Endpoint<'_, B, usb_device::endpoint::In>,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
/// Provide rate feedback to the host. P-only is stable and works fine, with
|
/// Provide rate feedback to the host. P-only is stable and works fine, with
|
||||||
/// most hosts. The host can either filter it internally or treat it
|
/// most hosts. The host can either filter it internally or treat it
|
||||||
@@ -229,7 +240,7 @@ impl<const N: usize, const MAX_SLOT_BYTES: usize, B: bus::UsbBus> AudioHandler<'
|
|||||||
// 0.2% which is a huge clock error
|
// 0.2% which is a huge clock error
|
||||||
let max_allowed_deviation = nominal_v / 500;
|
let max_allowed_deviation = nominal_v / 500;
|
||||||
|
|
||||||
let p_term = -(error_permille * nominal_v) / 256000; // this works reasonably well to keep the buffer
|
let p_term = -(error_permille * nominal_v) / 256000; // this works reasonably well to keep the buffer
|
||||||
let i_term = 0; // placeholder
|
let i_term = 0; // placeholder
|
||||||
|
|
||||||
let mut v = nominal_v + p_term + i_term;
|
let mut v = nominal_v + p_term + i_term;
|
||||||
@@ -379,18 +390,13 @@ fn main() -> ! {
|
|||||||
.with_output_config(TerminalConfig::builder().base_id(2).build());
|
.with_output_config(TerminalConfig::builder().base_id(2).build());
|
||||||
let mut uac2 = config.build(&usb_bus).unwrap();
|
let mut uac2 = config.build(&usb_bus).unwrap();
|
||||||
|
|
||||||
let mut usb_dev = UsbDeviceBuilder::new(&usb_bus, UsbVidPid(0x1209, 0xcc1d))
|
let mut usb_dev = usbd_uac2::builder(&usb_bus, UsbVidPid(USB_VID, USB_PID))
|
||||||
.composite_with_iads()
|
|
||||||
.strings(&[StringDescriptors::default()
|
.strings(&[StringDescriptors::default()
|
||||||
.manufacturer("Generic")
|
.manufacturer(USB_MANUFACTURER)
|
||||||
.product("usbd_uac2 device")
|
.product(USB_PRODUCT)])
|
||||||
.serial_number("123456789")])
|
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.max_packet_size_0(64)
|
.max_packet_size_0(64) // Required to be 64 on HS, allowed on FS
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.device_class(0xef)
|
|
||||||
.device_sub_class(0x02)
|
|
||||||
.device_protocol(0x01)
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
defmt::info!("main loop");
|
defmt::info!("main loop");
|
||||||
|
|||||||
@@ -1,10 +1,3 @@
|
|||||||
[target.thumbv8m.main-none-eabi]
|
|
||||||
rustflags = [
|
|
||||||
"-C", "link-arg=-Tlink.x",
|
|
||||||
"-C", "link-arg=-Tdefmt.x",
|
|
||||||
"-C", "debug-assertions",
|
|
||||||
]
|
|
||||||
|
|
||||||
[target.thumbv8m.main-none-eabihf]
|
[target.thumbv8m.main-none-eabihf]
|
||||||
rustflags = [
|
rustflags = [
|
||||||
"-C", "link-arg=-Tlink.x",
|
"-C", "link-arg=-Tlink.x",
|
||||||
|
|||||||
@@ -23,9 +23,3 @@ panic-probe = { version = "1.0.0", features = ["print-defmt"] }
|
|||||||
lpc55-hal = { git = "https://github.com/ktims/lpc55-hal", branch = "main" }
|
lpc55-hal = { git = "https://github.com/ktims/lpc55-hal", branch = "main" }
|
||||||
usb-device.workspace = true
|
usb-device.workspace = true
|
||||||
usbd-uac2 = { workspace = true, features = ["defmt"] }
|
usbd-uac2 = { workspace = true, features = ["defmt"] }
|
||||||
|
|
||||||
[profile.release]
|
|
||||||
opt-level = "z"
|
|
||||||
lto = true
|
|
||||||
debug = true
|
|
||||||
codegen-units = 1
|
|
||||||
|
|||||||
Reference in New Issue
Block a user