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

 
 
 
Reply to this topicStart new topic
> Помогите запустить первую програмку, ARM7-LPC2148
imiron13
сообщение Jan 5 2010, 19:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-02-09
Из: Минск
Пользователь №: 45 206



Написал первую программку - некоторые из светодиодов зажечь,некоторые потушить.
В протеусе работает (там использую LPC2138), на отладочной не хочет. Использую
Keil uVision 4.00a, программатор MT-Link v6.0,дрова-Segger.
Шить прямо из Keil не получается, пишет, что этот программатор разработан только для
IAR. Шью HEX через Segger JFlash. При попытке прошить пишет, что HEX содержит
неверную контрольную сумму и предлагает вставить правильную. При использовании
готового HEX демопрограммы к отлад плате, тоже ругается на CRC, но после исправления
шьет и все работает. Моя же программа шьется,но не работает. Не могу сам разобраться
с чем проблемы: с кодом или с прошиванием. Подскажите, что тут может быть не так.

На плате: контроллер LPC2148, кварц-12МГц,светодиоды подключены к P0.8-P0.15,
зажигаюстя нулями.

Текст програмки:
CODE
#include <LPC214X.H>

#define LEDS_MSK 0x0000FF00 /* P0.8..15 */
#define LED1 0x00000100 /* P0.8 */
#define LED2 0x00000200 /* P0.9 */
#define LED3 0x00000400 /* P0.10 */
#define LED4 0x00000800 /* P0.11 */


int main (void)
{
PINSEL1 = 0x40004000; // P0.23 - VBus(?),P0.31- UP_LED(?),остальные-GPIO

IO0DIR = LEDS_MSK; // пины светодиодов - на вых
IO0CLR = LEDS_MSK; // все зажечь (подать 0)
IO0SET = LED2; // 2-й потушить (подать 1)
for(;;);
}


Конфигурация:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jan 5 2010, 23:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



И что Вы стараетесь получить? Протеус с одним ядром, железка с другим, кривые дрова (руки?) и тд с жытаг?
Go to the top of the page
 
+Quote Post
imiron13
сообщение Jan 6 2010, 09:08
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-02-09
Из: Минск
Пользователь №: 45 206



Цитата(toweroff @ Jan 6 2010, 01:33) *
И что Вы стараетесь получить? Протеус с одним ядром, железка с другим, кривые дрова (руки?) и тд с жытаг?

Ну,в протеусе LPC2138,в железке LPC2148,ядро же одно,в коде меняю хедер,остальное же одинаковое.
Насчет кривости дров - демопрога норм шьется и работает, в протеусе тоже работает -т.е.код как бы рабочий.
Подскажите хотя бы все ли в порядке с кодом и конфигурацией.
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Jan 7 2010, 01:55
Сообщение #4


Местный
***

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



Возможно оффтоп... Тут пробегала тема, как у мт-линка обновить прошивку, чтобы его кейл признал. smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 7 2010, 08:21
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(imiron13 @ Jan 5 2010, 21:55) *
В протеусе работает (там использую LPC2138), на отладочной не хочет.
А выложите-ка сюда листинг (в запакованном, разумеется, виде). Не работал с Кейлом, но если память не изменяет - ему надо было в проект кроме собственно исходника добавлять еще и стартап-файл.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
imiron13
сообщение Jan 7 2010, 10:02
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-02-09
Из: Минск
Пользователь №: 45 206



Цитата(Сергей Борщ @ Jan 7 2010, 10:21) *
А выложите-ка сюда листинг (в запакованном, разумеется, виде). Не работал с Кейлом, но если память не изменяет - ему надо было в проект кроме собственно исходника добавлять еще и стартап-файл.


Тут проекты для Keil4 и для IAR5.40(не работает даже в протеусе) и схема в протеусе. Стартап для Keil - statup.s (его настройка в 1-м посте на скрине), в IAR не разобрался где этот стартап и как его настраивать. Если поможете с IAR - еще лучше.
Заранее благодарю за помощь.

Цитата(Student Pupkin @ Jan 7 2010, 03:55) *
Возможно оффтоп... Тут пробегала тема, как у мт-линка обновить прошивку, чтобы его кейл признал. smile.gif

