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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Простейший код для ARM LPC2148 не работает, Помогите советом
Alexandr
сообщение Jun 17 2008, 20:02
Сообщение #1


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Попала ко мне в руки учебная плата с процессором LPC2148 - плата EA-EDU-001, разработанная конторой Embedded Artists. Посмотреть и скачать описание можно тут http://www.megachip.ru/item.php?item_id=670612 Хорошая плата, много периферии. Купил книгу Редькина. Изучил. Все вроде понятно. Написал простенькую программу под IAR - должна она была PLL подключить, таймер и прерывание настроить и по прерыванию светодиодами мигать. В симуляторе прогнал - работает. Записал в плату - тишина. Возился, возился - в IAR-овском симуляторе и в NoICE работает, а в железе - нет! Упростил программу до нескольких строк - чтоб только светодиоды загорелись после сброса (схему включения светодиодов прилагаю). И снова тишина. И можно было бы списать на то, что плата дохлая, но записав в нее фирменную программу я наглядно убедился в том, что все светодиоды мигают. Видимо я не понимаю какой-то простой, но важной вещи. Подскажите в чем ошибка.

Код
#include <iolpc2148.h>

void main(void)
{
IO0DIR=0x0000FF00;  
IO0CLR=0x0000FF00;

while (1)
  {
  asm ("nop");
  }

}

Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Jun 18 2008, 04:56
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Смотрите, правильно ли определены области RAM, Flash в проекте, как стек инициализируется.
Чем заливаете Flash? Пишется ли контрольная сумма векторов прерываний?
asm "nop" - кстати абсолютно лишнее.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Jun 20 2008, 22:15
Сообщение #3


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Цитата(Andy Mozzhevilov @ Jun 18 2008, 08:56) *
Смотрите, правильно ли определены области RAM, Flash в проекте, как стек инициализируется.
Чем заливаете Flash? Пишется ли контрольная сумма векторов прерываний?
asm "nop" - кстати абсолютно лишнее.


А где это посмотреть можно? Я только начал работу с IAR. Код программы приведен в первом посте. Значит все области стоят по умолчанию в настройках компилятора?

Флэшка программируется через RS232 с помощью штатного кабеля платы.

Про контрольную сумму векторов прерываний ничего не знаю. Где посмотреть?

Вроде программа то всего 5 строк, а код получился размером в 993 байта. Значит компилятор добавил нечто свое.
А еще мне тут подумалось - а не может сидеть в памяти процессора какой-нибудь хитрый загрузчик, воспринимающий только определенный код программы? Хотя я вроде всю память стирал. В общем тяжко идет освоение.


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 21 2008, 04:45
Сообщение #4


Гуру
******

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



Цитата(Alexandr @ Jun 21 2008, 00:15) *
Флэшка программируется через RS232 с помощью штатного кабеля платы.

Штатность кабеля не имет значения,а вот софт для заливки может и не править ту самую:
Цитата
Про контрольную сумму векторов прерываний ничего не знаю. Где посмотреть?

Про сумму смотреть в документации - целый раздел посвященный загрузке. Книжку для обзора (только бога ради не Редькина - тут уже предлагали сжечь его на костре из его книг, и не могу назвать такое предложение чрезмерно жестоким). Возъмите Тревор Мартин LPC2000.... Есть у него и конкретно по LPC23/24, но возможно ее нет на русском. Посмотрите на форуме AT200 программатор - он точно smile.gif умеет править контрольную сумму при загрузке.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Jun 23 2008, 20:27
Сообщение #5


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Разбираюсь по маленьку. Уже правильно настроил в компоновщике XLINK области флэш и RAM, размеры скеков в RAM. А вот как заставить IAR генерить контрольную сумму векторов так и не разобрался. Код по прежнему не работает. Думаю из-за этого. Можно конечно попробовать ее ручную посчитать и hex файл поправить, но я уверен что IAR это умеет.
Как заставить IAR писать контрольную сумму векторов?


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 23 2008, 20:33
Сообщение #6


Гуру
******

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



Цитата(Alexandr @ Jun 23 2008, 22:27) *
Как заставить IAR писать контрольную сумму векторов?

4.x не умеет. 5.x - умеет. По каким причинам Вы пытаетесь "старый" EWARM использовать?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 24 2008, 03:21
Сообщение #7


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Я дак просто свой startup.s79 с уже просчитанной контрольной суммой подключаю к проекту и никаких проблем. Хоть на IAR 4.xx, хоть на новом.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Jun 24 2008, 21:12
Сообщение #8


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Все, я ее победил. Внял совету zltigo и откомпилировал в 5-ом IAR-е. И все заработало. Спасибо всем кто откликнулся. Но не думайте, что тему можно закрывать. Изучение продолжается.
GetSmart, а Вам не составит труда прикрепить сюда Ваш startup.s79?


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 25 2008, 03:47
Сообщение #9


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Только это startup в самой минимальной конфигурации. В нём есть только переход на вектор IRQи контрольная сумма. Никакие другие исключения не отрабатываются. Но как ни странно, я этот startup использую в 90% своих программ.
Прикрепленные файлы
Прикрепленный файл  startup.rar ( 360 байт ) Кол-во скачиваний: 54
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 25 2008, 05:59
Сообщение #10


