|
Помогите стартануть с LPC |
|
|
|
Aug 12 2008, 12:10
|
Участник

Группа: Новичок
Сообщений: 38
Регистрация: 27-08-07
Пользователь №: 30 089

|
Здравствуйте!Приобрел плату с LPC2378 и как нормальный начинающий сразу сел в лужу.То ли неправильно сконфигурированы GPIO то ли еще чего,но включить/выключить светодиод(классика) не удается(P0.13).Эмулятор через J-LINK плату видит нормально.Вот мой первый исходник для ARM- (сам я электронщик а не программист поэтому написан извините как понимаю).Прошу помощи !
#include <iolpc2378.h>
//****************************************************************************** int main() { //***********************Инициализация акселератора FLASH памяти**************** MAMCR_bit.MODECTRL = 0;//MAM blocked MAMTIM_bit.CYCLES = 1;// FCLK<20 MHz MAMCR_bit.MODECTRL = 2;// MAM functions fully enabled MEMMAP=0x00000002; //***************************Инициализация системы****************************** SCS_bit.OSCRANGE = 0;// Fosc=1-20MHz SCS_bit.OSCEN = 1;//Main oscillator enabled while(SCS_bit.OSCSTAT==0);//waiting OSC ready //Disconnect PLL PLLCON_bit.PLLC = 0; PLLFEED = 0xAA; PLLFEED = 0x55; //Disable PLL PLLCON_bit.PLLE = 0; PLLFEED = 0xAA; PLLFEED = 0x55; //***********************Конфигурирование выводов портов************************ IO0DIR=0x00002000;// //IO1DIR=0x00080000;//
PINSEL0=0; PINSEL1=0; //****************************************************************************** IO0CLR=0x00002000; IO0SET=0x00002000; IO0CLR=0x00002000; IO0SET=0x00002000; IO0CLR=0x00002000; IO0SET=0x00002000; for( ; ; ) {} }
|
|
|
|
|
Aug 12 2008, 13:18
|
Частый гость
 
Группа: Свой
Сообщений: 147
Регистрация: 5-07-04
Из: Обнинск
Пользователь №: 261

