Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопросы по IAP у LPC2000
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
murug
1. Есть ли какая-нибудь инфа, желательно официальная, по гарантированным временам выполнения IAP-операций? Опытным путем выяснил, что например у имеющегося у меня LPC2478 на частоте CCLK=288 МГц запись 4 кБ занимает около 60 мс, а на CCLK=4 МГц - около 40 мс. Но хотелось бы знать, сколько будет в общем случае, для любой частоты, для любого экземпляра 2478, да и для других моделей семейства.
2. Правильно ли я предполагаю, что внутри процедуры IAP во-первых выполняется обычным способом код, зашитый в первичный бутлоадер, а во-вторых (и это занимает основное время) выполняется собственно запись во флеш на аппаратном уровне, инициируемая этим кодом, во время которой флеш на чтение недоступен? В это время записи никакой код и не выполняется, обработчик команд остановлен? Или параллельно может выполняться код из ОЗУ?
DpInRock
Во время записи КОД И ТАК ВЫПОЛНЯЕТСЯ ИЗ ОЗУ.
toweroff
а что там может еще выполняться? прерывания отключаются, плл остановлена...
murug
Прерывания в общем случае не отключаются:
"5.2.7 Interrupts during IAP
...
The IAP code does not use or disable interrupts."
(User manual на LPC24XX)
toweroff
Цитата(murug @ Dec 24 2010, 14:59) *
Прерывания в общем случае не отключаются:
"5.2.7 Interrupts during IAP
...
The IAP code does not use or disable interrupts."
(User manual на LPC24XX)

однако, во всех примерах от производителя, прерывания стабильно отключаются sm.gif
Код
/*
* Erase Sector between 'start' and 'end'
* Return:  IAP error code (0 when OK)
* NOTES:  start needs to be a 256 byte boundary
*         size should be 256, 512, 1024 or 4089
*/
unsigned int IAP_erase ()  {
  struct iap_in  iap;                      // IAP input parameters
  unsigned int result[3];                 // IAP results
  unsigned int save_VicInt;                // for saving of interrupt enable register

  save_VicInt = VICIntEnable;              // save interrupt enable status
  VICIntEnClr = 0xFFFFFFFF;                // disable all interrupts
  stop_pll();                              // IAP requires to run without PLL

  iap.cmd = 50;                            // IAP Command: Prepare Sectors for Write
  iap.par[0] = 0;                             // start sector
  iap.par[1] = 27;                           // end sector
  iap_entry (&iap, result);                // call IAP function
  if (result[0])  goto exit;               // an error occured?

  iap.cmd = 52;                            // IAP command: Erase Flash
  iap.par[0] = 0;                             // start sector
  iap.par[1] = 27;                           // end sector
  iap.par[2] = CCLK;                       // CPU clock
  iap_entry (&iap, result);                // call IAP function

exit:

  start_pll();                             // start PLL

  VICIntEnable = save_VicInt;              // enable interrupts
  return (result[0]);
}


извиняюсь, убрал из функции начальный и конечный сектор, стирается все содержимое сразу, но смысл не меняется
murug
Цитата(toweroff @ Dec 24 2010, 15:20) *
однако, во всех примерах от производителя, прерывания стабильно отключаются sm.gif

Однако в пункте user manual'а, который я уже (неполностью) процитировал, говорится еще, что перед вызовом IAP надо либо запретить прерывания, либо разместить их вектора и обработчики в RAM =)

DpInRock
PLL отключать нафик не нужно.
toweroff
ну тогда ф пень производителя, если он такую пургу гонит в даташыд ))))))))))
пусть все выполняется, плл работает, и плевать, как там отработает флэш-контроллер
andrewlekar
Не знаю как у вас, а в LPC1768 всё работает без отключения PLL. В даташите и в примерах тоже про PLL ни слова. Прерывания отключать требуют потому, что вектора во флэше лежат, а он Read-while-write у LPC17xx к сожалению нету. Если положить вектора в RAM и обработчики сделать целиком в RAM, то можно продолжать работать во время IAP. Но всё ещё более усложнится, если есть переключение контекста и запись во флэш из другого потока.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.