|
Но по сути это ОЗУ поэтому можно наверное много раз писать, у меня
такой необходимости не было.
Для AVR и GCC это дело у меня выглядит примерно так:
static quadlet_t configROM[] PROGMEM =
{
#include "cfg_rom.inc"
};#define __LPM_quadlet_enhanced__(addr) \
({ \
uint16_t __addr16 = (uint16_t)(addr); \
quadlet_t __result; \
__asm__ \
( \
"lpm %A0, Z+" "\n\t" \
"lpm %B0, Z+" "\n\t" \
"lpm %C0, Z+" "\n\t" \
"lpm %D0, Z" "\n\t" \
: "=r" (__result), "=z" (__addr16) \
: "1" (__addr16) \
); \
__result; \
})
#define pgm_quadlet_word_near(address_short) __LPM_quadlet_enhanced__((uint16_t)(address_short))
#define ROM_SIZE (sizeof(configROM)/sizeof(configROM[0]))
#define ROM_SIZELL ((unsigned long long) ROM_SIZE)void saveConfigROM()
{
uchar uc;
tsbRegConfigurationRomControl = (ROM_SIZELL<<18) | (ROM_SIZELL<<2);
tsbRegLogRomControl = 0x00008000;for(uc=0; uc
{
tsbRegLogRomData = pgm_quadlet_word_near(&configROM[uc]);
}
tsbRegLogRomControl = 0x00004000;
}
Где tsbRegХХХХХХХ - регистры TSB43AA82A отображённые во внешнюю память AVR-а.
E-mail: info@telesys.ru