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

 
 
> Прочитать из C содержание Fuses и Lock bits, можно ли без inline-ассемблера.
Xorval
сообщение Jun 10 2006, 14:42
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 1-06-05
Из: Мос. обл.
Пользователь №: 5 620



Требуется прочитать из программы на Си состояние Fuses и Lock bits.
Кристалл - ATtiny13. Среда - IAR.
Пытался описать переменную в функции, так чтобы она попала в R30-R31 (ZL-ZH). Не получается.
Может быть кто-нибудь знает "культурный" способ прочитать Fuses и Lock bits из Си?
И уж заодно - можно ли указать для auto-переменной, в какой регистр я ее хочу поместить?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
AndyBig
сообщение Jun 10 2006, 20:21
Сообщение #2


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Фьюзы и лок-биты вообще нельзя прочесть "изнутри", т.е. из прошивки. Только программатором.
Go to the top of the page
 
+Quote Post
Xorval
сообщение Jun 10 2006, 22:50
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 1-06-05
Из: Мос. обл.
Пользователь №: 5 620



Цитата(AndyBig @ Jun 11 2006, 00:21) *
Фьюзы и лок-биты вообще нельзя прочесть "изнутри", т.е. из прошивки. Только программатором.

Можно. См. например doc2535.pdf по ATtiny13 стр.100, второй абзац.
It is possible to read both the Fuse and Lock bits from software. To read the Lock bits,
load the Z-pointer with 0x0001 and set the RFLB and SELFPRGEN bits in SPMCSR.
When an LPM instruction is executed within three CPU cycles after the RFLB and
SELFPRGEN bits are set in SPMCSR, the value of the Lock bits will be loaded in the
destination register.
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 11 2006, 10:41
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Почему бы и не из ассемблера? чем сишный код культурнее asm-функции? :-/


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
bmf
сообщение Jun 11 2006, 11:38
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 6-01-05
Из: Украина
Пользователь №: 1 831



для ATMEGA в IAR делал так

#include <inavr.h>

#define _GET_LOCK_BITS() __AddrToZByteToSPMCR_LPM( (void __flash *) 0x0001, 0x09 )
#define _GET_LOW_FUSES() __AddrToZByteToSPMCR_LPM( (void __flash *) 0x0000, 0x09 )
#define _GET_HIGH_FUSES() __AddrToZByteToSPMCR_LPM( (void __flash *) 0x0003, 0x09 )
#define _GET_EXTENDED_FUSES() __AddrToZByteToSPMCR_LPM( (void __flash *) 0x0002, 0x09 )
#define _SET_LOCK_BITS(data) __DataToR0ByteToSPMCR_SPM( data, 0x09 )
#define _ENABLE_RWW_SECTION() __DataToR0ByteToSPMCR_SPM( 0x00, 0x11 )

#define _WAIT_FOR_SPM() while( SPMCR_REG & (1<<SPMEN) );

// Read lock bits.
_WAIT_FOR_SPM();
sendchar( _GET_LOCK_BITS() );

// Read fuse bits.
_WAIT_FOR_SPM();
sendchar( _GET_LOW_FUSES() );

// Read high fuse bits.
_WAIT_FOR_SPM();
sendchar( _GET_HIGH_FUSES() );

// Read extended fuse bits.
_WAIT_FOR_SPM();
sendchar( _GET_EXTENDED_FUSES() );
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Jun 11 2006, 18:19
Сообщение #6


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Цитата
Можно. См. например doc2535.pdf

Приношу извинения за поспешную недостоверность smile.gif.
Go to the top of the page
 
+Quote Post
Xorval
сообщение Jun 12 2006, 21:57
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 1-06-05
Из: Мос. обл.
Пользователь №: 5 620



Большое спасибо за советы. Совет от Bmf, честно говоря оказался для меня слишком сложным, но навеял вот такую штуку:

char fuses_low_byte, fuses_high_byte;
SPMCSR=9;
fuses_low_byte=*((char __flash *)0); // Read fuses low byte
SPMCSR=9;
fuses_high_byte=*((char __flash *)3); // Read fuses high byte

Оказалось она транслируется IAR-ом как раз в то, что надо, и работает как надо.

Насчет того, чем ассемблер менее культурен, чем Си.
Я же написал "культурно" в кавычках. Имелось в виду так, чтобы компилятор Си был в курсе происходящего. А так - ассемблер конечно не менее культурен. Прошу прощения если посягнул на святое smile.gif .
Go to the top of the page
 
+Quote Post

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

 


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


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