Быстрое чтение цифровых входов Arduino DUE

Mexaneg
Offline
Зарегистрирован: 28.04.2016

Коллеги! Второй день бьюсь с задачкой.

Имеем Ардуинку DUE надо единовременно прочитать байт данных на цифровых входах сравнить значение байта и в соответствии с результатом выдать определенный сигнал.

Проблема вот в чем, стандартное обращение копец какое медленное и побитное до кучи -> можем потерять часть данных. Решил обратиться напрямую к регистрам. Доселе с 32-х разрядными МК не работал и логику работы с регистрами не знаю. 

Раскурил мануал и забугорные форумы, худо-бедно разобрался как считать и записать в регистры отдельные биты. А вот с Байтом не пойму...

По форуму искал - не нашел ничего похожего.

Может делал кто подобную задачу - покидайте примерчики пожалуйста.

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Я не уверен, т.к. сам с этим МК не работал, но возможно так?

1pinsStatus = PIOA->PIO_PDSR; //считать весь порт А, только там 4 байта (PA0-PA31)

А чтобы записать сразу несколько бит, вроде так:

1PIOA->PIO_OWER = value_; //разрешаем запись нужных битов в PIO_ODSR
2PIOA->PIO_ODSR = value; //записываем значение в порт А
3PIOA->PIO_OWDR = 0xFFFFFFFF; //обнуляем единицами, если надо работать с другими битами в PIO_OWER и PIO_ODSR
4PIOA->PIO_OWER = value2_; //разрешаем запись нужных битов в PIO_ODSR
5PIOA->PIO_ODSR = value2; //записываем значение в порт А

Порты 32-битные (4 байта). Даташит, полезная ссылка.

axill
Offline
Зарегистрирован: 05.09.2011

Если хотите действительно погрузиться, то читайте не форумы, а документацию атмела

с этим МК не работал, но там наверняка есть оабота с портом ввода вывода как с одним байтом или словом или даже двойным словом учитывая разрядность ядра этого МК

а что за задача? Может она немного иначе решается

Mexaneg
Offline
Зарегистрирован: 28.04.2016

Jeka_M пишет:

Я не уверен, т.к. сам с этим МК не работал, но возможно так?

1pinsStatus = PIOA->PIO_PDSR; //считать весь порт А, только там 4 байта (PA0-PA31)

А чтобы записать сразу несколько бит, вроде так:

1PIOA->PIO_OWER = value_; //разрешаем запись нужных битов в PIO_ODSR
2PIOA->PIO_ODSR = value; //записываем значение в порт А
3PIOA->PIO_OWDR = 0xFFFFFFFF; //обнуляем единицами, если надо работать с другими битами в PIO_OWER и PIO_ODSR
4PIOA->PIO_OWER = value2_; //разрешаем запись нужных битов в PIO_ODSR
5PIOA->PIO_ODSR = value2; //записываем значение в порт А

Порты 32-битные (4 байта). Даташит, полезная ссылка.

Спасибо.

По ссылочке уже поковырял материал, куда копать понял и полез в даташит. 

Строчку попробовал pinsStatus = PIOA->PIO_PDSR; //считать весь порт А, только там 4 байта (PA0-PA31)

Чего то считывает, но что это за число и откуда оно взялось, вообще не ясно.

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

В общем штудируйте даташит, глава 31 (31.5.4 Output Control, 31.5.5 Synchronous Data Output, 31.5.8 Inputs, 31.7 Parallel Input/Output Controller (PIO) User Interface).

P.S. Поправочка, не все порты 32-битные:

Mexaneg
Offline
Зарегистрирован: 28.04.2016

axill пишет:

Если хотите действительно погрузиться, то читайте не форумы, а документацию атмела

с этим МК не работал, но там наверняка есть оабота с портом ввода вывода как с одним байтом или словом или даже двойным словом учитывая разрядность ядра этого МК

а что за задача? Может она немного иначе решается

 

СОбственно вкуриванием Даташита сейчас и занимаюсь. Инфа есть (с 618 страницы) но носит она описательный характер, я пока не могу понять последовательность действий для настройки портов и считывания оттуда только нужных мне значений.

 

Задача такова: Имеем МК, в нем расчитана и записана табличка функции SINуса из 1000 значений на период. С цифровых входов считываем бит данных, в нем живет бит ВКЛ/ВЫКЛ и частота выдачи синуса на аналоговый выход Дуинки. 

На внешнем устростве (пром ПЛК задается частота и соответственно включение и выключение генерации (чтения табличных данных) а с Дуинки выдается синусоида на 3-е устройство (исполнительное). DUE выбрал исключительно из-за высокой частоты работы и возможности последующего наращивания системы.

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Покурите даташит на той странице, где описана структура SRAM - там интресно рассказано об отображении файла РОН и портов. :)