EK-TM4C123GXL (Tiva C) + NRF24L01+, подключаем, мигрируем библиотеку, используем

Приобрел недавно плату EK-TM4C123GXL от TI (смотреть здесь). В качестве задачи для освоения решил подключить к ней NRF24L01+. Среда — Keil 5.01.
Библиотека была использована готовая, от maniacbug (статья здесь). Но она для Ардуино и написана на С++, потому с плюсов переписана на С, дополнительно, та часть, что работает с «железом», вынесена в отдельные файлы.


Установка Keil (5.01) доставила немного хлопот, поскольку устройств в новом формате там не так много, как хотелось. Пришлось доустанавливать Legasy Support, после чего появился и TM4C123GH6PM, что мне и нужно было. Затем симуляция примеров, пока курьер не принес плату. Для симулятора пришлось городить ini файл, чтобы не было предупреждений на запрет доступа при отладке в симуляторе. Создаем файл с содержимым:
MAP  0x40000000, 0x400FFFFF  READ WRITE

Затем включаем этот файл на вкладке «Debug» в параметре Initialization File. В общем симулятор работает, во всяком случае на примерах гоняет код, прерывания работают, хотя кое где проблемы есть.
Затем я столкнулся с тем, что при создании проекта, во вкладке Utilities я не установил флажки для программирования Flash памяти, т.е. при прошивке происходила очистка Flash, но не программирование. Было забавно. Почему так получилось — не знаю. Буду делать другие проекты, послежу за этим.

И так, собственно, нужно было переселить код из С++ в С, это было достаточно просто, замена "::" на "_" в именах методов, например:
void RF24::csn(int mode)
заменил на
void RF24_csn(int mode)

В процессе переделки необходимо было заменить библиотечные функции SPI и обращения к GPIO на вызовы для Tiva C. Для удобства переносимости на другие МК, эти функции были вынесены в отдельные файлы. В этой части я, для простоты, использовал TivaWare C — набор функций для обращения к периферии МК. Собственно на этом миграция была закончена, осталось отладить.
Здесь ничего особенного не произошло, после некоторых боданий с железом, всё заработало как надо. Логический анализатор рулит.

Настройка библиотеки.
HAL_config.c — файл, в котором «лежит» структура с конфигурацией используемых пинов.
Необходимо настроить:
CE — Chip Enable
CSN — Chip Select
Я использовал PA6, PA7, хотя это не принципиально.
RF24_data g_RF24_data =
{
        // CE
	0xF0000800,	// SYSCTL_PERIPH_GPIOA
	0x40004000,	// GPIO_PORTA_BASE
	0x00000040,	// GPIO_PIN_6
        // CSN
	0xF0000800,	// SYSCTL_PERIPH_GPIOA
	0x40004000,	// GPIO_PORTA_BASE
	0x00000080,	// GPIO_PIN_7
        // Other options
	true,		// RF24_WB
	false,		// RF24_PV
	32,		// Payload Size (0..32)
	false,		// Ack Payload Available
	false,		// Dynamic Payloads Enabled
	0		// Pipe0 Reading Address
};

Для тех у кого Keil, можно открыть этот файл и перейти на вкладку Configuration Wizard, там выбрать нужные порты и пины (собственно по этой причине в структуре прописаны магические числа, типа 0xF0000800, а не удобные названия). Другой вариант — поменять первые 6 элементов структуры вручную. Фактически это две группы, первая для CE, вторая для CSN. Если не использовать Configuration Wizard, можно заменить на удобные названия. Остальные параметры менять не нужно, только если понимаете, что делаете.

Структура библиотеки.
Каталог RF24 содержит исходники мигрированной библиотеки.
Каталог HAL содержит исходники функций, которые используют специфические для МК обращения к периферии МК. Собственно эта часть может меняться для использования других МК.
Корневой каталог содержит main.c — в моем случае это пример, отображающий информацию о подключенной плате, взятый из примеров из исходной библиотеки.

Особенности.
В проекте используется TivaWare C Series-2.0.1.11577, подключены библиотека driverlib.lib, а также файл utils/uartstudio.c.
В проекте прописаны пути к TivaWare C, потому понадобится настройка на вкладке C/C++ проекта.
Makefile не делал, поскольку был не нужен. Если понадобится, могу добавить.
Библиотека использует прерывания SysTick для формирования задержек.

Схема подключения.

NRF24L01+	TM4C123GH6PM
1.	GND	GND
2.	3V3	3V3
3.	CE	PA6
4.	CSN	PA7
5.	SCK	PA2
6.	MOSI	PA5
7.	MISO	PA4
8.	IRQ	-


Дистрибутив.
Проект для Keil 5.01 прилагается в файле NRF24_ARM.zip (C версия) и NRF24_CPP_ARM.zip (C++)

PS
Всё это написано для обучения и может быть далеко от совершенства, потому на красоту кода — не претендую. Ошибки также возможны.

