Arduino due. Тактовая частота.
- Войдите на сайт для отправки комментариев
Пнд, 28/12/2015 - 20:20
Вопрос такой, как можно узнать тактовую частоту работы процессо в arduino due.
Делал простой код:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
}
Ожидал на выходе получить десятки Мегагерц, а получил несколько десятков килогерц.
И немогу понять в чём дело, почему такая низкая производительность, или частота процессора не 84 Мгц, или её нужно вручную задавать.
Может есть коммады для определения текущей частоты, помогите разобраться, всем заранее спасибо!
А почитать что нибудь? Например, здесь:
http://robotosha.ru/arduino/digitalwrite-optimizing-arduino.html
А для due не подходит. Пробовал.
А для due не подходит.
Потому что там совсем другой микроконтрллер стоит, 32-битный ARM Cortex-M3 (Atmel SAM3X8E)
Тогда можете пример дать как напрямую его портами управлять?
Я ссылку давал чтобы поняли почему с digitalWrite так медленно работает. Применять те же методы работы с портами что там предлагаются для due не пройдет т.к. AVR и ARM отличаются архитектурой. В due удобнее работать с портами через регистры.
Для чтения из порта используется "pin data status register". Синтаксис такой:
Где x это порты A,B,C,D.
Для записи в порт надо сначала ее разрешить записав 1 в соответствующие разряды "output write enable register".
Где x это порты A,B,C,D.
Сама запись производится в "Output Data Status Register":
Где x это опять же порты A,B,C,D.
После того как необходимость записи в разряды порта отпадет надо ее запретить записью маски в "Output Write Disable Register":
Это схематично, для понимания отличия работы с портами от того что найдете в скетчах для AVR. Кое что можно найти в файле sam_gpio.h по работе с портами.
Спасибо тебе добрый человек!!! Как раз изучая исходники нашёл это и ещё другие варианты. Испробую пока все, меня интересует максималная производительность, по оcциллографу смотрю. Но по ходу дела выясняется ещё что цикл Loop() тоже не подходит, добавил свой while (1) ....
Вот что проверяю:
И
REG_PIOB_SODR = 0x1 << 27;
Хочу сравнить все варианты по скорости, и ещё с написанием кода на ASM.
Но по ходу дела выясняется ещё что цикл Loop() тоже не подходит, добавил свой while (1) ....
Тогда уж и Arduino IDE выкинуть. И использовать нормальную IDE от производителя микроконтроллеров - Atmel Studio 7. Писать на чистом Си, без всяких ардуиновских Wiring. Плюс ассемблерные вставки можно делать.
Но по ходу дела выясняется ещё что цикл Loop() тоже не подходит, добавил свой while (1) ....
Тогда уж и Arduino IDE выкинуть. И использовать нормальную IDE от производителя микроконтроллеров - Atmel Studio 7. Писать на чистом Си, без всяких ардуиновских Wiring. Плюс ассемблерные вставки можно делать.
Может ты и прав, микрочиповские pic я именно так и программировал. Но решил попробовать arduino. Честно говоря уже пожалел, всётаки это слижком уж начальный уровень.