[Icc-avr] Reading fuses on a mega168
Ian
ianjames at waitrose.com
Sun Apr 27 07:00:23 PDT 2008
Hi,
Can anyone help with reading fuses on Mega168. I have tried the following
method which was suggested by Johannes Assenbaum for a Mega88,
unfortunately the results are incorrect!
< readfusesbye.s>
; unsigned char readfusesbyte(unsigned int ioaddr, unsigned int fuseaddr);
;
_readfusesbyte::
movw r26,r16 ; load X-pointer with ioaddr
movw r30,r18 ; load Z-pointer with fuseaddr
clr r18 ; clear interrupts-enabled flag
brid readfusesbyte1
ldi r18,1 ; set interrupts-enabled flag
cli ; disable interrupts
readfusesbyte1:
ldi r16,0x09 ; bit names change but not the values. Yet...
st X,r16 ; write SPM control register
lpm r16,Z ; read fuses
sbrc r18,0
sei ; re-enable interrupts if enabled before
ret
unsigned char readfusesbyte(unsigned int ioaddr, unsigned int fuseaddr);
void ReadFuseLock(void)
{
unsigned char Fuse[4];
_CLI();
// Read lock bits
Fuse[0] = readfusesbyte(SPMCSR,0x0001);
// Read low fuses bits
Fuse[1] = readfusesbyte(SPMCSR,0x0000);
// Read high fuses bits
Fuse[2] = readfusesbyte(SPMCSR,0x0003);
// Read extended fuses bits
Fuse[3] = readfusesbyte(SPMCSR,0x0002);
_SEI();
}
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
More information about the Icc-avr
mailing list