[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