avr-libc-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-libc-dev] Atmega2560


From: Uwe Fechner
Subject: Re: [avr-libc-dev] Atmega2560
Date: Mon, 14 Nov 2005 07:10:09 +0100
User-agent: Mozilla Thunderbird 1.0.7 (X11/20051028)

Hello,

I have the same goal (but I think we need patches for avr-gcc, to reach
it, therfore I am practicing that with easier targets for now).

Have a look at:

http://www.kieltech.de/uweswiki/ATmega2560_5fsupport

Could you post the compiled assembler code?

The mega2560 puts three bytes on the stack instead of two
for every call, but this shouldn't produce any problem with
your simple program (I think).

Regards:

Uwe

david schrieb:

I have a atmega2560 with the stk500 w/ 503 adapter.

I'm trying to get something to work.

I've produced a simple program - one that reads the
switches and lights the opposite LED (i.e pressing
switch 7 lights LED 0, pressing switch 7 lights LED 1,
etc) .  It also prints out the switch number that was
pressed.

I developed the original program on an atmega128.  It
appears to work fine on that target.  I realize that
just because a program runs - doesn't mean it is
correct - I could have errors in my code.

For the atmega2560, I compiled the program for the
atmega128, but replaced the iom128.h file with one for
the atmega1280.  I avoided passing parameters on the
stack - in fact I only call a single procedure - the
one to transmit a byte to the uart.  My transmit
routine polls - I use no interrupts - so I should not
have to worry about having an incorrect interrupt
vector table.

My code appears to run.  The LEDs light when the
switches are pressed.  I get output from the UART -
but it is garbage characters (periods as viewed from a
minicom window).  I don't think I have a problem with
the baudrate calculation verses the fuse bits
settings.  I have fusebits set up use an external
clock and use the clock on the stk500 (same as I do
with the atmega128).

Can anyone point out what I am doing wrong?

Any suggestions and wisdom will be appreciated.  My
goal is to eventually get a working setup with an
atmega2560 using gcc and avrlibc.  I am taking baby
steps.

dave


#ifndef UCSZ0
#define UCSZ0 UCSZ00
#define RXC RXC0
#define UDRE UDRE0
#endif

#include <avr/io.h>        // I/O definitions (port
names, pin names, etc)

#ifndef BV
       #define BV(bit)                 (1<<(bit))
#endif

#ifndef cbi
       #define cbi(reg,bit)    reg &= ~(BV(bit))
#endif
#ifndef sbi
       #define sbi(reg,bit)    reg |= (BV(bit))
#endif

typedef unsigned long  u32;
typedef unsigned char  u08;

// CPU clock speed
//#define F_CPU        16000000                         //
16MHz processor
//#define F_CPU        14745000                         //
14.745MHz processor
//#define F_CPU        8000000                          // 8MHz
processor
//#define F_CPU        7372800                          //
7.37MHz processor
//#define F_CPU        4000000                          // 4MHz
processor
#define F_CPU        3686400                            //
3.69MHz processor
#define CYCLES_PER_US ((F_CPU+500000)/1000000)  // cpu
cycles per microsecond

#define SW0()               ((PINA >> 0) & 1)
#define SW1()               ((PINA >> 1) & 1)
#define SW2()               ((PINA >> 2) & 1)
#define SW3()               ((PINA >> 3) & 1)
#define SW4()               ((PINA >> 4) & 1)
#define SW5()               ((PINA >> 5) & 1)
#define SW6()               ((PINA >> 6) & 1)
#define SW7()               ((PINA >> 7) & 1)

#define SET_LED0()          cbi(PORTB,0)
#define SET_LED1()          cbi(PORTB,1)
#define SET_LED2()          cbi(PORTB,2)
#define SET_LED3()          cbi(PORTB,3)
#define SET_LED4()          cbi(PORTB,4)
#define SET_LED5()          cbi(PORTB,5)
#define SET_LED6()          cbi(PORTB,6)
#define SET_LED7()          cbi(PORTB,7)

#define CLR_LED0()          sbi(PORTB,0)
#define CLR_LED1()          sbi(PORTB,1)
#define CLR_LED2()          sbi(PORTB,2)
#define CLR_LED3()          sbi(PORTB,3)
#define CLR_LED4()          sbi(PORTB,4)
#define CLR_LED5()          sbi(PORTB,5)
#define CLR_LED6()          sbi(PORTB,6)
#define CLR_LED7()          sbi(PORTB,7)

#define SWITCH_ON 0
#define SWITCH_OFF  1



/* Initialize UART */
u32 baudrate;
u08 baudrateDiv;
void InitUART( )
{

    baudrate = 9600;
    baudrateDiv =
(u08)((F_CPU+(baudrate*8L))/(baudrate*16L)-1);
UBRR0H = baudrateDiv >> 8;
    UBRR0L = baudrateDiv;

    UCSR0B = (1 << RXEN0) | (1<<TXEN0);

    UCSR0C = (3<<UCSZ0);
}


unsigned char data;
void transmitByte( )
{

  while (!(UCSR0A & (1<<UDRE)))
   ;
  UDR0 = data;

  data = 'A';
  while (!(UCSR0A & (1<<UDRE)))
   ;
  UDR0 = 0xa;

  data = 'A';
  while (!(UCSR0A & (1<<UDRE)))
   ;
  UDR0 = 0xd;
}

int main(void)
{

  /* Setup Digital IO */
  DDRA = 0x00;  /* Port a (all pins) is input  */
  DDRB = 0xFF;  /* Port c (all pins) is output */
  PORTB = 0xFF;

  InitUART();
  data = 'A';
  transmitByte();


while(1)
  {

     if (SW0() == SWITCH_ON)
     {
        data = '0';
        transmitByte();
        SET_LED7();
     }
     else
        CLR_LED7();

     if (SW1() == SWITCH_ON)
     {
        data = '1';
        transmitByte();
        SET_LED6();
     }
     else
        CLR_LED6();

     if (SW2() == SWITCH_ON)
     {
        data = '2';
        transmitByte();
        SET_LED5();
     }
     else
        CLR_LED5();

     if (SW3() == SWITCH_ON)
     {
        data = '3';
        transmitByte();
        SET_LED4();
     }
     else
        CLR_LED4();

     if (SW4() == SWITCH_ON)
     {
        data = '4';
        transmitByte();
        SET_LED3();
     }
     else
        CLR_LED3();

     if (SW5() == SWITCH_ON)
     {
        data = '5';
        transmitByte();
        SET_LED2();
     }
     else
        CLR_LED2();

     if (SW6() == SWITCH_ON)
     {
        data = '6';
        transmitByte();
        SET_LED1();
     }
     else
        CLR_LED1();

     if (SW7() == SWITCH_ON)
     {
        data = '7';
        transmitByte();
        SET_LED0();
     }
     else
        CLR_LED0();

  }

}



                
__________________________________ Yahoo! FareChase: Search multiple travel sites in one click.
http://farechase.yahoo.com


_______________________________________________
AVR-libc-dev mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/avr-libc-dev





reply via email to

[Prev in Thread] Current Thread [Next in Thread]