Перейти к содержанию
    

Вопросы програмирования LPC2294

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 ли, кстати?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, dimka76 said:

Какой обработчик ? Что-то вы окончательно запутались уже.

Reset_Handler не?

Немудрено запутаться!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, MPetrovich сказал:

Немудрено запутаться!

Я скинул выше максимально исчерпывающий документ:wink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.
  }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Arlleex said:

Я скинул выше максимально исчерпывающий документ:wink:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, Arlleex сказал:

Ну да, я просто уже совсем запамятовал, ибо даже в M-профиле есть МК,

Это какие??  :umnik2:

12 минут назад, Arlleex сказал:

которые требуют примерно такой же код в векторах, как и старенькие ARM7/9. Не XMC ли, кстати?

XMC4xxx - Cortex-M. У Infineon есть более старые МК, но они вроде на архитектуре C166/C167. ARM7/9 от Infineon мне не известны.

PS: C167 раньше в телефонах Siemens стояли. В классике  :smile:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, jcxz сказал:

Это какие??  :umnik2:

XMC1000: вот у меня почему-то дежавю, что у них система загрузки построена так, что в таблице векторов должны быть не адреса начала обработчиков, а именно инструкции перехода на эти обработчики. Как и в случае Петровича))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, Arlleex сказал:

XMC1000: вот у меня почему-то дежавю, что у них система загрузки построена так, что в таблице векторов должны быть не адреса начала обработчиков, а именно инструкции перехода на эти обработчики. Как и в случае Петровича))

Сомнительно. M-профиль подразумевает встроенный NVIC и совершенно по-другому устроенную систему прерываний. В ARM7/9 всё другое. Там и прерываний-то всего два = IRQ и FIQ (+исключения). И при входе в прерывание никакого сохранения на стеке нет, а процессор переключается в режим, соответствующий прерыванию с теневыми регистрами (поэтому там весьма трудно организовывать вложенные прерывания и вообще трудности для переключения контекста ОС). Зато реакция на прерывание получается намного быстрее, чем у Cortex-M.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 minutes ago, Arlleex said:

Там речь в основном про тактирование. Но вставил в свой код по аналогии. Попробую залить...

Скомпилировал, прошил. Тишина...

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 такого нет в примерах, блин...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jcxz сказал:

Сомнительно. M-профиль подразумевает встроенный NVIC и совершенно по-другому устроенную систему прерываний. В ARM7/9 всё другое...

Я немного о другом. Я о том, что при возникновении прерываний ядро Cortex-Mx автоматом загружает содержимое вектора обработчика в PC. Т.е. в самом векторе таблицы хранится адрес начала процедуры, а не какие-либо команды.

В ARM7/9 - да, Вы правильно сказали, что таблица векторов прерываний состоит не из адресов соответствующих обработчиков, а из самих инструкций перехода на обработчики (Reset, Irq, Fiq, Abort и т.д.). В 8-битных МК (типа AVR) такой же механизм был:smile:

Так вот, в 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.

image.thumb.png.32e8ab370b11b6adddfa39eb5f878aea.png


Поэтому для юзер-кода таблица векторов будет выглядеть точно так же (т.е. вместо адресов обработчиков - "виниры" на реальные обработчики), как в ARM7/9.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробую залить...Скомпилировал, прошил. Тишина...
4-я страница страданий - у вас отладчик-JTAG есть?
Ваш ARM7TDMI даже Wiggler-ом на LPT-порту отлаживать можно...

...ибо даже в M-профиле есть МК, которые требуют примерно такой же код в векторах, как и старенькие ARM7/9...
"Филиппки" же (NXP) и требуют: LPC8xx - CM0+, там достаточно в описание (.m79) проца "заветную" строчку добавить (добавлял в IAR6.10 несуществующие там оные LPC) и после линковки контрольная сумма вписывается куда надо.
Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/21/2023 at 4:36 PM, MPetrovich said:

Отчего в KEILe такого нет в примерах, блин...

На серию LPC2ххх примеры  у Keil есть, в том числе лежат на сайте.

Серия старая, куча примеров к отладочным платам.

 

On 7/21/2023 at 12:58 PM, MPetrovich said:

Вообще то я читал даташит и мануал. Вы лучше скажите в чём ошибка кода.

Нормальная кроватка, проверенная неоднократно. Только позавчера в ней STM32 проверял - всё работает.

LPC2294.jpg

А где написано, "там где работает STM32 -  100%  будет работать LPC2xxx" ?

- где конденсаторы по питанию?

- где кварц?

как минимум, ... 

- где стабилизатор 1,8В?  ( у STM32 - он внутри 🙂 )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/21/2023 at 12:58 PM, MPetrovich said:

Вы лучше скажите в чём ошибка кода.

j-tag подключен к контроллеру?

Что мешает проверить пошагово код, посмотреть что происходит с периферией, регистрами по ходу выполнения? 

Убедиться, ожидаемый по программе результат совпадает / не совпадает с фактическим?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...