Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Attiny13
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
another_one
Здравствуйте.

Нужна помощь в вопросе по поводу Attiny13.

У нее есть функция самопрограммирования, делает ли эта функция возможным записывать данный во время выполнения основной программы данные во FLASH(т.е можно ли ее использовать наравне с EEPROM) или это только для внутресхемного программирования через SPI?

Заранее благодарен
ARV
вообще-то, это возможно, но при объеме памяти в 512 слов это с первого взгляда вызывает удивление... куча ценных байтов памяти потратится на орагнизацию самопрограммирования - что же будет делать остальная программа?
mempfis_
Цитата(another_one @ Mar 19 2009, 07:55) *
У нее есть функция самопрограммирования, делает ли эта функция возможным записывать данный во время выполнения основной программы данные во FLASH(т.е можно ли ее использовать наравне с EEPROM) или это только для внутресхемного программирования через SPI?


У FLASH и EEPROM кол-во циклов перезаписи различное поэтому они совсем не равноценны.
Во FLASH лучше храните константы а в EEPROM не часто меняющиеся переменные (а то протрёте её до дыр) smile.gif
МП41
Если не на ассемблере писать программу, то нехватка памяти для кода программы не позволит сделать что-либо серьёзное.
another_one
Спасибо за поддержку.

Не могу понять как организовать доступ к R0:R1(для записи/чтения данных) и к Z-pointer(для записи адреса) используя WinAVR + AVRAssembler(AVRStudio).
pavel-pervomaysk
CODE
ldi zl,low (Text8) //
ldi zh,high(Text8) //



CODE
lsl ZL // Умножаем на 2
rol ZH // регистровую пару
lpm data,Z // загружаем ячейку памяти из флэш для вывода


Это чтение байта из флеши.
demiurg_spb
Цитата(another_one @ Mar 19 2009, 19:40) *
Спасибо за поддержку.

Не могу понять как организовать доступ к R0:R1(для записи/чтения данных) и к Z-pointer(для записи адреса) используя WinAVR + AVRAssembler(AVRStudio).

Код
LDI  R0, 25              ; константу в регистр
MOV  R16, R0        ; регистр в регистр
LDS  R1, 0x01FF    ; из ОЗУ читаем в регистр

LDI  R30, low(0x03FE); инициализируем регистровую пару Z(R30,R31)
LDI  R31, hi(0x03FE)  ; адресом 0x03FF
LDD R16, Z+            ; читаем ОЗУ косвенно адресуя ячейку памяти с адресом 0x03FE и инкрементируем адрес
LDD R17, Z              ; читаем ОЗУ косвенно адресуя ячейку памяти с адресом 0x03FF
Как-то так....
ARV
Цитата(demiurg_spb @ Mar 19 2009, 22:14) *
Код
LDI  R0, 25             ; константу в регистр
MOV  R16, R0    ; регистр в регистр
с точностью до наоборот!!!
Код
LDI  R16, 25             ; константу в регистр
MOV  R0, R16    ; регистр в регистр
регистры младшей половины не могут использоваться с командами, кончающимися на I, т.е. использующими в качестве второго операнда константу: LDI, CPI, SBCI и т.п.
Vlad219i
Цитата(Павлик @ Mar 19 2009, 22:03) *
CODE
ldi zl,low (Text8) //
ldi zh,high(Text8) //

CODE
lsl ZL // Умножаем на 2
rol ZH // регистровую пару
lpm data,Z // загружаем ячейку памяти из флэш для вывода

Это чтение байта из флеши.


А если до гланд добираться традиционным способом, то
Код
ldi zh,high(label*2)
ldi zl,low(label*2)

или
Код
ldi zh,high(label<<1)
ldi zl,low(label<<1)
another_one
Спасибо большое за поддержку.

А как для WinAVR(AVRStudio) сделать ассемблерную вставку?
ReAl
Цитата(another_one @ Mar 21 2009, 09:20) *
А как для WinAVR(AVRStudio) сделать ассемблерную вставку?
Для данной простой задачи "всё украдено до нас".
Код
#include <avr/pgmspace.h>

prog_uint8_t cf = 10;
prog_uint16_t wf = 12345;

uint8_t c;
uint16_t w;

   ...
   ...
   c = pgm_read_byte( &cf );
   w = pgm_read_word( &wf );

А если таки нужны вставки, то читать
C:\WinAVR\doc\avr-libc\avr-libc-user-manual\inline_asm.html
и для примеров по данному форуму искать слово __asm__
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.