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

 
 
10 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Несколько вопросов по lpc176x
vallav
сообщение May 24 2010, 16:34
Сообщение #31


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(igorsk @ May 24 2010, 19:17) *
Обычное сложение.


Увы не получается. Обычное сложение не проходит.
В стартапе от Кейла вообще ничего специального в восьмое слово не пишется, оно просто нулевое.
Было подозрение, что линкер придает восьмому слову нужное значение.
Но в загрузочном файле нули. Неужели загрузчик это делает?

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

Хотя стартап заносит в sp значение первого слова и делает переход по адресу во втором слове.
Недавно вычитал - стартап еще кое что делает - заносит в один из регистров системного таймера значение, которое соответствует 10 миллисекундным тикам при тактовой в 100 мегагерц.

Но как коряво написано описание таймеров в юзерманьюале...
Вдохновляет только одно - их в данном чипе много и они все 100 мегагерцовые и прилично наворченные...
Go to the top of the page
 
+Quote Post
sonycman
сообщение May 24 2010, 19:35
Сообщение #32


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Если контрольная сумма отсутствует в файле прошивки, значит, она вычисляется и подставляется в процессе записи во флеш.

Таймеры мне чем понравились, это тем, что они 32 битные, а не 16 как в STM.
В том, что они работают на частоте ядра, нет ничего удивительного.
Go to the top of the page
 
+Quote Post
vallav
сообщение May 25 2010, 05:05
Сообщение #33


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(sonycman @ May 24 2010, 23:35) *
Если контрольная сумма отсутствует в файле прошивки, значит, она вычисляется и подставляется в процессе записи во флеш.


Или вообще не вычисляется, а в описании - лажа.
Что намного более вероятно.


Цитата(sonycman @ May 24 2010, 23:35) *
Таймеры мне чем понравились, это тем, что они 32 битные, а не 16 как в STM.
В том, что они работают на частоте ядра, нет ничего удивительного.


Ага, для lpc17xx.
Есть кортексы, в которых это не так.
Go to the top of the page
 
+Quote Post
igorsk
сообщение May 25 2010, 18:50
Сообщение #34


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

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



Цитата(vallav @ May 25 2010, 06:05) *
Или вообще не вычисляется, а в описании - лажа.
Что намного более вероятно.

Залей прошивку в чип, прочитай назад и сравни.
Go to the top of the page
 
+Quote Post
vallav
сообщение May 26 2010, 06:45
Сообщение #35


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(igorsk @ May 25 2010, 22:50) *
Залей прошивку в чип, прочитай назад и сравни.


Спасибо за очень ценный совет.

Ну ни в жисть бы сам не догадался...
Go to the top of the page
 
+Quote Post
mrKirill
сообщение May 26 2010, 06:52
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Цитата(vallav @ May 26 2010, 12:45) *
Спасибо за очень ценный совет.
Ну ни в жисть бы сам не догадался...

//off-top
Свою манеру общения на форумах изменили бы на "помягче", а то глядишь скоро Вам вообще никто ничего отвечать не будет.
Go to the top of the page
 
+Quote Post
vallav
сообщение May 26 2010, 07:24
Сообщение #37


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(mrKirill @ May 26 2010, 10:52) *
//off-top
Свою манеру общения на форумах изменили бы на "помягче", а то глядишь скоро Вам вообще никто ничего отвечать не будет.


А по мягче - это как?
Вот на данный ответ Вы бы как прореагировали ( если помягче )?
Go to the top of the page
 
+Quote Post
vallav
сообщение May 26 2010, 12:22
Сообщение #38


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Вопрос по таймерам в lpc176x.
Есть ли внешний вход, который идет на счет не тактируясь клоком переферии?
А то получается, что частота внешнего клока должна быть не выше половины от тактовой...
Да и длительность любого из уровней больше длительности такта.
В пиках такой вход есть.
Go to the top of the page
 
+Quote Post
vallav
сообщение May 28 2010, 04:48
Сообщение #39


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Скомпилил аппноуту AN10866 от NXP - secondary USB bootloader в Keil.
При компиляции что то там исправлял.
Загрузил в плату mbed - работает.
Только, так как прога занимает 8K флеша, опции на пользовательскую прогу надо немного поменять.
Штука очень удобная. Чип прикидывается флешкой на 500К.
Компилишь прогу в .bin. Удаляешь старый .bin с этой флешки, копируюешь туда новый, нажимаешь сброс - новая прога работает.
Добавить к mbed пришлось - кабель с разъемом от резанный от мышки и проводок, чтобы замыкать на землю p1.20.
Кому интересно, файлы привожу. Там usbboot1 - сам загрузчик, а blinki2 - мигалка светодиодами mbed_а.
Прикрепленные файлы
Прикрепленный файл  usbboot1.rar ( 152.05 килобайт ) Кол-во скачиваний: 72
 
Go to the top of the page
 
+Quote Post
vallav
сообщение May 29 2010, 11:21
Сообщение #40


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Похоже рабочие исходники проги, которая после небольшой переделки позволит подключить lcp176x по USB к PCюку без промежуточных
чипов и без драйверов на максимальной скорости - неинтересны. Неужели это уже не актуально?
И еще, ну ладно загрузка проги через USB без наворотов неинтересна, а если ее дописать, чтобы она прикидывалась родным USB житагом
для Кейла и позволяла вести загрузку и отладку, эмулируя житаг?
Тоже не интересно? Что тогда будут делать многочисленные производители чипов переходников USB-UART и приставок житагов?
Да и плата с lpc176x будет как то не серьезно выглядеть - ни проводов ни деталей...
А если еще про USB обманывают и он будет работать на внутреннем RC генераторе - то вообще пипец.
Особенно если NXP все это защьет в ROM по просьбе трудящихся.

Ладно, тогда вернусь к начальной загрузке.
Слинковал я прогу для работы в ОЗУ целиком, вместе с таблицей прерываний.
Первые 8 слов загрузчика такие:
10000300 10000065 10000069 1000006b
1000006d 1000006f 10000071 00000000

Проверено, после включения питания работает.
И что будет, если после снятия сброса бутлоадер убедившись непонятно каким способом, что есть пользовательская прога,
первое слово загруpузит в sp и произведет переход по значению второго слова из таблицы прерываний?
А код переносить из флеши в ОЗУ и устанавливать битики в проце о том, что таблица прерываний не в нуле - кто будет? Загрузчик?
Так что в описании по этому поводу - полная лажа.
По моему мнению линкер по фиксированному адресу в начале флеша подключает свой кусок кода, который делает все начальные разборки.
И переход после отработки бутлоадера идет на этот адрес.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 29 2010, 11:57
Сообщение #41


Гуру
******

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



Цитата(vallav @ May 29 2010, 14:21) *
Похоже рабочие исходники проги, которая....

представляет собой цельнотянутый и писанный "бангалорскими" программерами загрузчик от NXP, действительно все кому хотелось взяли на NXP обсудили очень давноооо....
Цитата
И что будет, если после снятия сброса бутлоадер убедившись непонятно каким способом

"Способ" описан в мануале по самое немогу. То, что Вы не можете воспринять написанное, это уже Ваши проблемы.
Цитата
Так что в описании по этому поводу - полная лажа.

Это в голове sad.gif
Цитата
По моему мнению линкер по фиксированному адресу в начале флеша подключает свой кусок кода, который делает все начальные разборки.

smile.gif. Скрипт исполняется при загрузке через JTAG, в нем все и устанавливается для работы в RAM и прямо передается управление. В остальных случаях этим занимается startup. Так уж в 'С' принято испокон веков.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vallav
сообщение May 29 2010, 12:26
Сообщение #42


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(zltigo @ May 29 2010, 15:57) *
представляет собой цельнотянутый и писанный "бангалорскими" программерами загрузчик от NXP, действительно все кому хотелось взяли на NXP обсудили очень давноооо....

И в результате что?
Кстати у меня оригинал не компилился, пришлось ощибки исправлять.

Цитата(zltigo @ May 29 2010, 15:57) *
"Способ" описан в мануале по самое немогу. То, что Вы не можете воспринять написанное, это уже Ваши проблемы.

Вы это описание читали?
С приведенными мною 8 первыми словами во флешке согласовать смогете?
Или Вы только - болтать?