|
Некогда прямо сейчас погружаться в конфигурирование. сори... В приложении к моему посту примеры для 2378 применительно к кейлу. Но тестовое моргание лучше сделать так: int main() { int i; // объявить переменную //***********************Инициализация акселератора FLASH памяти**************** ... //****************************************************************************** for( ; ; ) { IO0CLR=0x00002000; // зажигание светодиода низким уровнем (как было в исходном посте) for ( i = 0; i < 1000; i++ ); // пауза, для изменения паузы заменить 1000 на другое число. IO0SET=0x00002000; // гашение светодиода высоким уровнем (как было в исходном посте) } } Примеры:
examples_2378_keil.zip ( 1.32 мегабайт )
Кол-во скачиваний: 130
|
|
|
|
|
Aug 12 2008, 17:59
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(Golikov A. @ Aug 12 2008, 21:22)  А в памяти все там разместить стеки, и прочая фигня? И переход организовать с вектора ресета на маин. Это же надо все равно сделать, или я чего-то не понимаю? Одного же С файла текст которого привели не хватит, если только его залить ничего же не заработает или я не в курсе? Можете поподробнее рассказать? Я тоже начинающий армовод, учусь в иаре 5.11. Одного файла С достаточно, в опциях линкера надо указать файл (*.icf в 5-ом иаре, *.xcl - в 4-ом). В этом файле указывается диапазон флэш-памяти (адреса), ОЗУ, размеры стеков под все режимы ядра. Я такой файл взял из примеров. Причем там обычно в двух вариантах - для отладки в ОЗУ (прога заливавется в ОЗУ) и flash (прога прошивается во флэш). Для отладки в ОЗУ еще надо из примера взять mac-файл (указать его в опциях "Debbuger") - там прописано, чтобы иар перед стартом проги сделал через MEMMAP переотображение адресов исключений (0x00, 0x04..) на начало ОЗУ. Хотя можно и в проге MEMMAM прописать. Кому как нравиться... По поводу мигания светодиодом - я тоже только на второй день запустил. Попробуйте еще в регистре SCS бит GPIOM в 0 сбросить (это значит, что доступ к порту P0 через регистры IOSET, IODIR и т.д., в LPC23xx и LPC24xx есть еще режим FAST GPIO со своими регистрами). Это я к чему... Ваша прога из ОЗУ выполняется, скорее всего и во флэши что-нибудь записано (какая-нибудь тестова программа). До того, как отладчик проц схватит, выполняется прога из флэши, она вполне может успеть P0 в режим FAST GPIO переставить (у меня было так  ). Или методом тыка - тормозите проц, открывайте окно GPIO и вручную ставьте биты, где считаете нужным, пока светодиод не загорится Вот мой вариант мигания (файлы icf и mac я взял из примеров) - тока для LPC2478, но для вашего тоже подойдет 
main.zip ( 1.02 килобайт )
Кол-во скачиваний: 144
Сообщение отредактировал Student Pupkin - Aug 12 2008, 18:07
|
|
|
|
|
Aug 13 2008, 03:15
|
Участник

Группа: Свой
Сообщений: 26
Регистрация: 26-02-08
Из: Томск
Пользователь №: 35 391

|
Я в свое время делал (имхо) проще. Из иара взял готовый проект (arm\examples\NXP\LPC23xx\IAR-LPC-2378-SK\simple\GPIO\) - как раз ножкой дрыгает. Запустил его, начал копаться... Ну и далее по накатанному.
|
|
|
|
|
Aug 13 2008, 05:21
|
Участник

Группа: Новичок
Сообщений: 38
Регистрация: 27-08-07
Пользователь №: 30 089

|
Спасибо всем отозвавшимся.Сообщаю что этот исходник заработал за одним изменением-регистры типа IOxSET,CLR,PIN,DIR были заменены на FIOxSET и тп.В чем разница думаю разберусь самостоятельно.
Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному.
Данный пример компилировался в IAR EW-и программа выполняется из ОЗУ.Вопрос-как осуществить запись и выполнение программы из FLASH.
|
|
|
|
|
Aug 13 2008, 07:37
|
Участник

Группа: Свой
Сообщений: 26
Регистрация: 26-02-08
Из: Томск
Пользователь №: 35 391

|
Цитата(valeroon @ Aug 13 2008, 08:21)  Вопрос-как осуществить запись и выполнение программы из FLASH. xcl-файл заменить с LPC2378_Ram.xcl на LPC2378_Flash.xcl, если пользовались исходниками ИАРа Если нет - то мыслить в том же направлении
|
|
|
|
|
Aug 13 2008, 17:58
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(valeroon @ Aug 13 2008, 09:21)  Спасибо всем отозвавшимся.Сообщаю что этот исходник заработал за одним изменением-регистры типа IOxSET,CLR,PIN,DIR были заменены на FIOxSET и тп.В чем разница думаю разберусь самостоятельно. Так я же говорил - есть регистр System Controls and Status Register (SCS - стр.33 User Manual LPC23xx). В этом регистре есть бит GPIOM. Если он в '0' - управление портами P0 и P1 через регистры IOxDIR, IOxSET, IOxCLR. Это сделано для совместимости с ПО для прошлых серий микроконтроллеров. Если же этот бит в '1' - управление P0 и P1 осуществляется через регистры FIOxSET и т.п. Или вы пробовали и не помогает?
|
|
|
|
|
Aug 12 2009, 16:17
|
Группа: Участник
Сообщений: 12
Регистрация: 12-08-09
Пользователь №: 51 850

|
Здравствуйте! У меня похожая ситуация, только наоборот немного.. Я пока начинающий в армах. Использую МК LPC2368. Среда: IAR Embedded Workbench 5.0 Evaluation. Конструкционно обусловлено использование выводов 68 (P2.5), 69 (P2.4), 70 (P2.3), 73 (P2.2), 74 (P2.1), 75 (P2.0). Не получается изменять уровень на выводах. Пример программы: Код //********************************* #include <iolpc2368.h> int main(void) { PINSEL4_bit.P2_0=0; FIO2MASK_bit.P2_0=0; FIO2DIR_bit.P2_0=1;
... FIO2SET_bit.P2_0=1; FIO2CLR_bit.P2_0=1; ...
} //********************************* В datasheet видел следующее: GPIO порты PORT0 и PORT1 могут работать как в обычном режиме, так и в улучшенном (fast mode). А порты PORT2, PORT3... могут работать только в fast. Пробовал писать подобную программу для PORT0, только использовал регистры IO0DIR, IO0SET, IO0CLR - программа работала (и в нормальном выполнении, и в режиме debug пошагово результат был виден и в watch, и на осциллографе на 76 выводе для P0.9). Потом решил использовать режим fast. Установка бита GPIOM в регисте SCS не помогла, т.к. регистры FIO0PIN, FIOSET... не работали (в FIO0PIN значение не изменялось ни в watch, ни на осциллографе, значение бита GPIOM изменялось). В общем получается только "дергать" ногой порта 0 и только в legacy режиме. Enhanced fast режим не работает ни для PORT0 ни для PORT2. Подскажите, пожалуйста, в чём может быть дело?
Причина редактирования: Оформление цитаты исходника.
|
|
|
|
|
Aug 12 2009, 18:42
|

Местный
  
Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517

|
Цитата(aaarrr @ Aug 13 2008, 10:32)  И снова Редькин! Попробуйте поискать фамилию этого "автора" на форуме. Думаю, сразу станет все ясно. Да что вы всё на Редькина, вполне приличная книга для начинающих. Не написано же что учебник по Си. Примеры на Си корявые, а остальное очень даже ничего. Нашли минус в 10% книги и понесли.... Напишите лучше, в чём проблема то
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|