Device-Chip-AVR_HVSP
view release on metacpan or search on metacpan
examples/tinyfuse.pl view on Meta::CPAN
foreach my $fuse ( $fuseinfo->fuses ) {
if( my $values = $fuse->values ) {
def_intfuse $fuse->name, $fuse->caption, $values;
}
else {
def_boolfuse $fuse->name, $fuse->caption;
}
}
our $LOADING;
sub render_fuse_label
{
return if $LOADING;
my $fusebytes = $fuseinfo->pack( map { $_ => $fuses{$_}[0] } keys %fuses );
$fuselabel->set_text( sprintf "Fuses: %v02x", $fusebytes );
}
sub default_fuses
{
# These from the ATtiny24/44/84 data sheet
my %fusevals = (
SELFPRGEN => 1,
RSTDISBL => 1,
DWEN => 1,
SPIEN => 0,
WDTON => 1,
EESAVE => 1,
BODLEVEL => 0x07,
CKDIV8 => 0,
CKOUT => 1,
SUT => 0x02,
CKSEL => 0x02,
);
$fuses{$_}[0] = $fusevals{$_} for keys %fusevals;
foreach my $name ( keys %fusevals ) {
$fuses{$name}[1]->( $fusevals{$name} ) if $fuses{$name}[1];
}
}
sub read_fuses
{
my $lfuse;
my $hfuse;
my $efuse;
if( $avr ) {
$avr->all_power(1)->get;
$lfuse = $avr->read_lfuse->get,
$hfuse = $avr->read_hfuse->get,
$efuse = ( $has_efuse ? $avr->read_efuse->get : "" ),
$avr->all_power(0)->get;
}
else {
( $lfuse, $hfuse, $efuse ) = map { chr hex } split m/:/, $FUSEVALUES;
}
my %fusevals = $fuseinfo->unpack( join "", $lfuse, $hfuse, $efuse );
$fuselabel->set_text( sprintf "Fuses: %v02x", $lfuse.$hfuse.$efuse );
$fuses{$_}[0] = $fusevals{$_} for keys %fusevals;
local $LOADING = 1;
foreach my $name ( keys %fusevals ) {
$fuses{$name}[1]->( $fusevals{$name} ) if $fuses{$name}[1];
}
}
sub write_fuses
{
$avr->all_power(1)->get;
my $fusebytes = $fuseinfo->pack( map { $_ => $fuses{$_}[0] } keys %fuses );
$avr->write_lfuse( substr $fusebytes, 0, 1 )->get;
$avr->write_hfuse( substr $fusebytes, 1, 1 )->get;
$avr->write_efuse( substr $fusebytes, 2, 1 )->get if $has_efuse;
$avr->all_power(0)->get;
}
$tickit->run;
( run in 1.730 second using v1.01-cache-2.11-cpan-71847e10f99 )