at90usb162_quickstart_drv.h

Go to the documentation of this file.
00001 
00002 
00003 // ***** WATCHDOG *****
00004 // see wdt_drv.h, updated and placed into at90usb162/lib_mcu directory
00005 
00006 // ***** CLOCK *****
00007 // Low level defines
00008 #define   Enable_external_clock()       (CKSEL0 |= (1<<EXTE))
00009 #define   Disable_external_clock()      (CKSEL0 &= ~(1<<EXTE))
00010 #define   Enable_RC_clock()             (CKSEL0 |= (1<<RCE))
00011 #define   Disable_RC_clock()            (CKSEL0 &= ~(1<<RCE))
00012 #define   External_clock_ready()        (((CKSTA&(1<<EXTON)) != 0) ? TRUE : FALSE)
00013 #define   RC_clock_ready()              (((CKSTA&(1<<RCON)) != 0) ? TRUE : FALSE)
00014 #define   Select_external_clock()       (CKSEL0 |= (1<<CLKS))
00015 #define   Select_RC_clock()             (CKSEL0 &= ~(1<<CLKS))
00016 
00017 
00018 #define   Load_ext_clock_config(cfg)    (CKSEL1 &= ~0x0F, CKSEL1 |= (cfg&0x0F))
00019 #define   Load_RC_clock_config(cfg)     (CKSEL1 &= ~0xF0, CKSEL1 |= (cfg&0xF0))
00020 
00021 #define   EXTCLK_8MHZ_AND_MORE          0x0F
00022 #define   INTRC_8MHZ                    0x20
00023 
00024 // High level macros
00025 #define   Clock_switch_external()       { Enable_external_clock(); while (!External_clock_ready()); \
00026                                           Select_external_clock(); Disable_RC_clock(); }
00027 #define   Clock_switch_internal()       { Enable_RC_clock(); while (!RC_clock_ready()); \
00028                                           Select_RC_clock(); Disable_external_clock(); }
00029 
00030 
00031 // ***** USB *****
00032 // -> see "usb_drv.h" and "pll_drv.h"
00033 
00034 // ***** USART *****
00035 #define   Usart_spi_hard_init()           (PORTD |= 0x2C, DDRD |= 0x28, DDRD &= ~0x04)
00036 #define   Usart_hard_init_without_ctrl()  (PORTD |= 0x0C, DDRD |= 0x08, DDRD &= ~0x04)
00037 #define   Usart_hard_init_with_ctrl()     (PORTD |= 0xCC, DDRD |= 0x48, DDRD &= ~0x84)
00038 
00039 
00040 #define   Usart_spi_soft_init()           (UBRR1  = 0, \
00041                                           UCSR1C = (1<<7)|(1<<6)|(1<<1)|(1<<0), \
00042                                           UCSR1B = (1<<3)|(1<<4), \
00043                                           UBRR1 = 4)  // baudrate = 800kbits/s
00044 #define   Usart_soft_init_with_ctrl()     (UBRR1 = 0, \
00045                                           UCSR1C = (1<<UCSZ11) | (1<<UCSZ10), \
00046                                           UCSR1D = (1<<CTSEN) | (1<<RTSEN), \
00047                                           UCSR1B = (1<<RXEN1) | (1<<TXEN1), \
00048                                           UBRR1 = 9)  // baudrate = 50kbits/s
00049 //                                          UBRR1 = 4)  // baudrate = 100kbits/s
00050 
00051 #define   Usart_soft_init_without_ctrl()  (UBRR1 = 0, \
00052                                           UCSR1C = (1<<UCSZ11) | (1<<UCSZ10), \
00053                                           UCSR1D &= ~((1<<CTSEN) | (1<<RTSEN)), \
00054                                           UCSR1B = (1<<RXEN1) | (1<<TXEN1), \
00055                                           UBRR1 = 4)  // baudrate = 100kbits/s
00056 
00057 #define   Usart_write_byte(dt)            (UDR1 = dt)
00058 #define   Usart_read_byte()               (UDR1)
00059 #define   Is_usart_byte_sent()            (((UCSR1A&(1<<TXC1)) != 0) ? TRUE : FALSE)
00060 #define   Usart_clear_flag_send()         (UCSR1A |= (1<<TXC1))
00061 #define   Is_usart_byte_received()        (((UCSR1A&(1<<RXC1)) != 0) ? TRUE : FALSE)
00062 #define   Usart_clear_flag_receive()      (UCSR1A |= (1<<RXC1))
00063 #define   Is_usart_data_reg_empty()       (((UCSR1A&(1<<UDRE1)) != 0) ? TRUE : FALSE)
00064 
00065 // ***** TIMERS *****
00066 
00067 #define USE_TIMER16     TIMER16_1     // needed if the delay macros written below are used
00068 
00069 // 1. User can use Timer1 to generate DELAY (multiple of 1ms or 1µs @ Fosc=8MHz)
00070 // Max delay : 2100 ms/µs
00071 #define   Delay_config_ms(ms)     (Timer16_set_clock(TIMER16_CLKIO_BY_256), \
00072                                   Timer16_set_mode_output_a(TIMER16_COMP_MODE_NORMAL), \
00073                                   Timer16_set_waveform_mode(TIMER16_WGM_CTC_OCR), \
00074                                   Timer16_set_compare_a((U16)(31)*(U16)(ms)))
00075 #define   Delay_config_us(us)     (Timer16_set_clock(TIMER16_CLKIO_BY_8), \
00076                                   Timer16_set_mode_output_a(TIMER16_COMP_MODE_NORMAL), \
00077                                   Timer16_set_waveform_mode(TIMER16_WGM_CTC_OCR), \
00078                                   Timer16_set_compare_a((U16)(us)))
00079 
00080 #define   Delay_reset()           (Timer16_set_counter(0x0000), Timer16_clear_compare_a_it())
00081 #define   Is_delay_end()          (Timer16_get_compare_a_it())
00082 #define   Is_not_delay_end()      (!(Timer16_get_compare_a_it()))
00083 
00084 
00085 
00086 // Macro defined to simplify pushbutton debouncing
00087 #define   Bp_delay_debounce()     { Delay_config_ms(20); Delay_reset(); while (Is_not_delay_end());}
00088 
00089 
00090 
00091 
00092 
00093 
00094 
00095 
00096 
00097 
00098 
00099 
00100 
00101 
00102 

Generated on Fri Jun 15 14:07:32 2007 for Atmel by  doxygen 1.5.1-p1