UPD: Задержки (delay & delayMicroseconds) были некорректные, исправлено, дистрибутивы исправлены. Добавлен С++ вариант.
  • +3
  • 19 января 2014, 15:22
  • kisoft
  • 3
Файлы в топике: IMAGTIVANRF.jpg, NRF24_ARM.zip, NRF24_CPP_ARM.zip

Комментарии (22)

RSS свернуть / развернуть
О, пример работы с SPI ))
0
Да, только здесь фиксировано используется SSI0. Примеры искал, видимо плохо искал, не нашел, пришлось своё городить (в методе SPI_transfer). Еще я пробовал Fss сигнал использовать — сразу не пошло, но в готовом варианте не пробовал. Надо c PA7 на PA3 перекинуть провод.
+1
Хм, ироде все как у меня было, но вычитывалась из nRF всякая ерунда
0
У меня не сразу всё получилось :) Логический анализатор хорошо помог.
Сейчас перекинул провод с PA7 на PA3, глючит, значит придется так оставить.
0
ЛА я уже заказал. Понял что больше нет сил никаких и только ЛА может показать мою криворукость ))
0
Я не пожалел 50$ и взял Open Workbench Logic Sniffer. Правда софтина (OLS) к нему несколько убогая (возможно есть и более другие, получше), но до 200МГц оцифровка, аппаратные многоуровневые триггеры, сжатие, правда памяти не так много, как хотелось, приходится прикидывать частоту оцифровки, чтобы влезло. Уже не раз помогал протоколы раскапывать.
0
Мой первый ЛА был LPT-портом и расковырял то что в последствии оказалось I2C ))
0
Если не затруднит, дайте ссылку на софт для этой платы. Купил давно, все руки не доходили для применения. Заранее признателен!
0
Здесь описание, как начать: dangerousprototypes.com/docs/Open_Bench_Logic_Sniffer
Здесь софтина на Java: www.lxtreme.nl/ols/
0
А в софте к нему есть возможность сохранения данных на PC в realtime (как в Saleae Logic) для последующего анализа?
0
Увы, у него только встроенная память и её не очень много:
8 channels with 16K sample depth
16 channels with 8K sample depth
32 channels with 4K sample depth
Но у него есть возможность включить сжатие
0
То есть постоянная передача семплов на PC не предусмотрена? Накопили на плате в ОЗУ те же самые 16 к, потом медленно передаем по USB, а в это время (передача) анализатор ничего не оцифровывает и не запоминает? Тогда, IMHO, анализатор не очень… Я бы не покупал.
0
Всё правильно, выстрелил и передал на комп. У него еще есть многоуровневый триггер на срабатывание, т.е. можно ловить, например, перепад уровня какого либо сигнала, после этого начинается запись с этого момента или предшествующего этому триггеру куска (настраивается). В принципе, мне хватает. Я пока что на нем ловил только SPI, I2C протоколы. В общем вопрос больше философский.
0
Советую присмотреться к Saleae Logic Analyzer
И цена ниже, и очень приятный софт.
0
что-то софт унылый по сравнению с китайскими клонами
стоит ли железка 50 баксов?
0
Если не стоИт, то и не стОит ;)
Что лучше, вылечить болезнь за семь дней или за неделю?
Если пациента вылечили таблетками за 50$, а можно было за $20, то кто прав или виноват?
Извините за философское настроение, но я этот вопрос именно так воспринимаю, философски.
Меня этот аппарат на данный момент устраивает, а потому я потратил деньги не зря, он мне помог уже не раз. Покупать другой — не вижу смысла.
Спасибо
0
Надеюсь мой ответ не слишком по хамски выглядит, я всего лишь решил пошутить, плюс ответить по философски ;)
0
да не стоит переживать, я не терпила, чтобы меня можно было чем-то обидеть в инторнете
просто я одно время покупал новые и топовые девайсы, а потом понял, что трачу деньги зря и б\у попроще ничем не хуже
для меня 20 и 50 баксов имеют разницу

ну и или в этом анализаторе есть такая фишка, что за нее стоит заплатить и даже если будеш использовать ее раз в год, зато по полной
0
Фишки — сложно сказать, комплексный набор критериев.
Железо — 4х-уровневый триггер (до 4 разных комбинаций на входах) на начало записи. Есть сжатие (ценой потери одного канала). Оцифровка до 200МГц. Количество каналов — до 32. Возможность перепрошивки firmware.
Сравнить, увы, не могу, вот если куплю другой, тогда другое дело.
0
А перевод на голый С чем был вызван?
0
  • avatar
  • evsi
  • 19 января 2014, 16:52
Ничем особенным, наоборот, мне плюсы больше по душе. В любом случае — это не попытка уменьшить размер кода или что то в этом духе. Скорее давно на С не писал. На работе плюсы, Ардуино — плюсы, так и забудешь голый С :)
Кстати, если будет время, попробую либу на плюсах оставить, ради спортивного интереса. Будет два варианта.
0
Добавил С++ вариант, за один исправил ошибку с задержками.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.