Перейти к содержанию
    

Помогите стартануть с LPC

Здравствуйте!Приобрел плату с 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( ; ; ) {}

 

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Кеил вроде как сам умеет такой код делать. Для иара его можно выдрать из примера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Некогда прямо сейчас погружаться в конфигурирование. сори...

В приложении к моему посту примеры для 2378 применительно к кейлу.

 

Но тестовое моргание лучше сделать так:

 

int main()

{ int i; // объявить переменную

 

//***********************Инициализация акселератора FLASH памяти****************

...

 

//******************************************************************************

 

for( ; ; ) {

IO0CLR=0x00002000; // зажигание светодиода низким уровнем (как было в исходном посте)

for ( i = 0; i < 1000; i++ ); // пауза, для изменения паузы заменить 1000 на другое число.

IO0SET=0x00002000; // гашение светодиода высоким уровнем (как было в исходном посте)

}

 

}

 

Примеры: examples_2378_keil.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам надо добавить...

Не морочте человеку голову - на начальном этапе ему ничего не надо (он и так уже,похоже,по чьим-то советам бездумно напихал яко-бы мнициализации MAM и PLL) ибо базовый cstartup штатная принадлежность наряду с библиотеками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не морочте человеку голову - на начальном этапе ему ничего не надо (он и так уже,похоже,по чьим-то советам бездумно напихал яко-бы мнициализации MAM и PLL) ибо базовый cstartup штатная принадлежность наряду с библиотеками.

 

А в памяти все там разместить стеки, и прочая фигня? И переход организовать с вектора ресета на маин. Это же надо все равно сделать, или я чего-то не понимаю? Одного же С файла текст которого привели не хватит, если только его залить ничего же не заработает или я не в курсе?

Можете поподробнее рассказать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в памяти все там разместить стеки, и прочая фигня? И переход организовать с вектора ресета на маин. Это же надо все равно сделать, или я чего-то не понимаю? Одного же С файла текст которого привели не хватит, если только его залить ничего же не заработает или я не в курсе?

Можете поподробнее рассказать?

Я тоже начинающий армовод, учусь в иаре 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

Изменено пользователем Student Pupkin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем отозвавшимся.Сообщаю что этот исходник заработал за одним изменением-регистры типа

IOxSET,CLR,PIN,DIR были заменены на FIOxSET и тп.В чем разница думаю разберусь самостоятельно.

 

Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному.

 

Данный пример компилировался в IAR EW-и программа выполняется из ОЗУ.Вопрос-как осуществить запись и выполнение программы из FLASH.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному.

И снова Редькин! Попробуйте поискать фамилию этого "автора" на форуме. Думаю, сразу станет все ясно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос-как осуществить запись и выполнение программы из FLASH.

xcl-файл заменить с LPC2378_Ram.xcl на LPC2378_Flash.xcl, если пользовались исходниками ИАРа

Если нет - то мыслить в том же направлении ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному.

Нет слов:( Настоятельно рекомендую ознакомитмся с оценкой "творчества" Редькина на этом форуме.

http://electronix.ru/forum/index.php?showt...E8%ED&st=50

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем отозвавшимся.Сообщаю что этот исходник заработал за одним изменением-регистры типа

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 и т.п. :)

Или вы пробовали и не помогает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

У меня похожая ситуация, только наоборот немного.. Я пока начинающий в армах.

Использую МК 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.

 

Подскажите, пожалуйста, в чём может быть дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И снова Редькин! Попробуйте поискать фамилию этого "автора" на форуме. Думаю, сразу станет все ясно.

Да что вы всё на Редькина, вполне приличная книга для начинающих. Не написано же что учебник по Си.

Примеры на Си корявые, а остальное очень даже ничего. Нашли минус в 10% книги и понесли....

Напишите лучше, в чём проблема то :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примеры на Си корявые, а остальное очень даже ничего.

Для начинающего достаточно информации, изложенной в user manual'ах и datasheet'ах (ну, если их читать, конечно).

А эта книжка специально для ленивых - с опечатками и устаревшими на пару-тройку лет данными.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...