DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
WIB_localFlash.cpp
Go to the documentation of this file.
1#include "wibmod/WIB1/WIB.hh"
3
4uint32_t
5WIB::ReadLocalFlash(uint16_t address)
6{
7 // load the address
8 Write("SYSTEM.FLASH.ADDRESS", address);
9 // start the read transaction
10 Write("SYSTEM.FLASH.RW", 1);
11 Write("SYSTEM.FLASH.RUN", 1);
12
13 // Wait for transaction to finish
14 while (Read("SYSTEM.FLASH.DONE") == 0) {
15 printf("busy\n");
16 // sleep for 1ms
17 usleep(1000);
18 }
19
20 return Read("SYSTEM.FLASH.RD_DATA");
21}
22
23std::vector<uint32_t>
24WIB::ReadLocalFlash(uint16_t address, size_t n)
25{
26 std::vector<uint32_t> readData;
27 size_t current_address = address;
28 size_t end_address = current_address + n;
29 for (; current_address < end_address; current_address++) {
30 readData.push_back(ReadLocalFlash(current_address));
31 }
32 return readData;
33}
34
35void
36WIB::WriteLocalFlash(uint16_t address, uint32_t data)
37{
38 // load the address
39 Write("SYSTEM.FLASH.ADDRESS", address);
40 // load the data to write
41 Write("SYSTEM.FLASH.WR_DATA", data);
42
43 // start the read transaction
44 Write("SYSTEM.FLASH.RW", 0);
45 Write("SYSTEM.FLASH.RUN", 1);
46 // Wait for finish
47 while (Read("SYSTEM.FLASH.DONE") == 0) {
48 // sleep for 1ms
49 usleep(1000);
50 }
51}
52
53void
54WIB::WriteLocalFlash(uint16_t address, std::vector<uint32_t> const& data)
55{
56 for (size_t iWord = 0; iWord < data.size(); iWord++) {
57 WriteLocalFlash(address, data[iWord]);
58 address++;
59 }
60}
uint32_t Read(uint16_t address)
Definition WIBBase.cpp:147
void Write(uint16_t address, uint32_t value)
Definition WIBBase.cpp:168
uint32_t ReadLocalFlash(uint16_t address)
void WriteLocalFlash(uint16_t address, uint32_t data)