Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Можно ли LPM-командой прочитать LOCK-биты LB1 и LB2?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Боинг749
Можно ли SPM-командой прочитать LOCK-биты LB1 и LB2?
А то BLB12,BLB11,BLB01,BLB00 читаются а LB1 и LB2 всегда читаются как '1'
Подскажите

P.S. Пардон. Не SPM-командой, а LPM, не более чем через 3 такта после загрузки в SPMCR значения 0b00001001 разумеется

defunct
Цитата(Боинг749 @ Aug 31 2008, 13:02) *
Можно ли LPM-командой прочитать LOCK-биты LB1 и LB2?

можно, по крайней мере на m16, m162, m32, m128 прекрасно читаются.
west329_
а програмно записать в них (закрыть доступ к прошивке) ??
GDI
Записать нельзя, только проверить и как то сигнализировать что прошивка не залочена, вывести сообщение на ЖКИ или светодиодом как то хитро помигать.
west329_
Цитата(GDI @ Sep 1 2008, 10:50) *
Записать нельзя, только проверить и как то сигнализировать что прошивка не залочена, вывести сообщение на ЖКИ или светодиодом как то хитро помигать.

Есть ли возможность на С считать эти значения, компилятор к примеру ИАР, или нужет только аасемблер ?
GDI
У иара есть макросы на них, как впрочем и на другие команды, покопайтесь в хидерах. И вообще в хидерах полезно копаться, можно много интересного найти...
defunct
Цитата(west329_ @ Sep 1 2008, 11:10) *
Есть ли возможность на С считать эти значения, компилятор к примеру ИАР, или нужет только ассемблер ?

Можно не создавая .s файлов
Код
unsigned char get_locks(void)
{
   asm("push r31");
   asm("push r30");
   asm("ldi  r30, 1");
   asm("ldi  r31, 9");
   asm("cli");  
   asm("out 0x37, r31");  // out SMPCR, BLBSET + SPMEN
   asm("clr  r31");
   asm("lpm r16, z");
   asm("sei");
   asm("pop  r30");
   asm("pop  r31");
}
Rst7
Ну тогда уже вот так
Код
__z unsigned char _get_locks(unsigned char const __flash *p, char pv);

#pragma optimize=no_inline
unsigned char get_locks(void)
{
  return _get_locks((unsigned char const __flash *)1,(1<<BLBSET)+(1<<SPMEN));
}

#pragma optimize=no_inline
__z unsigned char _get_locks(unsigned char const __flash *p, char pv)
{
  unsigned char c;
  __disable_interrupt();
  SPMCSR=pv;
  c=__load_program_memory(p);
  __enable_interrupt();
  return c;
}
Боинг749
Цитата(Боинг749 @ Aug 31 2008, 14:02) *
Можно ли SPM-командой прочитать LOCK-биты LB1 и LB2?

Можно. Исправил багу в программе. Всё прекрасно читается. Тему можно закрыть
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.