ZMOD API
zmod.h
Go to the documentation of this file.
1 
9 #include <stdint.h>
10 
11 #include "dma.h"
12 #include "reg.h"
13 
14 #ifndef _ZMOD_H
15 #define _ZMOD_H
16 
17 #define ERR_SUCCESS 0
18 #define ERR_FAIL -1
19 #define ERR_CALIB_CRC -2
20 #define ERR_CALIB_ID -3
21 
22 #define ZMOD_REG_ADDR_CR 0x00 // CR register address
23 #define ZMOD_REG_ADDR_SR 0x04 // SR register address
24 #define ZMOD_REG_ADDR_IER 0x08 // IER register address
25 #define ZMOD_REG_ADDR_CMD_TX 0x0C // CMD_TX register address
26 #define ZMOD_REG_ADDR_CMD_RX 0x10 // CMD_RX register address
27 #define ZMOD_REG_ADDR_AXIS_S2MM_LENGTH 0x14 // AXIS_S2MM_LENGTH register address
28 #define ZMOD_REG_ADDR_AXIS_MM2S_LENGTH 0x18 // AXIS_MM2S_LENGTH register address
29 
30 #define ZMOD_REGFLD_CR_CMD_RUNSTP ZMOD_REG_ADDR_CR, 1, 1 // CMD_RUNSTP field of CR register
31 #define ZMOD_REGFLD_CR_CMD_READ_EN ZMOD_REG_ADDR_CR, 2, 1 // CMD_READ_EN field of CR register
32 #define ZMOD_REGFLD_CR_INTR_EN ZMOD_REG_ADDR_CR, 3, 1 // INTR_EN field of CR register
33 #define ZMOD_REGFLD_CR_RST ZMOD_REG_ADDR_CR, 31, 1 // RST field of CR register
34 
35 #define ZMOD_REGFLD_SR_CMD_TX_DONE ZMOD_REG_ADDR_SR, 0, 1 // TX_DONE field of SR register
36 #define ZMOD_REGFLD_SR_CMD_RUNNING ZMOD_REG_ADDR_SR, 2, 1 // CMD_RUNNING field of SR register
37 #define ZMOD_REGFLD_SR_CMD_TX_COUNT ZMOD_REG_ADDR_SR, 3, 7 // CMD_TX_COUNT field of SR register
38 #define ZMOD_REGFLD_SR_CMD_RX_COUNT ZMOD_REG_ADDR_SR, 10, 7 // CMD_RX_COUNT field of SR register
39 
40 #define ZMOD_REGFLD_IER_CMD_TX_DONE ZMOD_REG_ADDR_IER, 0, 1 // CMD_TX_DONE field of IER register
41 #define ZMOD_REGFLD_IER_CMD_RX_DONE ZMOD_REG_ADDR_IER, 1, 1 // CMD_RX_DONE field of IER register
42 #define ZMOD_REGFLD_IER_CMD_TX_RX_ERROR ZMOD_REG_ADDR_IER, 2, 4 // CMD_TX_RX_ERROR field of IER register
43 
44 #define ZMOD_REGFLD_AXIS_S2MM_LENGTH_LENGTH ZMOD_REG_ADDR_AXIS_S2MM_LENGTH, 0, 26 // LENGTH field of AXIS_S2MM_LENGTH register
45 #define ZMOD_REGFLD_AXIS_MM2S_LENGTH_LENGTH ZMOD_REG_ADDR_AXIS_MM2S_LENGTH, 0, 26 // LENGTH field of AXIS_MM2S_LENGTH register
46 
47 class ZMOD {
48 protected:
49  uintptr_t baseAddr;
50  uintptr_t dmaAddr;
51  uintptr_t flashAddr;
52  size_t transferSize;
53  uint8_t *calib;
54  uint32_t calibSize;
55  uint16_t userCalibAddr;
56  uint16_t factCalibAddr;
57  uint8_t calibID;
58  enum dma_direction direction;
59  int initCalib(uint32_t calibSize, uint8_t calibID, uint32_t userCalibAddr,uint32_t factCalibAddr);
60  void* allocDMABuffer(size_t size);
61  void freeDMABuffer(uint32_t *buf, size_t size);
62  uint8_t computeCRC(uint8_t *pData, uint32_t len);
63 
64 public:
65  ZMOD(uintptr_t baseAddress, uintptr_t dmaAddress, uintptr_t iicAddress, uintptr_t flashAddress,
66  enum dma_direction direction, int zmodInterrupt, int dmaInterrupt);
67  ~ZMOD();
68 
69  void writeReg(uint8_t regAddr, uint32_t value);
70  void writeRegFld(uint8_t regAddr, uint8_t lsbBit, uint8_t noBits, uint32_t value);
71  uint32_t readReg(uint8_t regAddr);
72  uint32_t readRegFld(uint8_t regAddr, uint8_t lsbBit, uint8_t noBits);
73 
74  void writeSignedRegFld(uint8_t regAddr, uint8_t lsbBit, uint8_t noBits, int32_t value);
75  int32_t readSignedRegFld(uint8_t regAddr, uint8_t lsbBit, uint8_t noBits);
76 
77  void setTransferSize(size_t size);
78  int startDMATransfer(uint32_t* buffer);
79  bool isDMATransferComplete();
80 
81  void sendCommand(uint32_t command);
82  uint32_t receiveCommand();
83 
84  void sendCommands(uint32_t *commands, size_t length);
85  size_t receiveCommands(uint32_t *commands);
86  size_t sendReceiveCommands(uint32_t *sentCommands, uint32_t *receivedCommands, size_t length);
87 
88  virtual void processInterrupt();
89  virtual int readUserCalib();
90  void writeUserCalib();
91  int restoreFactoryCalib();
92 
93  void formatValue(char *dest, float val, const char *unit);
94 
95 protected:
96  int32_t toSigned(uint32_t value, uint8_t noBits);
97 };
98 
99 #endif
ZMOD::readRegFld
uint32_t readRegFld(uint8_t regAddr, uint8_t lsbBit, uint8_t noBits)
Definition: zmod.cpp:144
ZMOD::isDMATransferComplete
bool isDMATransferComplete()
Definition: zmod.cpp:271
ZMOD::toSigned
int32_t toSigned(uint32_t value, uint8_t noBits)
Definition: zmod.cpp:194
ZMOD::initCalib
int initCalib(uint32_t calibSize, uint8_t calibID, uint32_t userCalibAddr, uint32_t factCalibAddr)
Definition: zmod.cpp:409
ZMOD::freeDMABuffer
void freeDMABuffer(uint32_t *buf, size_t size)
Definition: zmod.cpp:232
ZMOD::receiveCommands
size_t receiveCommands(uint32_t *commands)
Definition: zmod.cpp:327
ZMOD::sendCommands
void sendCommands(uint32_t *commands, size_t length)
Definition: zmod.cpp:301
ZMOD::restoreFactoryCalib
int restoreFactoryCalib()
Definition: zmod.cpp:447
ZMOD::writeRegFld
void writeRegFld(uint8_t regAddr, uint8_t lsbBit, uint8_t noBits, uint32_t value)
Definition: zmod.cpp:114
ZMOD::writeReg
void writeReg(uint8_t regAddr, uint32_t value)
Definition: zmod.cpp:86
ZMOD::writeUserCalib
void writeUserCalib()
Definition: zmod.cpp:429
ZMOD::receiveCommand
uint32_t receiveCommand()
Definition: zmod.cpp:290
ZMOD::readUserCalib
virtual int readUserCalib()
Definition: zmod.cpp:369
ZMOD::sendCommand
void sendCommand(uint32_t command)
Definition: zmod.cpp:280
ZMOD
Definition: zmod.h:47
ZMOD::processInterrupt
virtual void processInterrupt()
Definition: zmod.cpp:212
ZMOD::sendReceiveCommands
size_t sendReceiveCommands(uint32_t *sentCommands, uint32_t *receivedCommands, size_t length)
Definition: zmod.cpp:350
ZMOD::ZMOD
ZMOD(uintptr_t baseAddress, uintptr_t dmaAddress, uintptr_t iicAddress, uintptr_t flashAddress, enum dma_direction direction, int zmodInterrupt, int dmaInterrupt)
Definition: zmod.cpp:47
ZMOD::allocDMABuffer
void * allocDMABuffer(size_t size)
Definition: zmod.cpp:222
ZMOD::readSignedRegFld
int32_t readSignedRegFld(uint8_t regAddr, uint8_t lsbBit, uint8_t noBits)
Definition: zmod.cpp:182
ZMOD::computeCRC
uint8_t computeCRC(uint8_t *pData, uint32_t len)
Definition: zmod.cpp:469
ZMOD::startDMATransfer
int startDMATransfer(uint32_t *buffer)
Definition: zmod.cpp:257
ZMOD::~ZMOD
~ZMOD()
Definition: zmod.cpp:67
ZMOD::formatValue
void formatValue(char *dest, float val, const char *unit)
Definition: zmod.cpp:496
ZMOD::writeSignedRegFld
void writeSignedRegFld(uint8_t regAddr, uint8_t lsbBit, uint8_t noBits, int32_t value)
Definition: zmod.cpp:167
ZMOD::setTransferSize
void setTransferSize(size_t size)
Definition: zmod.cpp:242
ZMOD::readReg
uint32_t readReg(uint8_t regAddr)
Definition: zmod.cpp:100