Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите проморгаться
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
atana
Здравствуйте.
Имеется плата SK-LPC2478-S3E от StarterKit.

Между P0.16 и землей повесил светодиод, изначально он слабо светится, на ноге 2,3 В.
Написал простую программу для LPC2478:

#include <LPC24xx.H>

void delay (int cycles)
{
volatile int i;

for(i = 0; i<cycles; i++) //simple delay loop
{}
}

int main(void)
{
int cycles = 36000000;

PINSEL1 = 0; //P0.16-31 as GPIO
PINMODE1 = 0xFFFFFFFF; //P0.16-26 PULLDOWN
IODIR0 = 0x10000; // P0.16 as output

while(1)
{
IOSET0 = 0x10000; //P0.16 set

delay(cycles);

IOCLR0 = 0x10000; //P0.16 clear

delay(cycles);
}
}


Пишу в Keil, шью FlashMagic через COM. Отлаживаю OCD Commander'ом через Wiggler.
Светодиод не моргает (продолжает тускло светиться), шаги процессора по OCD Commander'у и симулятору кейла не совпадают.
Проект здесь: http://dl.dropbox.com/u/4180373/2nd_blinking.zip

Startup был предложен кейлом при создании проекта, вносил изменения по настройке клока - результатов никаких.

В коде main имеются ошибки?
Если нет, то, видимо, напортачил со startup'ом, но не могу разобраться где.

Может, кто-нибудь поделится 100% рабочим примером для LPC2478? Или подскажете что здесь не так?

До сих пор сидел на ПЛИС, решил подружить их с ARM и такая сходу незадача..


mempfis_
Когдато начинал осваивать lpc2468 в KEIL, но быстро перешел на IAR. Прикладываю пример табло которе делел на SK-LPC2468.
Если не изменяет память то чтото менял в стартапе - гдето какойто вектор не совпадал.
Посмотрите - вдруг поможет.

И кстати у Вас огромная задержка в цикле.
Для моргания светодиода при корректном стартапе и правльном файле кнфигурации памяти достаточно такого кода


Код
#include <NXP/iolpc2468.h>

volatile int cnt;
int    main(void)
{
    // Set io pins for led P0.21
    IO0DIR |= (1<<21);

    // Endless loop to toggle the red  LED P0.21
    for(;; )
    {
        IO0CLR = (1<<21);
        for( cnt = 2000000; cnt; cnt-- );
        IO0SET = (1<<21);
        for( cnt = 2000000; cnt; cnt-- );
    }
}
GetSmart
atana, контрольная сумма по адресу 0х14 неправильная. Поэтому запускается бутлоадер вместо программы. А прога в районе main() вроде нормальная, по поводу delay() не видно.

Почитайте в юзер мануале раздел 5.1.1 Criterion for Valid User Code
esaulenka
Цитата(atana @ Feb 13 2011, 07:18) *
Между P0.16 и землей повесил светодиод, изначально он слабо светится, на ноге 2,3 В.

Резистор-то есть? Некритично, конечно, но - нехорошо...

Цитата(atana @ Feb 13 2011, 07:18) *
Пишу в Keil, шью FlashMagic через COM. Отлаживаю OCD Commander'ом через Wiggler.

Я не знаю, что такое OCD Commander (да и вигглер видел только в коробке с барахлом. Остался от человека, который работал у нас года три назадwink.gif ). Этот коммандер флеш перезаписывает, или умеет только по шагам ходить?
Для человеческой работы всячески рекомендую клон JLink. Например, у того же стартеркита есть.

Цитата(atana @ Feb 13 2011, 07:18) *
шаги процессора по OCD Commander'у и симулятору кейла не совпадают.

А что этот коммандер показывает? Наверное, лучше всего будет скриншот.

Цитата(atana @ Feb 13 2011, 07:18) *
Startup был предложен кейлом при создании проекта, вносил изменения по настройке клока - результатов никаких.

Имеющиеся изменения мне нравятся. Т.е. ошибок там точно нет sm.gif
Сейчас клок вообще не настраивается, контроллер работает без PLL на внутреннем 4 МГц генераторе.

Цитата(atana @ Feb 13 2011, 07:18) *
В коде main имеются ошибки?
Если нет, то, видимо, напортачил со startup'ом, но не могу разобраться где.

Не вижу проблем.
Возможные грабли вроде удалось обойти:
- ошибка при настройки клока
- использование медленного GPIO вместо быстрого


Цитата(GetSmart @ Feb 13 2011, 10:24) *
atana, контрольная сумма по адресу 0х14 неправильная. Поэтому запускается бутлоадер вместо программы.

Маловероятно. Флешмэджик - штука умная, умеет самостоятельно считать контрольную сумму. Хотя, кто такой Macraigor, я не знаю.
Но проверить это легко - переставляем джампер "бут" в нормальное положение, запускаем - и флешмэджик по-прежнему может соединиться с платой.
atana
Цитата(mempfis_ @ Feb 13 2011, 09:53) *
Когдато начинал осваивать lpc2468 в KEIL, но быстро перешел на IAR. Прикладываю пример табло которе делел на SK-LPC2468.
Если не изменяет память то чтото менял в стартапе - гдето какойто вектор не совпадал.
Посмотрите - вдруг поможет.

