Проблема #include на Arduino M0

Тема в разделе "Arduino & Shields", создана пользователем kornov, 21 ноя 2016.

  1. kornov

    kornov Нуб

    #include <ELECHOUSE_CC1101.h>

    На Arduino UNO компилируется и работает нормально. Arduino M0 - Ошибка компиляции.
    Есть подозрение на пути, но что именно? (Mac OS)

    Изменена опция сборки, пересобираем все
    /Users/dev/Documents/Arduino/libraries/ELECHOUSE_CC1101/ELECHOUSE_CC1101.cpp: In member function 'void ELECHOUSE_CC1101::SpiMode(byte)':
    /Users/dev/Documents/Arduino/libraries/ELECHOUSE_CC1101/ELECHOUSE_CC1101.cpp:83 (cat) : error: 'SPCR' was not declared in this scope
    SPCR = 0;
    ^

    /Users/dev/Documents/Arduino/libraries/ELECHOUSE_CC1101/ELECHOUSE_CC1101.cpp:98:23: error: 'SPIF' was not declared in this scope
    while (!(SPSR & (1<<SPIF))) ;
    ^
     
  2. rkit

    rkit Гуру

    Библиотека не поддерживает эту плату.
     
  3. Radius

    Radius Гик

    Библиотека ELECHOUSE_CC1101 написана конкретно для микроконтроллеров AVR. Для того чтобы её переделать под Cortex M0 нужно переписать функцию общения с SPI. Давно хочу заняться этим, но пока нет времени.
     
  4. kornov

    kornov Нуб

    Сможете ли выделить время на "переделать под Cortex M0 нужно переписать функцию общения с SPI CC1101", если я оплачу потраченое вами время?
     
  5. Radius

    Radius Гик

    До конца месяца совершенно нет времени. Если что то получиться, то я отпишусь.
     
  6. kornov

    kornov Нуб

    Может я попробую сам. Подскажите только в чем разница общения по SPI между AVR и ARM?
    При положительном результате - поделюся кодом
     
  7. rkit

    rkit Гуру

    В M0 нету железного spi. надо реализовывать софтом.
     
  8. Radius

    Radius Гик

    Вам нужно поправить вот эти функции:

    Код (C++):
    void ELECHOUSE_CC1101::SpiMode(byte config)
    {
      byte tmp;

      // enable SPI master with configuration byte specified
      SPCR = 0;
      SPCR = (config & 0x7F) | (1<<SPE) | (1<<MSTR);
      tmp = SPSR;
      tmp = SPDR;
    }

    /****************************************************************
    *FUNCTION NAME:SpiTransfer
    *FUNCTION     :spi transfer
    *INPUT        :value: data to send
    *OUTPUT       :data to receive
    ****************************************************************/

    byte ELECHOUSE_CC1101::SpiTransfer(byte value)
    {
      SPDR = value;
      while (!(SPSR & (1<<SPIF))) ;
      return SPDR;
    }
    В Cortex M0 есть аппаратный SPI. Посмотрите как он инициализируется в Arduino IDE.
     
  9. Radius

    Radius Гик

    Какую плату вы используете? Если плата поддерживается Arduino IDE, то должна работать стандартная библиотека SPI: http://arduino.ru/Reference/Library/SPI.
     
  10. kornov

    kornov Нуб

    Arduino M0 плата
     
  11. Radius

    Radius Гик

    Если смотреть по схеме, то SPI на этой плате выходит на контакты 10 (SS), 11(MOSI), 12(MISO), 13(SCK). Попробуйте работает ли на данной плате библиотека SPI. У меня нет такой платы, не смогу проверить. Я хотел использовать вот такую:
    [​IMG]