Перешивать не могу в любом случае: это все добро у меня во временном пользовании. Буду мучаться с тем, что есть.
Прикрепленные файлы
Прикрепленный файл  LEDS_Keil4.ZIP ( 135.01 килобайт ) Кол-во скачиваний: 25
Прикрепленный файл  LEDS_IAR540.zip ( 132.76 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 7 2010, 11:04
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(imiron13 @ Jan 7 2010, 12:02) *
Тут проекты для Keil4 и для IAR5.40(не работает даже в протеусе) и схема в протеусе. Стартап для Keil - statup.s (его настройка в 1-м посте на скрине),
Очень-очень смущает в .map фраза:
Код
==============================================================================

Removing Unused input sections from the image.

    Removing startup.o(RESET), (272 bytes).

1 unused section(s) (total 272 bytes) removed from the image.

==============================================================================
Дизассемблировал .hex, получилось такое начало:
Код
Disassembly of section .sec1:

00000000 <.sec1>:
   0:    eb000000     bl    0x8
   4:    eb000025     bl    0xa0
   8:    e28f002c     add    r0, pc, #44; 0x2c
   c:    e8900c00     ldm    r0, {sl, fp}
  10:    e08aa000     add    sl, sl, r0
  14:    e08bb000     add    fp, fp, r0
  18:    e24a7001     sub    r7, sl, #1; 0x1
  1c:    e15a000b     cmp    sl, fp
  20:    1a000000     bne    0x28
  24:    eb00001d     bl    0xa0
  28:    e8ba000f     ldm    sl!, {r0, r1, r2, r3}
  2c:    e24fe018     sub    lr, pc, #24; 0x18
  30:    e3130001     tst    r3, #1; 0x1
Тут отсутствуют вектора исключений. То, что этот код работает в протеусе - чистая случайность. Он работает потому, что в вашей простой программе не используются ни исключения (прерывания), ни переменные, ни даже вызовы подпрограмм. Когда загрузчик переписывает контрольную сумму векторов, которые должны тут быть - он рушит одну из команд. Вам надо разобраться - почему линкер выкидывает секцию RESET. Специалисты по Кейлу, ау!!!

Цитата(imiron13 @ Jan 7 2010, 12:02) *
в IAR не разобрался где этот стартап и как его настраивать. Если поможете с IAR - еще лучше.
В IAR подходящий в большинстве случаев стартап лежит в библиотеке и подлинковывается автоматически. С пятым иаром не помогу - ушел с четвертого в arm-gcc. Помню, что вся загвоздка в четвертом иаре была с выбором в настройках проекта правильного кристалла и скрипта линкера (под ваш конкретный кристалл, в пятом это будет файл .icf).
Вот, смотрите - в иаровском проекте у вас вектора есть:
Код
Disassembly of section .sec1:

00000000 <.sec1>:
   0:    e59ff018     ldr    pc, [pc, #24]; 0x20
   4:    e59ff018     ldr    pc, [pc, #24]; 0x24
   8:    e59ff018     ldr    pc, [pc, #24]; 0x28
   c:    e59ff018     ldr    pc, [pc, #24]; 0x2c
  10:    e59ff018     ldr    pc, [pc, #24]; 0x30
  14:    b8a06f60     stmialt    r0!, {r5, r6, r8, r9, sl, fp, sp, lr}
  18:    e59ff014     ldr    pc, [pc, #20]; 0x34
  1c:    e59ff014     ldr    pc, [pc, #20]; 0x38
  20:    00000080     andeq    r0, r0, r0, lsl #1
  24:    00000230     andeq    r0, r0, r0, lsr r2
  28:    00000230     andeq    r0, r0, r0, lsr r2
  2c:    00000230     andeq    r0, r0, r0, lsr r2
  30:    00000230     andeq    r0, r0, r0, lsr r2
  34:    00000230     andeq    r0, r0, r0, lsr r2
  38:    00000230     andeq    r0, r0, r0, lsr r2

Disassembly of section .sec2:

00000080 <.sec2>:
  80:    e10f0000     mrs    r0, CPSR
  84:    e3c0001f     bic    r0, r0, #31; 0x1f
  88:    e3800012     orr    r0, r0, #18; 0x12
  8c:    e121f000     msr    CPSR_c, r0
...........
Если ваш отладчик работает с ИАРом, то что вам мешает пройти программу по дизассемблированному листингу шагам и найти место, в котором происходит затык? Снимите в настройках проекта в разделе отладчика галочку "run to main" и при старте отладчик остановится на векторе сброса.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Jan 7 2010, 11:31
Сообщение #8


Местный
***

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



Цитата(imiron13 @ Jan 7 2010, 13:02) *
для IAR5.40(не работает даже в протеусе)...
Если поможете с IAR - еще лучше.

В ИАР-е стартап прикручивать не надо, он формируется сам, в смысле там имеется шаблон, как грица на все случаи жизни, так что если в проекте нет файла cstartup.s (), то автоматически вставляется этот шаблон (но невидимо для вас smile.gif ).
Не хватает вам файла *.icf - конфигурационного файла для линкера (linker, компоновщика). Я вот файл прицепил, но взял из IAR\...\arm\examples\NXP\LPC214x\...
Прикрепленный файл  LPC2148_flash.rar ( 743 байт ) Кол-во скачиваний: 86

В опциях проекта в разделе "linker" ставьте галку "Override default" и укажите путь к файлу *.icf.
Должно...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 7 2010, 11:41
Сообщение #9


Гуру
******

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



Цитата(Student Pupkin @ Jan 7 2010, 14:31) *
В ИАР-е стартап прикручивать не надо, он формируется сам, в смысле там имеется шаблон, как грица на все случаи жизни, так что если в проекте нет файла cstartup.s (), то автоматически вставляется этот шаблон (но невидимо для вас smile.gif ).

Ой какая пурга sad.gif. Да откомпилированный среднепотолочный startup просто лежит с каждой из библиотек. Вот и все - никаких "шаблонов", никаких "невидимок". Если в проекте есть, как и из чего сделать нужный объектник, то тогда он линкуется вместо готового библиотечного. Совершенно обычное поведение ДЛЯ ЛЮБЫХ библиотечных функций и ЛЮБЫХ компиляторов.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
imiron13
сообщение Jan 7 2010, 15:32
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-02-09
Из: Минск
Пользователь №: 45 206



Спасибо всем большое за помощь - самому тяжело разбираться.
Пошагал отладчиком: уходил на обработку исключения после команды PUSH,
получается не было памяти для стека. Последовал советам, вставил
файл *.icf - и все заработало!
Ну,как я понял,в *.icf описываются доступные области памяти, размеры стеков,
а как можно настроить PLL,MAM в IAR?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jan 7 2010, 16:22
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(imiron13 @ Jan 7 2010, 18:32) *
а как можно настроить PLL,MAM в IAR?

а какая разница в чем настраивать?
в инициализации правильно заполняем нужными значениями соответствующие конфигурационные регистры. Все описано в User manual
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Jan 7 2010, 21:45
Сообщение #12


Местный
***

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



Цитата(imiron13 @ Jan 7 2010, 18:32) *
Ну,как я понял,в *.icf описываются доступные области памяти, размеры стеков,

Все примеры в iar-е для LPC2xx снабжаются двумя icf-файлами (из примеров их и воруйте smile.gif ):
1) для заливки программы во FLASH (xxx_FLASH.icf);
2) для заливки программы из ОЗУ (xxx_RAM.icf) - этот вариант чисто для отладки. Для использования такого варианта в примерах всегда еще есть mac-файл - RAM.mac (скрипт для отладчика по предварительному чтению-записи каких-либо участков памяти, SFR, и др. - в данном случае выполняется ремап таблицы векторов исключений на начало ОЗУ). Если используете вариант отладки в ОЗУ, то этот mac-файл нужно пристегнуть в опциях debugger.
Цитата(imiron13 @ Jan 7 2010, 18:32) *
а как можно настроить PLL,MAM в IAR?

Графического "визард-мастера" smile.gif у иара нет. По мне так для начальных экспериментов запускать их незачем - просто включите MainOsc и переключитесь на него, а MAM на такой частоте не нужен (а также не нужен, если отладку в ОЗУ выбрали).
Go to the top of the page
 
+Quote Post

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

 


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


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