Skip to content

Instantly share code, notes, and snippets.

@eddyb
Forked from Arnold1/main.rs
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eddyb/6b9e478ca03bd4170aa0 to your computer and use it in GitHub Desktop.
Save eddyb/6b9e478ca03bd4170aa0 to your computer and use it in GitHub Desktop.
// from crates.io
//extern crate mmap;
//extern crate libc;
//mod fpga_awg;
//fn main() {
// let mut awg = fpga_awg::fpgaAwg::new();
// let mut params: fpga_awg::awgParam = fpga_awg::awgParam::default();
//let mut data: [i32; fpga_awg::n] = [0; fpga_awg::n];
//awg.syntesize_signal(1.0, 1000.0, &mut data, &mut params);
//awg.write_data_fpga(0, &mut data, &mut params);
//}
// from crates.io
extern crate mmap;
extern crate libc;
mod fpga_awg;
use std::ptr;
use std::fs;
use std::io::{Write, SeekFrom, Seek};
use std::os::unix::prelude::AsRawFd;
use mmap::{MemoryMap, MapOption};
//use libc;
use std::f32;
use std::default::Default;
pub const n: usize = (16*1024);
const c_awg_smpl_freq: f32 = 125e6;
const AWG_BASE_ADDR: isize = 0x200000;
const AWG_CHA_OFFSET: usize = 0x10000;
const AWG_CHB_OFFSET: usize = 0x20000;
fn copyMem(chaMem: &mut [u32; n]) {
for i in 0..n {
chaMem[i] = 0;
}
}
fn main() {
let size: usize = 0x400000; //0x400000;
let mut f = fs::OpenOptions::new().read(true)
.write(true)
.open("/dev/uio0")
.unwrap();
let mmap_opts = &[
// Then make the mapping *public* so it is written back to the file
MapOption::MapNonStandardFlags(libc::MAP_SHARED),
MapOption::MapReadable,
MapOption::MapWritable,
//MapOption::MapOffset(AWG_BASE_ADDR/10),
MapOption::MapFd(f.as_raw_fd()),
];
let mmap = MemoryMap::new(size, mmap_opts).unwrap();
let data = mmap.data();
let awgReg: *mut fpga_awg::awg_reg;
let chaMem: *mut [u32; n];
let chbMem: *mut [u32; n];
unsafe {
awgReg = data.offset(AWG_BASE_ADDR) as *mut fpga_awg::awg_reg;
chaMem = data.offset(AWG_BASE_ADDR + AWG_CHA_OFFSET as isize) as *mut [u32; n];
chbMem = data.offset(AWG_BASE_ADDR + AWG_CHB_OFFSET as isize) as *mut [u32; n];
copyMem(&mut *chaMem);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment