AVR I/O experience
AVR I/O experience
Phenomenon : use the time interrupt of ATmega64 to produce a pulse square wave with static frequency, the IO is PORTB7.
/* BYTE STRUCTION -----------------------------------------------------------*/
typedef union
{
unsigned int byte;
struct
{
unsigned b0 :1;
unsigned b1 :1;
unsigned b2 :1;
unsigned b3 :1;
unsigned b4 :1;
unsigned b5 :1;
unsigned b6 :1;
unsigned b7 :1;
}bit;
}BYTE_STRUCT;
/*-----------------------------------------------------------------------*/
#define _MY_SFR_IO8(io_addr) _MY_MMIO_BYTE((io_addr) + 0x20)
#define _MY_SFR_MEM8(mem_addr) _MY_MMIO_BYTE(mem_addr)
#define _MY_MMIO_BYTE(mem_addr) (*(volatile BYTE_STRUCT *)(mem_addr))
/*-----------------------------------------------------------------------*/
#define PIN_B _MY_SFR_IO8(0x16)
#define DDR_B _MY_SFR_IO8(0x17)
#define PORT_B _MY_SFR_IO8(0x18)
#define ioWatchdog PORT_B.bit.b5
#define ioPulse PORT_B.bit.b7
/*-----------------------------------------------------------------------*/
#define INPUT 0
#define OUTPUT 1
/*-----------------------------------------------------------------------*/
#define CLRWDT { \
asm( "WDR" ); \
ioWatchdogDir = OUTPUT; \
if( ioWatchdog ) ioWatchdog = 0;\
else ioWatchdog = 1;\
} /* clr watchdog */
ATmega64 Datasheet : http://www.chinaicmart.com/suppliers/164/ATmega64.html