valeroon 0 12 августа, 2008 Опубликовано 12 августа, 2008 · Жалоба Здравствуйте!Приобрел плату с 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( ; ; ) {} } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 августа, 2008 Опубликовано 12 августа, 2008 · Жалоба Вам надо добавить кодик который проведет инициализацию всего и вся и передаст управление в функцию маин. При старте кристал сам не передаст управление в маин. Вам нужен еще кусок кода, который отработает начальную загрузку. Кеил вроде как сам умеет такой код делать. Для иара его можно выдрать из примера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
richie 0 12 августа, 2008 Опубликовано 12 августа, 2008 · Жалоба Некогда прямо сейчас погружаться в конфигурирование. сори... В приложении к моему посту примеры для 2378 применительно к кейлу. Но тестовое моргание лучше сделать так: int main() { int i; // объявить переменную //***********************Инициализация акселератора FLASH памяти**************** ... //****************************************************************************** for( ; ; ) { IO0CLR=0x00002000; // зажигание светодиода низким уровнем (как было в исходном посте) for ( i = 0; i < 1000; i++ ); // пауза, для изменения паузы заменить 1000 на другое число. IO0SET=0x00002000; // гашение светодиода высоким уровнем (как было в исходном посте) } } Примеры: examples_2378_keil.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 12 августа, 2008 Опубликовано 12 августа, 2008 · Жалоба Вам надо добавить... Не морочте человеку голову - на начальном этапе ему ничего не надо (он и так уже,похоже,по чьим-то советам бездумно напихал яко-бы мнициализации MAM и PLL) ибо базовый cstartup штатная принадлежность наряду с библиотеками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 августа, 2008 Опубликовано 12 августа, 2008 · Жалоба Не морочте человеку голову - на начальном этапе ему ничего не надо (он и так уже,похоже,по чьим-то советам бездумно напихал яко-бы мнициализации MAM и PLL) ибо базовый cstartup штатная принадлежность наряду с библиотеками. А в памяти все там разместить стеки, и прочая фигня? И переход организовать с вектора ресета на маин. Это же надо все равно сделать, или я чего-то не понимаю? Одного же С файла текст которого привели не хватит, если только его залить ничего же не заработает или я не в курсе? Можете поподробнее рассказать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Student Pupkin 0 12 августа, 2008 Опубликовано 12 августа, 2008 (изменено) · Жалоба А в памяти все там разместить стеки, и прочая фигня? И переход организовать с вектора ресета на маин. Это же надо все равно сделать, или я чего-то не понимаю? Одного же С файла текст которого привели не хватит, если только его залить ничего же не заработает или я не в курсе? Можете поподробнее рассказать? Я тоже начинающий армовод, учусь в иаре 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 Изменено 12 августа, 2008 пользователем Student Pupkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sat360 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Я в свое время делал (имхо) проще. Из иара взял готовый проект (arm\examples\NXP\LPC23xx\IAR-LPC-2378-SK\simple\GPIO\) - как раз ножкой дрыгает. Запустил его, начал копаться... Ну и далее по накатанному. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
valeroon 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Спасибо всем отозвавшимся.Сообщаю что этот исходник заработал за одним изменением-регистры типа IOxSET,CLR,PIN,DIR были заменены на FIOxSET и тп.В чем разница думаю разберусь самостоятельно. Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному. Данный пример компилировался в IAR EW-и программа выполняется из ОЗУ.Вопрос-как осуществить запись и выполнение программы из FLASH. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному. И снова Редькин! Попробуйте поискать фамилию этого "автора" на форуме. Думаю, сразу станет все ясно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sat360 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Вопрос-как осуществить запись и выполнение программы из FLASH. xcl-файл заменить с LPC2378_Ram.xcl на LPC2378_Flash.xcl, если пользовались исходниками ИАРа Если нет - то мыслить в том же направлении ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному. Нет слов:( Настоятельно рекомендую ознакомитмся с оценкой "творчества" Редькина на этом форуме. http://electronix.ru/forum/index.php?showt...E8%ED&st=50 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Student Pupkin 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Спасибо всем отозвавшимся.Сообщаю что этот исходник заработал за одним изменением-регистры типа 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 и т.п. :) Или вы пробовали и не помогает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mtronic 0 12 августа, 2009 Опубликовано 12 августа, 2009 · Жалоба Здравствуйте! У меня похожая ситуация, только наоборот немного.. Я пока начинающий в армах. Использую МК 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. Подскажите, пожалуйста, в чём может быть дело? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 12 августа, 2009 Опубликовано 12 августа, 2009 · Жалоба И снова Редькин! Попробуйте поискать фамилию этого "автора" на форуме. Думаю, сразу станет все ясно. Да что вы всё на Редькина, вполне приличная книга для начинающих. Не написано же что учебник по Си. Примеры на Си корявые, а остальное очень даже ничего. Нашли минус в 10% книги и понесли.... Напишите лучше, в чём проблема то :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 августа, 2009 Опубликовано 12 августа, 2009 · Жалоба Примеры на Си корявые, а остальное очень даже ничего. Для начинающего достаточно информации, изложенной в user manual'ах и datasheet'ах (ну, если их читать, конечно). А эта книжка специально для ленивых - с опечатками и устаревшими на пару-тройку лет данными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться