Category: ARM

Ноя 17 2010

Прерывания в Cortex M3. Часть 2

В первой части (http://32bit.me/?p=839) были приведены некоторые сведения о структуре контроллера прерываний Cortex M3. В этой части будут рассматриваться примеры обработки прерываний в этой архитектуре.

Read more »

Ноя 12 2010

Прерывания в Cortex M3. Часть 1

По сравнению с микроконтроллерами ARM7, такими как LPC2368, в архитектуре Cortex M3 наибольшей модернизации подверглась система прерываний. Она стала существенно более сложной и гибкой. Ниже будут рассмотрены некоторые особенности нового контроллера прерываний (Nested Vectored Interrupt Controller, NVIC).

Read more »

Ноя 11 2010

Repetitive Interrupt Timer

Repetitive Interrupt Timer (RIT) является ещё одним таймером, которого не было в ARM7, и который появился в Cortex M3. Как следует из названия, он предназначен для генерации прерываний, повторяющихся через определённые промежутки времени. Его структура намного проще, чем у обычного таймера-счётчика, но несколько сложнее, чем у SysTick, рассмотренного здесь: http://32bit.me/?p=796. В большинстве практических случаев эти таймеры взаимозаменяемы.
Ниже будет рассмотрено применение таймера RIT.

Read more »

Ноя 10 2010

Таймер SysTick

В микроконтроллерах LPC17xx (ядро Cortex M3), наряду с обычными универсальными таймерами-счётчиками в количестве 4-х штук есть два дополнительных таймера: SysTick и Repetitive Interrupt Timer, использование которых позволяет освободить универсальные таймеры-счётчики для других целей.

Read more »

Июл 27 2010

Отладка прибора

Read more »

Июл 15 2010

Конфигурация памяти в IAR

Проект, написанный на С++ в IAR под микроконтролер LPC2368 (ядро ARM7TDMI), не заработал после перекомпиляции под LPC1768 (ядро Cortex M3). Предпринятые исследования показали, что программа падает на совершенно невинной строке:

AddControl(new usBmpButton(110, 9, 17, 18, 10, BTN_FORWARD, MSG_BTN_FORWARD));

то есть, как нетрудно догадаться, именно на операции выделения памяти new.

Дальнейшее изучение проблемы привело к файлам конфигурации, хранящимся в папке config проекта. В файле LPC1768_Flash.icf есть строка:

define symbol __ICFEDIT_size_heap__     = 0x400;

то есть на «кучу» (динамически распределяемую память) отводится всего лишь 1 кбайт памяти! В старом проекте в аналогичном файле было указано значение 0x6000, т.е. 24 кбайта! После изменения значения программа заработала.

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

Июл 09 2010

IAR, Cortex M3 и C++

При перетаскивании проекта с LPC2368 (ядро ARM7TDMI) на LPC1768, который является pin-to-pin совместимым с LPC2368, но на ядре Cortex M3, столкнулся со следующими проблемами и особенностями:

Read more »

Июн 01 2010

Плата нового прибора

Плата прибора, разработкой которого я сейчас занимаюсь. Плата содержит микроконтроллер LPC1768 и четыре гальванически изолированных (друг от друга и от процессора) каналов ЦАП (токовые выходы 4-20 мА, 12 разрядов), а также различные порты (USB, RS-232, RS-485).

Май 18 2010

Семинар NXP/ARM

Вчера в Екатеринбурге состоялся семинар, посвящённый продукции фирмы NXP — микроконтроллерам с ядром Cortex M3.

Семинар проводила фирма SIMECS из Санкт-Петербурга (www.microcontroller.ru) и фирма «Радиоэлектроника», г. Екатеринбург (www.radioel.ru).

Был прочитан доклад по архитектуре Cortex M3, по среде разработки Keil, а также проведён тренинг на базе отладочного набора Keil с микроконтроллером LPC1768.

Май 11 2010

Web-сервер

На самом деле это плата Ethernet-контроллера Wiznet W5100 (вверху), соединённая с отладочной платой c микроконтроллером ARM (LPC). Плата между ними служит для соединения. Также на верхней плате есть флеш-память в виде SD-карты.

Под катом ещё фото.

Read more »