реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите стартануть с LPC
valeroon
сообщение Aug 12 2008, 12:10
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 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( ; ; ) {}

}
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 12 2008, 12:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

Кеил вроде как сам умеет такой код делать. Для иара его можно выдрать из примера.
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
richie
сообщение Aug 12 2008, 13:18
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 12 2008, 14:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Golikov A. @ Aug 12 2008, 14:28) *
Вам надо добавить...

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 12 2008, 17:22
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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


А в памяти все там разместить стеки, и прочая фигня? И переход организовать с вектора ресета на маин. Это же надо все равно сделать, или я чего-то не понимаю? Одного же С файла текст которого привели не хватит, если только его залить ничего же не заработает или я не в курсе?
Можете поподробнее рассказать?
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Aug 12 2008, 17:59
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760



Цитата(Golikov A. @ Aug 12 2008, 21:22) *
А в памяти все там разместить стеки, и прочая фигня? И переход организовать с вектора ресета на маин. Это же надо все равно сделать, или я чего-то не понимаю? Одного же С файла текст которого привели не хватит, если только его залить ничего же не заработает или я не в курсе?
Можете поподробнее рассказать?

Я тоже начинающий армовод, учусь в иаре 5.11. smile.gif
Одного файла С достаточно, в опциях линкера надо указать файл (*.icf в 5-ом иаре, *.xcl - в 4-ом). В этом файле указывается диапазон флэш-памяти (адреса), ОЗУ, размеры стеков под все режимы ядра. Я такой файл взял из примеров. Причем там обычно в двух вариантах - для отладки в ОЗУ (прога заливавется в ОЗУ) и flash (прога прошивается во флэш). Для отладки в ОЗУ еще надо из примера взять mac-файл (указать его в опциях "Debbuger") - там прописано, чтобы иар перед стартом проги сделал через MEMMAP переотображение адресов исключений (0x00, 0x04..) на начало ОЗУ. Хотя можно и в проге MEMMAM прописать. Кому как нравиться... smile.gif
По поводу мигания светодиодом - я тоже только на второй день запустил.
Попробуйте еще в регистре SCS бит GPIOM в 0 сбросить (это значит, что доступ к порту P0 через регистры IOSET, IODIR и т.д., в LPC23xx и LPC24xx есть еще режим FAST GPIO со своими регистрами).
Это я к чему... Ваша прога из ОЗУ выполняется, скорее всего и во флэши что-нибудь записано (какая-нибудь тестова программа). До того, как отладчик проц схватит, выполняется прога из флэши, она вполне может успеть P0 в режим FAST GPIO переставить (у меня было так smile.gif ).
Или методом тыка - тормозите проц, открывайте окно GPIO и вручную ставьте биты, где считаете нужным, пока светодиод не загорится
Вот мой вариант мигания (файлы icf и mac я взял из примеров) - тока для LPC2478, но для вашего тоже подойдет smile.gifПрикрепленный файл  main.zip ( 1.02 килобайт ) Кол-во скачиваний: 144


Сообщение отредактировал Student Pupkin - Aug 12 2008, 18:07
Go to the top of the page
 
+Quote Post
Sat360
сообщение Aug 13 2008, 03:15
Сообщение #7


Участник
*

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



Я в свое время делал (имхо) проще. Из иара взял готовый проект (arm\examples\NXP\LPC23xx\IAR-LPC-2378-SK\simple\GPIO\) - как раз ножкой дрыгает. Запустил его, начал копаться... Ну и далее по накатанному.
Go to the top of the page
 
+Quote Post
valeroon
сообщение Aug 13 2008, 05:21
Сообщение #8


Участник
*

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



Спасибо всем отозвавшимся.Сообщаю что этот исходник заработал за одним изменением-регистры типа
IOxSET,CLR,PIN,DIR были заменены на FIOxSET и тп.В чем разница думаю разберусь самостоятельно.

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

Данный пример компилировался в IAR EW-и программа выполняется из ОЗУ.Вопрос-как осуществить запись и выполнение программы из FLASH.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 13 2008, 06:32
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(valeroon @ Aug 13 2008, 09:21) *
Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному.

И снова Редькин! Попробуйте поискать фамилию этого "автора" на форуме. Думаю, сразу станет все ясно.
Go to the top of the page
 
+Quote Post
Sat360
сообщение Aug 13 2008, 07:37
Сообщение #10


Участник
*

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



Цитата(valeroon @ Aug 13 2008, 08:21) *
Вопрос-как осуществить запись и выполнение программы из FLASH.

xcl-файл заменить с LPC2378_Ram.xcl на LPC2378_Flash.xcl, если пользовались исходниками ИАРа
Если нет - то мыслить в том же направлении wink.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 13 2008, 09:55
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(valeroon @ Aug 13 2008, 07:21) *
Насчет бездумного копирования кода-за пример был взят исходник из книги(П.П. Редькин Микроконтроллеры ARM семейства LPC2000).Не имел оснований не доверять написанному.

Нет словsad.gif Настоятельно рекомендую ознакомитмся с оценкой "творчества" Редькина на этом форуме.
http://electronix.ru/forum/index.php?showt...E8%ED&st=50


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Aug 13 2008, 17:58
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 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 и т.п. smile.gif
Или вы пробовали и не помогает?
Go to the top of the page
 
+Quote Post
mtronic
сообщение Aug 12 2009, 16:17
Сообщение #13





Группа: Участник
Сообщений: 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.

Подскажите, пожалуйста, в чём может быть дело?
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
*SERG
сообщение Aug 12 2009, 18:42
Сообщение #14


Местный
***

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



Цитата(aaarrr @ Aug 13 2008, 10:32) *
И снова Редькин! Попробуйте поискать фамилию этого "автора" на форуме. Думаю, сразу станет все ясно.

Да что вы всё на Редькина, вполне приличная книга для начинающих. Не написано же что учебник по Си.
Примеры на Си корявые, а остальное очень даже ничего. Нашли минус в 10% книги и понесли....
Напишите лучше, в чём проблема то rolleyes.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 12 2009, 18:59
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(*SERG @ Aug 12 2009, 22:42) *
Примеры на Си корявые, а остальное очень даже ничего.

Для начинающего достаточно информации, изложенной в user manual'ах и datasheet'ах (ну, если их читать, конечно).
А эта книжка специально для ленивых - с опечатками и устаревшими на пару-тройку лет данными.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016