Arlleex 183 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба https://www.nxp.com/docs/en/application-note/AN10404.pdf 2 минуты назад, jcxz сказал: STM32 - это обычно Cortex-M, а LPC2xxx - это или ARM7 (LPC23xx, LPC24xx) или ARM9, у которых система прерываний и таблица векторов совсем по-другому устроены, чем в M-профиле. Ну да, я просто уже совсем запамятовал, ибо даже в M-профиле есть МК, которые требуют примерно такой же код в векторах, как и старенькие ARM7/9. Не XMC ли, кстати? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 2 minutes ago, dimka76 said: Какой обработчик ? Что-то вы окончательно запутались уже. Reset_Handler не? Немудрено запутаться! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба Только что, MPetrovich сказал: Немудрено запутаться! Я скинул выше максимально исчерпывающий документ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 11 минут назад, MPetrovich сказал: Может подскажите как этот обработчик то вообще должен выглядеть и куда вставляться? В main.c? Возьмите IAR. В его папке Examples полно рабочих примеров для разных МК. В том числе есть и для LPC22xx. Чтобы что-то там "не компилилось" - такого ни разу не видел. Вот из IAR-овского проекта мигалки светодиодом для LPC2294: int main (void) { // System initialization, this will map the exception vectors. LPC2294SystemInit(); // Set up peripheral registers. LPC2294InitPIO(); // First disable interrupts. __disable_interrupt(); // Setup interrupt controller. LPC2294InitVIC(); LPC2294InitTimerInterrupt(TimerBeat); // Periodic timer initialization. LPC2294InitTimer(); // Enable interrupts. __enable_interrupt(); // Start periodic timer. LPC2294StartTimer(); // Loop forever. for (;;) { LPC2294LedSet(); Sleep(200); // Display for 65 ms. LPC2294LedClear(); Sleep(200); // Display for 65 ms. } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 1 minute ago, Arlleex said: Я скинул выше максимально исчерпывающий документ Access Denied You don't have permission to access "http://www.nxp.com/docs/en/application-note/AN10404.pdf" on this server. Reference #18.a40d655f.1689943915.5923a3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба VPN... AN10404.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 12 минут назад, Arlleex сказал: Ну да, я просто уже совсем запамятовал, ибо даже в M-профиле есть МК, Это какие?? 12 минут назад, Arlleex сказал: которые требуют примерно такой же код в векторах, как и старенькие ARM7/9. Не XMC ли, кстати? XMC4xxx - Cortex-M. У Infineon есть более старые МК, но они вроде на архитектуре C166/C167. ARM7/9 от Infineon мне не известны. PS: C167 раньше в телефонах Siemens стояли. В классике Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 2 минуты назад, jcxz сказал: Это какие?? XMC1000: вот у меня почему-то дежавю, что у них система загрузки построена так, что в таблице векторов должны быть не адреса начала обработчиков, а именно инструкции перехода на эти обработчики. Как и в случае Петровича)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 9 minutes ago, Arlleex said: VPN... AN10404.pdf 299.77 kB · 0 downloads Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба Только что, Arlleex сказал: XMC1000: вот у меня почему-то дежавю, что у них система загрузки построена так, что в таблице векторов должны быть не адреса начала обработчиков, а именно инструкции перехода на эти обработчики. Как и в случае Петровича)) Сомнительно. M-профиль подразумевает встроенный NVIC и совершенно по-другому устроенную систему прерываний. В ARM7/9 всё другое. Там и прерываний-то всего два = IRQ и FIQ (+исключения). И при входе в прерывание никакого сохранения на стеке нет, а процессор переключается в режим, соответствующий прерыванию с теневыми регистрами (поэтому там весьма трудно организовывать вложенные прерывания и вообще трудности для переключения контекста ОС). Зато реакция на прерывание получается намного быстрее, чем у Cortex-M. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 45 minutes ago, Arlleex said: VPN... AN10404.pdf 299.77 kB · 0 downloads Там речь в основном про тактирование. Но вставил в свой код по аналогии. Попробую залить... Скомпилировал, прошил. Тишина... 54 minutes ago, jcxz said: Возьмите IAR. В его папке Examples полно рабочих примеров для разных МК. В том числе есть и для LPC22xx. Чтобы что-то там "не компилилось" - такого ни разу не видел. Вот из IAR-овского проекта мигалки светодиодом для LPC2294: int main (void) { // System initialization, this will map the exception vectors. LPC2294SystemInit(); // Set up peripheral registers. LPC2294InitPIO(); // First disable interrupts. __disable_interrupt(); // Setup interrupt controller. LPC2294InitVIC(); LPC2294InitTimerInterrupt(TimerBeat); // Periodic timer initialization. LPC2294InitTimer(); // Enable interrupts. __enable_interrupt(); // Start periodic timer. LPC2294StartTimer(); // Loop forever. for (;;) { LPC2294LedSet(); Sleep(200); // Display for 65 ms. LPC2294LedClear(); Sleep(200); // Display for 65 ms. } } IAR только для MSP430 есть на рабочем компе... А так да, вижу, что все инициализационные функции задействованы в программе. Отчего в KEILe такого нет в примерах, блин... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 1 час назад, jcxz сказал: Сомнительно. M-профиль подразумевает встроенный NVIC и совершенно по-другому устроенную систему прерываний. В ARM7/9 всё другое... Я немного о другом. Я о том, что при возникновении прерываний ядро Cortex-Mx автоматом загружает содержимое вектора обработчика в PC. Т.е. в самом векторе таблицы хранится адрес начала процедуры, а не какие-либо команды. В ARM7/9 - да, Вы правильно сказали, что таблица векторов прерываний состоит не из адресов соответствующих обработчиков, а из самих инструкций перехода на обработчики (Reset, Irq, Fiq, Abort и т.д.). В 8-битных МК (типа AVR) такой же механизм был Так вот, в XMC1100 (Cortex-M0, у которого отсутствует VTOR), таблица векторов гвоздями прибита в ROM по адресу 0x00000000. Но переход на пользовательские обработчики выполняется программно: Цитата 2.5.4.1 Vector Table Remap In XMC1100, the vector table is located inside the ROM. Therefore, the vector table is remapped to the SRAM based on the mapping shown in Table 2-10. The user application uses these locations as entry points for the actual exception and interrupt handlers. This is done by placing the code for these handlers or having the branch instruction to the handlers there. For example, upon an exception entry due to IRQ0, the processor reads the intermediate handler start address 2000’0040H (fixed in ROM) from the vector table and starts execution from there. If the actual handler is located in another address location due to size contraints, the address 2000’0040H should trigger a load and a branch instruction to jump to this new location. Поэтому для юзер-кода таблица векторов будет выглядеть точно так же (т.е. вместо адресов обработчиков - "виниры" на реальные обработчики), как в ARM7/9. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 21 июля, 2023 Опубликовано 21 июля, 2023 (изменено) · Жалоба Попробую залить...Скомпилировал, прошил. Тишина... 4-я страница страданий - у вас отладчик-JTAG есть? Ваш ARM7TDMI даже Wiggler-ом на LPT-порту отлаживать можно... ...ибо даже в M-профиле есть МК, которые требуют примерно такой же код в векторах, как и старенькие ARM7/9... "Филиппки" же (NXP) и требуют: LPC8xx - CM0+, там достаточно в описание (.m79) проца "заветную" строчку добавить (добавлял в IAR6.10 несуществующие там оные LPC) и после линковки контрольная сумма вписывается куда надо. Изменено 21 июля, 2023 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
izerg 9 23 июля, 2023 Опубликовано 23 июля, 2023 · Жалоба On 7/21/2023 at 4:36 PM, MPetrovich said: Отчего в KEILe такого нет в примерах, блин... На серию LPC2ххх примеры у Keil есть, в том числе лежат на сайте. Серия старая, куча примеров к отладочным платам. On 7/21/2023 at 12:58 PM, MPetrovich said: Вообще то я читал даташит и мануал. Вы лучше скажите в чём ошибка кода. Нормальная кроватка, проверенная неоднократно. Только позавчера в ней STM32 проверял - всё работает. А где написано, "там где работает STM32 - 100% будет работать LPC2xxx" ? - где конденсаторы по питанию? - где кварц? как минимум, ... - где стабилизатор 1,8В? ( у STM32 - он внутри 🙂 ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
izerg 9 23 июля, 2023 Опубликовано 23 июля, 2023 · Жалоба On 7/21/2023 at 12:58 PM, MPetrovich said: Вы лучше скажите в чём ошибка кода. j-tag подключен к контроллеру? Что мешает проверить пошагово код, посмотреть что происходит с периферией, регистрами по ходу выполнения? Убедиться, ожидаемый по программе результат совпадает / не совпадает с фактическим? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться