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 )