Ошибка при получении ввода АЦП

Я использую плату на основе Cortex-M3. Это первый раз, когда я программирую такую ​​доску, поэтому я не знаю, как читать библиотеки и сделать так, чтобы это произошло.

Эта плата поставляется с датчиком температуры, и я пытаюсь использовать adc lib для чтения.

Мой код:

#include <adc.h>
#include <gpio.h>

using namespace EPOS;
//const NIC::Protocol NIC_PROTOCOL = 42;

ADC * temperature;

int main()
{
temperature = new ADC( 0xE, 0x2, 0x3);
//    printf("&temperature");

return 0;
}

Библиотека

// EPOS ARM Cortex-M Analog to Digital Converter (ADC) Mediator Declarations

#include <system/config.h>
#if !defined(__cortex_adc_h_) && defined(__ADC_H)
#define __cortex_adc_h_

#include <adc.h>
#include <machine.h>

__BEGIN_SYS

class ADC: private ADC_Common, private Machine_Model
{
public:
enum Channel {
SINGLE_ENDED_ADC0 = 0,
SINGLE_ENDED_ADC1 = 1,
SINGLE_ENDED_ADC2 = 2,
SINGLE_ENDED_ADC3 = 3,
SINGLE_ENDED_ADC4 = 4,
SINGLE_ENDED_ADC5 = 5,
SINGLE_ENDED_ADC6 = 6,
SINGLE_ENDED_ADC7 = 7,
DIFF8             = 8,
DIFF9             = 9,
DIFF10            = 10,
DIFF11            = 11,
GND               = 12,
TEMPERATURE       = 14,
AVDD5_3           = 15,
};

enum Reference {
INTERNAL_REF   = 0,
EXTERNAL_REF   = 1, // External reference on AIN7 pin
SYSTEM_REF     = 2,
EXTERNAL_DIFF  = 3
};

enum Resolution {
BITS_7  = 0, //  7 bits resolution, 64  decimation rate
BITS_9  = 1, //  9 bits resolution, 128 decimation rate
BITS_10 = 2, // 10 bits resolution, 256 decimation rate
BITS_12 = 3  // 12 bits resolution, 512 decimation rate
};

ADC(const Channel & channel = SINGLE_ENDED_ADC5, const Reference & reference = SYSTEM_REF, const Resolution & resolution = BITS_12)
: _channel(channel), _reference(reference), _resolution(resolution) {
Machine_Model::adc_config(_channel);
}

short read() {
reg(ADCCON3) = (_reference * ADCCON3_EREF) | (_resolution * ADCCON3_EDIV) | (_channel * ADCCON3_ECH);
while(!(reg(ADCCON1) & ADCCON1_EOC));
short ret = (reg(ADCH) << 8) + reg(ADCL);
switch(_resolution) {
case BITS_7:  ret >>= 9; break;
case BITS_9:  ret >>= 7; break;
case BITS_10: ret >>= 6; break;
case BITS_12: ret >>= 4; break;
}
return ret;
}

// returns the voltage corresponding to the reading, with three decimal places (e.g. 2534 means 2.534V)
int convert(short raw_reading, int reference = 3300/*3.3V*/) {
int limit;
switch(_resolution) {
case BITS_7:  limit =   63; break;
case BITS_9:  limit =  255; break;
case BITS_10: limit =  511; break;
case BITS_12: limit = 2047; break;
}
return raw_reading * reference / limit;
}

private:
volatile CPU::Reg32 & reg(unsigned int o) { return reinterpret_cast<volatile CPU::Reg32*>(ADC_BASE)[o / sizeof(CPU::Reg32)]; }

Channel _channel;
Reference _reference;
Resolution _resolution;
};

__END_SYS

#endif

ошибка:

температура.cc: в функции ‘int main ()’: температура.cc:11: ошибка:
неверное преобразование из ‘int’ в ‘EPOS :: S :: ADC :: Channel’
Temperature.cc:11: ошибка: инициализация аргумента 1 из
‘EPOS :: S :: ADC :: ADC (const EPOS :: S :: ADC :: Channel&, const
ЭПОС :: S :: ADC :: Ссылки&, const EPOS :: S :: ADC :: Резолюция&)»
temperature.cc:11: ошибка: недопустимое преобразование из int в
‘EPOS :: S :: ADC :: Reference’ температура.cc:11: ошибка: инициализация
аргумент 2 в ‘EPOS :: S :: ADC :: ADC (const EPOS :: S :: ADC :: Channel&, const
ЭПОС :: S :: ADC :: Ссылки&, const EPOS :: S :: ADC :: Резолюция&)»
temperature.cc:11: ошибка: недопустимое преобразование из int в
‘EPOS :: S :: ADC :: Resolution’ температура.cc:11: ошибка: инициализация
аргумент 3 в ‘EPOS :: S :: ADC :: ADC (const EPOS :: S :: ADC :: Channel&, const
ЭПОС :: S :: ADC :: Ссылки&, const EPOS :: S :: ADC :: Резолюция&)»
makefile: 11: рецепт для цели ‘температура.o’ не удалось сделать [2]: *
[температура.о] Ошибка 1 make [2]: выход из каталога
‘/ home / thiago / Documents / arm / app’ makefile: 17: рецепт для целевого ‘app’
не удалось сделать [1]: *
[приложение] Ошибка 2 make [1]: выход из каталога
‘/ home / thiago / Documents / arm’ makefile: 11: рецепт для цели ‘all’
Сбой make: *** [все] Ошибка 2

Язык программирования: с ++

Благодарю.

0

Решение

Конструктор АЦП хочет 3 параметры, переданные по ссылке, поэтому вы должны передать переменные.

Ваш код должен быть, по крайней мере:

int main(void)
{
Channel channel = TEMPERATURE;
Reference reference = SYSTEM_REF;
Resolution resolution = BITS_12;

temperature = new ADC( channel, reference, resolution);

return 0;
}

РЕДАКТИРОВАТЬ

Как уже говорили другие пользователи, вы должны избегать использования динамического выделения во встроенном приложении с помощью uC с ограниченными ресурсами (в основном, RAM).

Таким образом, вы можете создать экземпляр своего класса следующим образом:

int main(void)
{
short temperature;

Channel channel = TEMPERATURE;
Reference reference = SYSTEM_REF;
Resolution resolution = BITS_12;

ADC reader( channel, reference, resolution);

while (1)
{
temperature = reader.read();
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector