26 авг. 2010 г.

Завершено портирование TNKernel на SDK2.0 (основан на чипе LPC2292)

За основу был взят уже имеющийся порт на LPC2106. А учитывая то, что TNKernel изначально разрабатывалась для процессоров архитектуры ARM, работа по портированию была не особо затруднительной.
Вот список изменений:
  • Подправлен скрипт линкера, с учетом того, что LPC2292 имеет всего 16 Кб внутренней RAM, в отличие от LPC2106
  • Поправлен Makefile - теперь линуксовый make спокойно с ним работает
  • В заголовочный файл LPC2292.h добавлена пара регистров, необходимых для зажигания светодиодов на стенде. Это использовалось мною при отладке - горят светодиоды, значит мы дошли до участка кода, где они зажигаются.
    Также из заголовочного файла удалены регистры, относящиеся (судя по названию) к векторному контроллеру прерываний, но отсутствующие в даташите как LPC2292, так и LPC2106.
  • Поправлен исходный код ОС и примеров - теперь он не так сильно привязан к Windows
  • Помимо GNU ARM toolchain'а, проект компилируется и Keil'ом. Соответствующие исправления были внесены лишь в проект первого тестового примера.
  • Добавлена инициализация контроллера внешней памяти.
  • Убрана обработка прерывания EINT0 c P0.16, на этом порту в SDK2.0 висит радиомодем.
  • Подправлен код конечного автомата в uart_rx_drw() - теперь строки с командами могут оканчиваться на '\r' (как их посылает PuTTY в COM-порт)
На данный момент, на SDK2.0 мной запускался тестовый пример №1, поставлявшийся вместе с исходным кодом TNKernel. Он был успешно скомпилирован (и не менее успешно впоследствии запушен) при помощи GNU ARM toolchain и компилятора в составе Keil'а.
В этом примере запускается набор различных задач, пара из которых обеспечивают прием команд из последовательного канала, отправку ответа и вывод информации о своем состоянии в этот же канал.
Вывод информации о состоянии (номер итерации в бесконечном цикле задачи):
Вывод этой же информации и параллельное выполнение команд #cm12 и #uname (local echo отключен):
Настройки последовательного канала для PuTTY:
  • Скорость - 9600 бод
  • 8 битов с данными
  • 1 стоповый бит
  • Контроль четности - отсутствует
  • Контроль потока - отсутствует
Страничка проекта: http://code.google.com/p/tnkernel-lpc2292/
Скачать исходный код можно тут: bzip2 (md5), gzip (md5)
Сайт TNKernel: http://www.tnkernel.com/ (после скачивания кода TNKernel нужно поместить мой каталог LPC2292/ в получившийся после распаковки каталог TNKernel)
SVN проекта: http://code.google.com/p/tnkernel-lpc2292/source/list
Получить последнюю версию можно так:
svn checkout http://tnkernel-lpc2292.googlecode.com/svn/trunk/ tnkernel-lpc2292-read-only
 Скачать уже скомпилированный бинарник с тестовой программой №1 можно тут (скомпилировано GNU ARM toolchain'ом) или тут (скомпилировано Keil'ом).