avrboot/lowlevel.c

28 lines
584 B
C

//
// Low-level routines to read lock and fuse-bytes
//
// Copyright (C) 2/2005 Martin Thomas, Kaiserslautern, Germany
//
#include "lowlevel.h"
unsigned char read_fuse_lock(unsigned short addr, unsigned char mode)
{
unsigned char retval;
asm volatile
(
"movw r30, %3\n\t" /* Z to addr */ \
"sts %0, %2\n\t" /* set mode in SPM_REG */ \
"lpm\n\t" /* load fuse/lock value into r0 */ \
"mov %1,r0\n\t" /* save return value */ \
: "=m" (SPM_REG),
"=r" (retval)
: "r" (mode),
"r" (addr)
: "r30", "r31", "r0"
);
return retval;
}