Цитата(zltigo @ May 29 2010, 15:57) *
smile.gif. Скрипт исполняется при загрузке через JTAG, в нем все и устанавливается для работы в RAM и прямо передается управление. В остальных случаях этим занимается startup. Так уж в 'С' принято испокон веков.


Увы, в startup_е нет даже инициализации sp. Именно с этого - а где же sp то инициализируется, я и начал ковырять startup.
И откуда startup_у знать, какую именно я раскладку памяти линкеру назначил?
Тем боле и startup и таблица прерываний в данном случае - в ОЗУ.
Что их туда из флеша при включении притания перемещает? Startup?

А то, что в 'C' принято испокон веков, в кортексах похерено.
Знаете, как в кортексном 'C' передача параметров в функцию происходит?

Вы бы лучше занимались тем, что у Вас хорошо получается - выписывание баньки, и не лезли туда,
где ничего не смыслите.
Можно я на Ваши глупости больше отвечать не буду?
Надеюсь это не против правил форума?

Сообщение отредактировал vallav - May 29 2010, 12:30
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 29 2010, 13:49
Сообщение #43


Гуру
******

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



Цитата(vallav @ May 29 2010, 15:26) *
Вы это описание читали?

Да. И даже понял. И вот это совершено спокойно написал: http://electronix.ru/forum/index.php?showt...60&start=60 оно этими самыми суммами и занимается в том числе.
Цитата
Увы, в startup_е нет даже инициализации sp.

Есть. Вот, например, у меня так:
Код
static unsigned long system_stack[STACK_SIZE] @ ".noinit";

