Управление регистрами PORT и DDR на arduino due
- Войдите на сайт для отправки комментариев
Втр, 28/01/2014 - 13:58
Написал скетч.
int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); DDRD = DDRD | B11111100; } void loop() { PORTD = B11111100; PORTD = B00000000; digitalWrite(ledPin,HIGH); digitalWrite(ledPin,LOW); }
После нажатия кнопки "Проверить", вылезает ошибка. Пробовал перед регистрами писать byte, но безуспешно(
Arduino: 1.5.5-r2 (Windows 8), Board: "Arduino Due (Programming Port)" sketch_jan28c.ino: In function 'void setup()': sketch_jan28c:5: error: 'DDRD' was not declared in this scope sketch_jan28c.ino: In function 'void loop()': sketch_jan28c:10: error: 'PORTD' was not declared in this scope
Попробовал выполнить компилирование на arduino 1.0.5-r2 - Компилирование выполнено!..
а в каком arduino ide не компилировался этот код?
Специально запустил ArduinoIDE 1.0.5 r2 и не нашел в ней Arduino Due, потому говорить, что в 1.0.5 скомпилировалось - некорректно. Может оно и скомпилировалось, но для другого МК
В общем так.
Выяснил что не компилируется в версии 1.5.5 при переходе в режим Arduino Due.
Видимо в ARM обращение регистрами происходит другими командами. Пока нашел некоторые комманды типа:
REG_PIOD_OWER
REG_PIOD_PDSR
REG_PIOD_ODSR
Разумеется, в Cortex-M3 абсолютно по другому обращение к портам, потому, пишите как обычно digitalWrite, а не используйте прямое обращение к портам, либо сначала почитайте, как правильно обращаться с портами.
Для примера посмотрите в каталоге файлы, например, wiring_digital.c в каталоге arduino-1.5.5-r2\hardware\arduino\sam\cores\arduino хотя бы. И сравните с аналогичной операцией в AVR - небо и земля
AVR:
DUE:
И это не говоря уже о том, что AVR - 8 битный, а Due - 32-битная система