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

 
 
> Reinvoke ISP, LPC2388, Процессор отвечает не на все команды
Dreamer
сообщение Mar 26 2010, 10:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



Здравствуйте.

Хочу в процессе выполнения программы запустить бутлоадер и перепрошить программу.
Для этого в нужном мне месте программы вызываю команду загрузчика "Reinvoke ISP", старался делать все по юзер мануалу, но видимо, что-то недоделал.

Вот код:

Код
#define IAP_LOCATION 0x7ffffff1
unsigned long command[5]={0};
unsigned long result[3]={0};
typedef void (*IAP)(unsigned int[],unsigned int[]);
IAP iap_entry = (IAP)IAP_LOCATION;

#define ISP_OPTION_2
void PrepareProgCPU()
{
    VICINTENCLEAR = 0xFFFFFFFF;     // Disable all interrupts
#ifdef  ISP_OPTION_2     
    //по документации - в этом случае надо выключать плл и выбрать внутренний IRC
    MAMCR =  0; //читал, что в ранних ревизиях нужно отключать MAM, у меня ревизия B
    PLLCON  = 0x00;
    PLLFEED = 0xAA;
    PLLFEED = 0x55;
    CLKSRCSEL=0;
#endif //иначе исполняем с опцией "1" - pll не выключаем
    command[0] = 57;
    iap_entry(command,result);
}


В результате получаем следующую картину.
Вызываем в программе указанную функцию. Открываем терминал. Настраиваем (пока пользуюсь скоростью 9600).
Шлем в терминал символ "?".
Получаем ответ "Synhronized". Получается, что боотлоадер запустился и отвечает на команды.
Закрываем терминал, открываем флешмеджик. Настраиваем на те же параметры, делаем старт.
Происходит стирание флеша (в статусной строке проскакивают сообщения "Erasing block").
Далее в статусной строке пишется "Programming..."
После чего выводится сообщение "Anable to communicate (transmit/receive)". Программирование прекращается, если запустить терминал, на команды больше не отвечаем.

Далее отключаю питание. Включаю. Процессор не исполняет рабочую программу, находится в редиме загрузчика. Проверяю - запускаю флешмеджик, делаю "старт" - программируется "на ура", причем с любой скоростью.

Компилирую программу с "#define ISP_OPTION_1". Это допустимо, как утверждается в документации, при этом должна установиться PCLK = CCLK/4.
У меня используется частота 72 мегагерца, если поделить на 4, получается 18, для скорости 9600 это допустимое значение.

Тестируем, получаем абсолютно идентичный результат.


Получается, что я перед вызовом "Reinvoke ISP" что-то не вернул в исходное состояние. Вопрос, что?

ЗЫ. Компилятор - IAR 5.4.


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dreamer
сообщение Mar 29 2010, 14:02
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



Цитата
Вы говорите, что при программировании после 'естественного' входа в загрузчик все нормально???

Да, в этом случае программируется нормально.

Цитата
Явно не то для 72MHz. В общем-то все просто, но можете взять калькулятор на сайте NXP.


Почему не то?
Взял этот калькулятор (имеется в виду экселевская табличка на сайте nxp?),
взял значение из самой верхней строки:

Цитата
CPU Divide (calc) : 4
Calculated "M" Value: 12
Given "N": 1
Fref Check: 12000000
FCCO Check: 288.00000
Actual CPU MHz:72.0000


В документации сказано, что в регистрах хранятся не сами константы M, N, CPUDivide, а их значения, уменьшенные на 1.
Отсюда получились значения 11, 0, 3.

