За основу был взят уже имеющийся порт на 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’а.

В этом примере запускается набор различных задач, пара из которых обеспечивают прием команд из последовательного канала, отправку ответа и вывод информации о своем состоянии в этот же канал.

Вывод информации о состоянии (номер итерации в бесконечном цикле задачи):

Tasks output

Вывод этой же информации и параллельное выполнение команд #cm12 и #uname (local echo отключен):

Disabled noecho

Настройки последовательного канала для PuTTY:

  • Скорость — 9600 бод

  • 8 битов с данными

  • 1 стоповый бит

  • Контроль четности — отсутствует

  • Контроль потока — отсутствует

Страничка проекта: http://code.google.com/p/tnkernel-lpc2292/

Скачать исходный код можно тут: bzip2 (md5), gzip (md5)

Сайт TNKernel: http://www.tnkernel.com/ (после скачивания кода TNKernel нужно поместить мой каталог LPC2292/ в получившийся после распаковки каталог TNKernel).

Получить последнюю версию можно так:

svn checkout http://tnkernel-lpc2292.googlecode.com/svn/trunk/ tnkernel-lpc2292-read-only

Скачать уже скомпилированный бинарник с тестовой программой №1 можно тут (скомпилировано GNU ARM toolchain’ом) или тут (скомпилировано Keil’ом).

arm sdk