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

 
 
 
Reply to this topicStart new topic
> Вопросы по IAP у LPC2000
murug
сообщение Dec 24 2010, 02:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 23-12-10
Пользователь №: 61 816



1. Есть ли какая-нибудь инфа, желательно официальная, по гарантированным временам выполнения IAP-операций? Опытным путем выяснил, что например у имеющегося у меня LPC2478 на частоте CCLK=288 МГц запись 4 кБ занимает около 60 мс, а на CCLK=4 МГц - около 40 мс. Но хотелось бы знать, сколько будет в общем случае, для любой частоты, для любого экземпляра 2478, да и для других моделей семейства.
2. Правильно ли я предполагаю, что внутри процедуры IAP во-первых выполняется обычным способом код, зашитый в первичный бутлоадер, а во-вторых (и это занимает основное время) выполняется собственно запись во флеш на аппаратном уровне, инициируемая этим кодом, во время которой флеш на чтение недоступен? В это время записи никакой код и не выполняется, обработчик команд остановлен? Или параллельно может выполняться код из ОЗУ?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Dec 24 2010, 05:58
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Во время записи КОД И ТАК ВЫПОЛНЯЕТСЯ ИЗ ОЗУ.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 24 2010, 06:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



а что там может еще выполняться? прерывания отключаются, плл остановлена...
Go to the top of the page
 
+Quote Post
murug
сообщение Dec 24 2010, 08:59
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 23-12-10
Пользователь №: 61 816



Прерывания в общем случае не отключаются:
"5.2.7 Interrupts during IAP
...
The IAP code does not use or disable interrupts."
(User manual на LPC24XX)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 24 2010, 09:20
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(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]);
}


извиняюсь, убрал из функции начальный и конечный сектор, стирается все содержимое сразу, но смысл не меняется
Go to the top of the page
 
+Quote Post
murug
сообщение Dec 24 2010, 10:25
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 23-12-10
Пользователь №: 61 816



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

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

Go to the top of the page
 
+Quote Post
DpInRock
сообщение Dec 24 2010, 10:39
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



PLL отключать нафик не нужно.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 24 2010, 12:26
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



ну тогда ф пень производителя, если он такую пургу гонит в даташыд ))))))))))
пусть все выполняется, плл работает, и плевать, как там отработает флэш-контроллер
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Dec 27 2010, 03:11
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Не знаю как у вас, а в LPC1768 всё работает без отключения PLL. В даташите и в примерах тоже про PLL ни слова. Прерывания отключать требуют потому, что вектора во флэше лежат, а он Read-while-write у LPC17xx к сожалению нету. Если положить вектора в RAM и обработчики сделать целиком в RAM, то можно продолжать работать во время IAP. Но всё ещё более усложнится, если есть переключение контекста и запись во флэш из другого потока.
Go to the top of the page
 
+Quote Post

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

 


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


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