[En-Nut-Discussion] U R G E N T !!! Ethernut 1 -using PORTF

Henrik Maier hmlists at focus-sw.com
Mon Mar 10 06:32:57 CET 2008


> -----Original Message-----
> disable your programmer. Right now I can't find the right register name,
> but you should disable JTAG in your application. This way it is enabled
> again after pressing reset.
> 
> Harald
>

The register concerned is the JTAG_REG and the bit is the JTD bit.

That's the code sequence I use to turn off JTAG by software (not fuse bits!)
and to read from port F into the variable "reg":

void postExecute()
{
   uint8_t reg;

   ...
   //
   // Disable JTAG for a short moment
   //
   cli();
   DDRF |= 0xF0; // Make them inputs
   PORTF |= 0xF0; // Enable pull-up
   __asm__ __volatile__(
      "in r24, %0"  "\n\t"             
      "ori r24, 1 << %1" "\n\t"        
      "out %0, r24" "\n\t"             
      "out %0, r24" "\n\t"
      "nop" "\n\t"
      "nop" "\n\t"
      "nop" "\n\t"
      "nop" "\n\t"
        :                              
        : "i" (_SFR_IO_ADDR(JTAG_REG)), 
          "i" (JTD)                    
        : "r24"                        
    );
   reg = PINF;
   __asm__ __volatile__(
      "in r24, %0"  "\n\t"             
      "andi r24, ~(1 << %1)" "\n\t"    
      "out %0, r24" "\n\t"             
      "out %0, r24" "\n\t"             
        :                              
        : "i" (_SFR_IO_ADDR(JTAG_REG)), 
          "i" (JTD)                    
        : "r24"                        
    );
   sei();
   ...
}

Use at your own risk! 

Cheers

Henrik
http://www.proconx.com






More information about the En-Nut-Discussion mailing list