-
Notifications
You must be signed in to change notification settings - Fork 0
/
LibADS8330.cpp
78 lines (73 loc) · 2.22 KB
/
LibADS8330.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <LibADS8330.h>
// MCU setup: clock: 20Mhz,
// mode: polarity = 1, phase = 1,
// number of words: 1,
// word lenght: 16bits
LibADS8330::LibADS8330(float vref = 5.0) :
LibAdc(vref),
m_somiSelect(0),
m_libWrapMibSpi(0),
m_mibSpiGroup(0)
{
m_pinMap[SOMI_SW] = 0;
}
void LibADS8330::initialize()
{
uint16 data;
m_pinMap[CS]->m_libWrapGioPort->setPin(m_pinMap[CS]->m_pin, true);
m_pinMap[CONVST]->m_libWrapGioPort->setPin(m_pinMap[CONVST]->m_pin, true);
write(WRITE_CFG_REGISTER
| SYSTEM_RESET, data);
write(WRITE_CFG_REGISTER
| INTERNAL_CCLK
| MANUAL_TRIGGER
| EOC_ACTIVE_LOW
| PIN_EOC
| EOC_OUT
| DISABLE_POWER_DOWN
| NORMAL_OPERATION, data);
write(READ_CFG_REGISTER, data);
write(SEL_AN_IN_CHANNEL_0, data);
}
int LibADS8330::read(int channel, uint32& value)
{
int result = isChannelCorrect(channel);
if (result != OKAY) {
return result;
}
LibMibSpi::Lock lock(*m_libWrapMibSpi);
if (m_pinMap[SOMI_SW]) {
m_pinMap[SOMI_SW]->m_libWrapGioPort->setPin(m_pinMap[SOMI_SW]->m_pin, m_somiSelect);
}
// Select channel
uint16 data;
result = write(m_channelMap[channel], data);
if (result != OKAY) {
return result;
}
// Start conversion
m_pinMap[CONVST]->m_libWrapGioPort->setPin(m_pinMap[CONVST]->m_pin, false);
m_pinMap[CONVST]->m_libWrapGioPort->setPin(m_pinMap[CONVST]->m_pin, true);
// Wait until EOC
while (m_pinMap[EOC]->m_libWrapGioPort->getPin(m_pinMap[EOC]->m_pin) == false);
// Read result
result = write(READ_DATA, data);
if (result != OKAY) {
return result;
}
value = data;
return result;
}
int LibADS8330::write(uint16 txBuffer, uint16& data)
{
int result = OKAY;
m_pinMap[CS]->m_libWrapGioPort->setPin(m_pinMap[CS]->m_pin, false);
m_libWrapMibSpi->setData(m_mibSpiGroup, &txBuffer);
m_libWrapMibSpi->transfer(m_mibSpiGroup);
if (!m_libWrapMibSpi->waitForTransferComplete(m_mibSpiGroup, 1)) {
result = ERROR_TIME_OUT;
}
m_libWrapMibSpi->getData(m_mibSpiGroup, &data);
m_pinMap[CS]->m_libWrapGioPort->setPin(m_pinMap[CS]->m_pin, true);
return result;
}