__root const Vector_entry_u __vector_table[] @ ".intvec" =
{
    {                        // The initial stack pointer
    .stack_ptr = (unsigned long)system_stack + sizeof(system_stack)
                                                        },
    __iar_program_start,    // The RESET handler
    nmi_isr,                // The NMI handler
........


Цитата
Что их туда из флеша при включении притания перемещает? Startup?

Ага, ведь если-бы этим занимался Александр Сергеевич, это было-бы очень странно. А посему, при необходимости, как в startup инициализируются переменные в RAM, так и преносятся при необходимости и секции содержащие исполняемый код.
Цитата
А то, что в 'C' принято испокон веков, в кортексах похерено.
Знаете, как в кортексном 'C' передача параметров в функцию происходит?

Так-же, как в AVR, так-же, как в ARM, так-же, как в x86 с примерно 90x годов, когда, например у Watcom, появились первые соглашения о передаче параметров через регистры. Стандарт языка это вообще не нормирует, посему слова про 'C' пустые слова.
Цитата
Вы бы лучше занимались тем, что у Вас хорошо получается - выписывание баньки

Хорошо, и этому уделю внимание.
Цитата
Можно я на Ваши глупости больше отвечать не буду?

Только я на глупости, в том числе и Ваши, на форуме буду по прежнему стараться указывать. Дабы не плодились оные.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vallav
сообщение May 30 2010, 05:54
Сообщение #44


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Ну вот видите, можете, когда захотите.

Цитата(zltigo @ May 29 2010, 17:49) *
Да. И даже понял. И вот это совершено спокойно написал: http://electronix.ru/forum/index.php?showt...60&start=60 оно этими самыми суммами и занимается в том числе.

И что, приведенные мной 8 первых слов во флеше у Вас дают нулевую контрольную сумму?
Что эта за контрольная сумма - "check-sum of table entries 0 through 6"?


Цитата(zltigo @ May 29 2010, 17:49) *
Есть. Вот, например, у меня так:
Код
static unsigned long system_stack[STACK_SIZE] @ ".noinit";

__root const Vector_entry_u __vector_table[] @ ".intvec" =
{
    {                        // The initial stack pointer
    .stack_ptr = (unsigned long)system_stack + sizeof(system_stack)
                                                        },
    __iar_program_start,    // The RESET handler
    nmi_isr,                // The NMI handler
........

Вы не поняли. Я не говорил, что ни у кого нет.
Я говорил, что в стандартном стартапе от Кейла нет.
И как оказалось - и не нужно.
А ежели не лень или подстраховаться хочется, можно в своем написать.


Цитата(zltigo @ May 29 2010, 17:49) *
Ага, ведь если-бы этим занимался Александр Сергеевич, это было-бы очень странно. А посему, при необходимости, как в startup инициализируются переменные в RAM, так и преносятся при необходимости и секции содержащие исполняемый код.

А если прога на АСМе? И я хочу, чтобы она в ОЗУ работала?
То надо перенос кода в ОЗУ при включении притания самому писать и самому делать линковку неперемещаемых кусков?
Можно конечно. Но есть надежда, что это умеет делать стандартный линкер.


Цитата(zltigo @ May 29 2010, 17:49) *
Так-же, как в AVR, так-же, как в ARM, так-же, как в x86 с примерно 90x годов, когда, например у Watcom, появились первые соглашения о передаче параметров через регистры. Стандарт языка это вообще не нормирует, посему слова про 'C' пустые слова.

Стандарт языка так же игнорирует перенос кода из флеши в ОЗУ.
Значит Ваши слова про стартап - это пустые слова?



Вы упустили два вопроса.
1. Чем именно закончилась дискуссия по "цельнотянутый и писанный "бангалорскими" программерами загрузчик от NXP", который NXP
разместила у себя в качестве аппноты.
Можно на его основе написать общение между чипом и прогой в PC_юке по USB без использования дополнительных чипов и специально устанавливаемых
драйверов, причем на приличной скорости?
2. Правильно ли, что после сброса происходит загрузка в sp значения первого слова флеши и переход по адресу, равному значению второго слова флеши?
И что перед этим переносит код в ОЗУ, если второе слово флеши указывает на ОЗУ.
И главное, как узнает, что и куда из флеши надо переносить.

Кстати, уменя получилось - когда и стартап и сама прога в ОЗУ - стандартный бутлоадер не справляется, а писанный "бангалорскими" - прогу
запускает и она работает. Это наверно потому, что он кривой?
Пока не получается таблицу прерываний в ОЗУ засунуть, но когда получится и "бангалорский" и такую запустит - значит он сильно кривой...
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 30 2010, 07:00
Сообщение #45


Гуру
******

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



Цитата(vallav @ May 30 2010, 07:54) *
И что, приведенные мной 8....

Без понятия, что за цифры Вы привели, и уж тем более какой загрузчик у Вас этот образ грузит - только не первичный, ибо он по определению
не занимается ничем, что не расположено с нулевого адреса. Его работа определить наличие исполняемой программы на нулевых адресах и если нашел, то запустить ее на иcполнение.
Цитата
Я говорил, что в стандартном стартапе от Кейла нет.
И как оказалось - и не нужно.
А ежели не лень или подстраховаться хочется, можно в своем написать.

Разумеется нужно, разумеется есть. Специально Вас тыкаю носом в то, что идет с Кейлом для LPC17xx:
Код
; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size      EQU     0x00000200

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

.......


; Vector Table Mapped to Address 0 at Reset

                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors

__Vectors       DCD     __initial_sp; Top of Stack
                DCD     Reset_Handler; Reset Handler
                DCD     NMI_Handler    ; NMI Handler

Цитата
Можно конечно. Но есть надежда, что это умеет делать стандартный линкер.

Оставте,наконец, глупейшие фантазии. Линкер только линкует. Копированием занимается подобный код инициализирующий
сегменты перед тем, ка будет вызван main().
Код
  char const * p = __section_begin("Region$$Table");
  uint32_t const * pe = __section_end("Region$$Table");
  uint32_t const * pi = (uint32_t const *)(p);
  while (pi != pe)
  {
    init_fun_t * fun = (init_fun_t *)((char *)pi + *(int32_t *)pi);
    pi++;
    pi = fun(pi);
  }


Цитата
"бангалорский" и такую запустит - значит он сильно кривой...

Он кривой, но устанавливать указатели на стек и таблицу векторов он должен уметь. Всего-то и делов занести адрес куда он образ загрузил в качестве адреса таблицы векторов, считать слово по нулевому смещению из образа и проинициализировать им указатель стека, ну и передать управление по адресу содержащимуся в первом слове образа. И все. Это по определению делает любой загрузчик, как первичный имеющийся у NXP, так и любой, в том числе вторичный USB кейловский. Эти-же нехитрые операции выполняются ядром при старте запуская программу. Только адрес строго фиксирован.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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