Гуру
******

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



Цитата(GetSmart @ Jun 25 2008, 05:47) *
Только это startup..

Это не startup, это совершенно не пригодный к использованию для чего-либо огрызок startup. Даже "таинственное число" использовать нельзя, поскольку ?cstartup находится неведомо где. Тогда-уж хоть так этот огрызок должен выглядеть
Код
              ;------------------------
                ORG     0x00
__program_start:
                ldr     pc,(?vect_entry + 4*0); 0x00  Reset
                ldr     pc,(?vect_entry + 4*1); 0x04  UND
                ldr     pc,(?vect_entry + 4*2); 0x08  SWI
                ldr     pc,(?vect_entry + 4*3); 0x0C  P_ABT
                ldr     pc,(?vect_entry + 4*4); 0x10  D_ABT
                dc32    0xB9205F80            ; 0x14 Summ of other vectors instructions
                ldr     pc,[pc,#-0xFF0]    ; 0x18 Jump directly to the address given by the AIC
                ldr     pc,(?vect_entry + 4*7); 0x1C  FRQ
;----------------------------------------------------------------------------
                ORG     0x20
              ; Constant table entries (for ldr pc) will be placed at 0x20
?vect_entry:
                dc32    ?cstartup      
                dc32    ...
                dc32    ...
                dc32    ...              
                dc32    ...
                dc32    0
                dc32    ...
                dc32    ...


Цитата(GetSmart @ Jun 25 2008, 05:47) *
Никакие другие исключения не отрабатываются.

Зря.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 25 2008, 06:31
Сообщение #11


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo)
Это не startup, это совершенно не пригодный к использованию для чего-либо огрызок startup. Даже "таинственное число" использовать нельзя, поскольку ?cstartup находится неведомо где.
Не пригодный вместе пишется smile.gif Кто тут боролся недавно за правописание?!

Не имеет значения где находится ?cstartup. Его адрес всё равно ляжет за границу 0x20, а команда ldr pc,=?cstartup всегда будет ldr pc,[pc,#+24]. Контрольная сумма считается по адресам от 0 до 0x1f.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 25 2008, 06:41
Сообщение #12


Гуру
******

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



Цитата(GetSmart @ Jun 25 2008, 10:31) *
Не имеет значения где находится ?cstartup. Его адрес всё равно ляжет за границу 0x20, а команда ldr pc,=?cstartup всегда будет ldr pc,[pc,#+24].

Это Вы зря. Теоретически ассемблер может спокойно впихнуть туда (на 0x20) нужные ему константы. Понятно, что в данном конкретном случае этого, скорее всего, никогда не будет, но писать все равно надо правильно. Добавьте в вектора переход на обработчик Abort вида ldr pc, =Abort и такой код благополучно пойдет лесом.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 25 2008, 06:48
Сообщение #13


Гуру
******

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



Цитата(GetSmart @ Jun 25 2008, 08:31) *
Не пригодный вместе пишется smile.gif Кто тут боролся недавно за правописание?!

Что поделаешь, русский не совсем мой родной язык, бывает sad.gif и хуже, но не специально и не в совсем уже диких количествах.
Цитата
Не имеет значения где находится ?cstartup. Его адрес всё равно ляжет за границу 0x20

Ляжет ЗА и необязательно НА, и контрольная сумма пойдет лесом. Понятно?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 25 2008, 06:57
Сообщение #14


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr)
Добавьте в вектора переход на обработчик Abort вида ldr pc, =Abort и такой код благополучно пойдет лесом.
Это ещё почему? Загрузка любой константы через команду ldr pc, =... всегда будет превращаться в ldr pc,[pc,#+..]. И если у меня в файле допустим ровно шесть таких загрузок, то они все лягут после команды LTORG с вполне предсказуемым смещением. Короче, если я заменю все фиктивные ссылки на реальные из других мест (модулей), то по адресам 0..0x1f останется те же самые коды. Проблема будет если один и тот же адрес (вектор) загружать для разных исключений, тогда компилятор объединит эти ссылки и машинные коды изменятся. Но так делать строго не рекомендуется smile.gif

Цитата(zltigo)
Ляжет ЗА и необязательно НА, и контрольная сумма пойдет лесом. Понятно?
Нет. Хотите поговорить об этом? smile.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 25 2008, 07:02
Сообщение #15


Гуру
******

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



Цитата(GetSmart @ Jun 25 2008, 10:57) *
Но так делать строго не рекомендуется smile.gif

Строго не рекомендуется делать так, как сделано у Вас - заниматься предсказанием смещений.
Go to the top of the page
 
+Quote Post

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

 


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


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