ATTiny、特に ATTiny24 が 32 ビットの符号なし int をメモリに格納する方法を知りたいです。32 ビット値を取得して、EEPROM の 32 ビット位置に書き込もうとしています。単純なマスクを使用しようとしましたが、試行するたびに、下位 2 バイト (lsb) が正しく取得され、上位 2 バイトはすべてゼロになります。たとえば、0x12345678 を書き込もうとすると、出力は 0x00005678 になります。設定する必要がある Atmel Studio の設定はありますか、それともマスキング以外の方法を使用する必要がありますか?
最終的には、32 ビットのカウンター値を読み取り、それを EEPROM の特定の場所に書き込めるようにしたいと考えています。現在、既存の回路の修正に取り組んでいるため、シリアル出力でデバッグする余裕がありません。
コード スニペット:
主に:
unsigned long test_val = 305419896; //0x12345678
EEprom_Long_Write(0x25,test_val);
機能:
EEprom_Long_Write:
void EEprom_Long_Write(unsigned char eeadr, unsigned long EE_Data)
{
unsigned char temp=0;
unsigned char count= eeadr + 3;
unsigned long mask=0;
unsigned char position=24;
while (eeadr <= count)
{
mask = ((1<<8)-1) << position;
temp = (EE_Data & mask) >> position;
EEPROM_write(eeadr, temp);
position = position-8;
eeadr++;
}
}
EEPROM_書き込み:
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{
while(EECR & (1<<EEPE)); //Wait for completion of previous write
EECR =(0<<EEPM1) | (0>>EEPM0); // Set Programming mode
EEARL = ucAddress; // Setup address and data registers
EEDR = ucData; // Load Data Register
EECR |= (1<<EEMPE); // Write logical one to EEMPE
EECR |= (1<<EEPE); // Start eeprom write be setting EEPE
}