Инициализирую PLL так:
Код
#define PLL_M         11
#define PLL_N         0
#define CCLK_DIV      3
#define USBCLK_DIV    5

  if(PLLSTAT & (1 << 25))
  {
    PLLCON = 1; // Enable PLL, disconnected.
    PLLFEED = 0xaa;
    PLLFEED = 0x55;
  }
  PLLCON = 0; // Disable PLL, disconnected.
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  SCS |= 0x20; // Enable main OSC.
  while(!(SCS & 0x40)); // Wait until main OSC is usable.
  CLKSRCSEL = 0x1; // Select main OSC, 12MHz, as the PLL clock source.
  PLLCFG = PLL_M | (PLL_N << 16);
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  PLLCON = 1; // Enable PLL, disconnected.
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  CCLKCFG = CCLK_DIV; // Set clock divider.
  USBCLKCFG = USBCLK_DIV; // Usbclk = 288 MHz/6 = 48 MHz.
  while (((PLLSTAT & (1 << 26)) == 0)); // Check lock bit status.
  do {  
    m_value = PLLSTAT & 0x00007FFF;
    n_value = (PLLSTAT & 0x00FF0000) >> 16;
  } while ((m_value != PLL_M) && ( n_value != PLL_N) );
  PLLCON = 3; // Enable and connect.
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  while ( ((PLLSTAT & (1 << 25)) == 0) ); // Check connect bit status.


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 29 2010, 14:22
Сообщение #3


Гуру
******

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



Цитата(Dreamer @ Mar 29 2010, 17:02) *
а их значения, уменьшенные на 1.

Тогда и называйте имена регистров, а не переменных.
"FCCO Check: 288.00000" там в errata на Вашу ревизию ограничений никаких нет?
Инициализацию Вашу не вычитывал - слабо читабельно sad.gif. У самого инициализация по традиции сразу в startup делается. Но судя по тому,
что UART у Вас работает, то как-то Вы проинициализировали. А с MAM у Вас что?


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

Сообщений в этой теме
- Dreamer   Reinvoke ISP, LPC2388   Mar 26 2010, 10:12
- - Dreamer   Что-то чем дальше, тем менее понятно. Итак, в обеи...   Mar 26 2010, 14:09
- - zltigo   Цитата(Dreamer @ Mar 26 2010, 13:12) Полу...   Mar 26 2010, 14:52
- - Dreamer   ЦитатаВы скорее всего не дочитали инструкцию Так о...   Mar 26 2010, 16:27
|- - zltigo   Цитата(Dreamer @ Mar 26 2010, 19:27) Я пр...   Mar 26 2010, 16:33
- - Dreamer   Хорошая программа, спасибо. Как задается частота, ...   Mar 28 2010, 20:30
|- - zltigo   Цитата(Dreamer @ Mar 28 2010, 23:30) В на...   Mar 28 2010, 21:07
- - Dreamer   Цитата"FCCO Check: 288.00000" там в erra...   Mar 29 2010, 14:48
- - Dreamer   ЦитатаА с MAM у Вас что? Включен: Код MAMCR = 0;...   Mar 29 2010, 16:04
- - zltigo   Не знаю. Думайте. Вот, для проверки только-что на ...   Mar 29 2010, 16:37
- - Dreamer   Пока хороших мыслей в голову не приходит. Приходят...   Mar 30 2010, 09:30
|- - zltigo   Цитата(Dreamer @ Mar 30 2010, 12:30) Что ...   Mar 30 2010, 10:34
- - Dreamer   Переделал почти как вы сказали (почти - потому что...   Mar 30 2010, 14:36
|- - zltigo   Цитата(Dreamer @ Mar 30 2010, 17:36) пото...   Mar 30 2010, 14:44
- - Dreamer   Цитатану в чем-то другом проблема, ибо работает re...   Mar 30 2010, 15:25
|- - zltigo   Цитата(Dreamer @ Mar 30 2010, 18:25) по с...   Mar 30 2010, 15:38
- - Dreamer   ЦитатаВсе взаимодействие четко описано в документа...   Mar 31 2010, 06:50
- - zltigo   Цитата(Dreamer @ Mar 31 2010, 09:50) Но в...   Mar 31 2010, 09:56


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

 


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


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