И кстати у Вас огромная задержка в цикле.
Для моргания светодиода при корректном стартапе и правльном файле кнфигурации памяти достаточно такого кода


Код
#include <NXP/iolpc2468.h>

volatile int cnt;
int    main(void)
{
    // Set io pins for led P0.21
    IO0DIR |= (1<<21);

    // Endless loop to toggle the red  LED P0.21
    for(;; )
    {
        IO0CLR = (1<<21);
        for( cnt = 2000000; cnt; cnt-- );
        IO0SET = (1<<21);
        for( cnt = 2000000; cnt; cnt-- );
    }
}



Проморгался IAR'ом. Причем без Startup'а, только main.c с этим кодом и все.
В Keil'е такая фишка не прокатила, не заработало и со Startup'ом из вашего проекта.
Теперь возникла некоторая неопределенность: если Startup'а нет, то в каком режиме работает камень, какой сорс клока и какая частота. Но, я так понимаю, настройки PLL можно дополнительно прописывать ручками? Keil, собственно, графическим визардом и привлекал.

Задержка да, большая, поменял на 10000 - моргает 2-3 Гц. Но дело было точно не в этом, различие в яркости между тем неопределенным состоянием (кстати, выводы по дефолту в тристэйт инициализируются?) и нормальной логической единицей существенно.

Еще у меня параллельно вставал вопрос насчет отработки кода в OCD Commander'е: http://electronix.ru/forum/index.php?showtopic=86424. На ПЛИС с системой на MicroBlaze частенько так делаю, пишу tcl-скрипт, отрабатываю и уже потом пишу C-код. Правда, там это более оправдано из-за большого времени сборки проекта. А тут пока еще синтаксис не освоил.
GetSmart
Цитата(esaulenka @ Feb 13 2011, 14:38) *
Маловероятно. Флешмэджик - штука умная, умеет самостоятельно считать контрольную сумму. Хотя, кто такой Macraigor, я не знаю.
Но проверить это легко - переставляем джампер "бут" в нормальное положение, запускаем - и флешмэджик по-прежнему может соединиться с платой.

Да ладно. Судя по тускло светящемуся светодиоду, main() вообще не запускается. В приложенном HEX-е контр.сумма не верная. Тут всё просто очевидно.
atana
Цитата
Резистор-то есть? Некритично, конечно, но - нехорошо...

Да, конечно.

Цитата
Я не знаю, что такое OCD Commander (да и вигглер видел только в коробке с барахлом. Остался от человека, который работал у нас года три назадwink.gif ). Этот коммандер флеш перезаписывает, или умеет только по шагам ходить?
Для человеческой работы всячески рекомендую клон JLink. Например, у того же стартеркита есть.

И шьет и шагает: http://dl.dropbox.com/u/4180373/ocdcom.JPG
Это на примере рабочей програмы, в симуляторе уже даже не смотрел. С ног валюсь, спать надо)

MTLink-7 от StarterKit на неделе только приедет, а ковыряться времени только на выходных есть, потому и распаял по-быстрому Wiggler.

Цитата
Имеющиеся изменения мне нравятся. Т.е. ошибок там точно нет sm.gif
Сейчас клок вообще не настраивается, контроллер работает без PLL на внутреннем 4 МГц генераторе.

Т.е. в случае IAR'а без startup'а так же дефолтный внутренний клок на 4 МГц?

Видимо, продолжать буду в IAR.
esaulenka
Цитата(atana @ Feb 13 2011, 13:00) *
И шьет и шагает:

Никогда не пытался разобраться в работе загрузчика, но, видимо, это он и есть.
Кажется, он делает ремап и мы видим его работу где-то с середины.


Цитата(atana @ Feb 13 2011, 13:00) *
Т.е. в случае IAR'а без startup'а так же дефолтный внутренний клок на 4 МГц?

Не знаю, я только в IAR AVR работал. Может там какой-то визард есть. Но даташит вполне однозначен:
Цитата
Upon power up or any chip reset, the LPC2400 uses the IRC as the clock source.
Software may later switch to one of the other available clock sources.


Цитата(GetSmart @ Feb 13 2011, 13:00) *
Да ладно.

Да зуб даю wink.gif
FlashMagic записывает правильную контрольную сумму на LPC2134, LPC2138, LPC2366 и LPC2368. При этом никаких сообщений не выдаётся, исходный файл не меняется. Верификация также проходит, а вот считывание файла с последующим сравнением внешней утилитой - уже нет.
Почему бы ему не сделать то же самое на 2478, я не знаю.

В данном случае, скорее всего, мы наблюдаем результаты работы OCD Commander, который не настолько интеллектуален.
atana
Цитата
В данном случае, скорее всего, мы наблюдаем результаты работы OCD Commander, который не настолько интеллектуален.


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

Кстати, в один из разов проц крутился на адресах 0х10-0х14, в то время как симулятор Keil мирно их проскакивал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.