00001
00089 #include "board.h"
00090 #include "compiler.h"
00091 #include "dip204.h"
00092 #include "intc.h"
00093 #include "gpio.h"
00094 #include "pm.h"
00095 #include "delay.h"
00096 #include "spi.h"
00097 #include <avr32/io.h>
00098
00099
00101 #define GPIO_CHARSET GPIO_PUSH_BUTTON_0
00102
00104 #define GPIO_BACKLIGHT_MINUS GPIO_PUSH_BUTTON_1
00105
00107 #define GPIO_BACKLIGHT_PLUS GPIO_PUSH_BUTTON_2
00108
00110 unsigned short display;
00111
00113 unsigned short current_char = 0;
00114
00115
00119 #if __GNUC__
00120 __attribute__((__interrupt__))
00121 #elif __ICCAVR32__
00122 __interrupt
00123 #endif
00124 static void dip204_example_PB_int_handler(void)
00125 {
00126 unsigned short i;
00127
00128
00129 if (gpio_get_pin_interrupt_flag(GPIO_CHARSET))
00130 {
00131
00132 dip204_set_cursor_position(1,4);
00133
00134 for (i = current_char; i < current_char + 0x10; i++)
00135 {
00136 dip204_write_data(i);
00137 }
00138 dip204_write_string(" ");
00139
00140 current_char = i;
00141
00142 if (current_char >= 0xFF)
00143 {
00144 current_char = 0x10;
00145 }
00146
00147 gpio_clear_pin_interrupt_flag(GPIO_CHARSET);
00148 }
00149
00150 if (gpio_get_pin_interrupt_flag(GPIO_BACKLIGHT_PLUS))
00151 {
00152 dip204_set_backlight(backlight_power_increase);
00153
00154 gpio_clear_pin_interrupt_flag(GPIO_BACKLIGHT_PLUS);
00155 }
00156
00157 if (gpio_get_pin_interrupt_flag(GPIO_BACKLIGHT_MINUS))
00158 {
00159 dip204_set_backlight(backlight_power_decrease);
00160
00161 gpio_clear_pin_interrupt_flag(GPIO_BACKLIGHT_MINUS);
00162 }
00163 }
00164
00165
00169 #if __GNUC__
00170 __attribute__((__interrupt__))
00171 #elif __ICCAVR32__
00172 __interrupt
00173 #endif
00174 static void dip204_example_Joy_int_handler(void)
00175 {
00176 if (gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_UP))
00177 {
00178 dip204_set_cursor_position(19,1);
00179 dip204_write_data(0xDE);
00180 display = 1;
00181
00182 gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_UP);
00183 }
00184 if (gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_DOWN))
00185 {
00186 dip204_set_cursor_position(19,3);
00187 dip204_write_data(0xE0);
00188 display = 1;
00189
00190 gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_DOWN);
00191 }
00192 if (gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_LEFT))
00193 {
00194 dip204_set_cursor_position(18,2);
00195 dip204_write_data(0xE1);
00196 display = 1;
00197
00198 gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_LEFT);
00199 }
00200 if (gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_RIGHT))
00201 {
00202 dip204_set_cursor_position(20,2);
00203 dip204_write_data(0xDF);
00204 display = 1;
00205
00206 gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_RIGHT);
00207 }
00208 if (gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_PUSH))
00209 {
00210 dip204_set_cursor_position(19,2);
00211 dip204_write_data(0xBB);
00212 dip204_set_cursor_position(1,4);
00213 dip204_write_string(" AT32UC3A Series ");
00214 display = 1;
00215
00216 gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_PUSH);
00217 }
00218 }
00219
00220
00224 void dip204_example_configure_push_buttons_IT(void)
00225 {
00226 gpio_enable_pin_interrupt(GPIO_CHARSET , GPIO_RISING_EDGE);
00227
00228 gpio_enable_pin_interrupt(GPIO_BACKLIGHT_PLUS , GPIO_RISING_EDGE);
00229
00230 gpio_enable_pin_interrupt(GPIO_BACKLIGHT_MINUS , GPIO_RISING_EDGE);
00231
00232
00233 Disable_global_interrupt();
00234
00235 INTC_register_interrupt( &dip204_example_PB_int_handler, AVR32_GPIO_IRQ_0 + (GPIO_BACKLIGHT_PLUS/8), AVR32_INTC_INT1);
00236 INTC_register_interrupt( &dip204_example_PB_int_handler, AVR32_GPIO_IRQ_0 + (GPIO_BACKLIGHT_MINUS/8), AVR32_INTC_INT1);
00237 INTC_register_interrupt( &dip204_example_PB_int_handler, AVR32_GPIO_IRQ_0 + (GPIO_CHARSET/8), AVR32_INTC_INT1);
00238
00239 Enable_global_interrupt();
00240 }
00241
00242
00246 void dip204_example_configure_joystick_IT(void)
00247 {
00248 gpio_enable_pin_interrupt(GPIO_JOYSTICK_UP , GPIO_FALLING_EDGE);
00249 gpio_enable_pin_interrupt(GPIO_JOYSTICK_DOWN , GPIO_FALLING_EDGE);
00250 gpio_enable_pin_interrupt(GPIO_JOYSTICK_RIGHT , GPIO_FALLING_EDGE);
00251 gpio_enable_pin_interrupt(GPIO_JOYSTICK_PUSH , GPIO_FALLING_EDGE);
00252 gpio_enable_pin_interrupt(GPIO_JOYSTICK_LEFT , GPIO_FALLING_EDGE);
00253
00254
00255 Disable_global_interrupt();
00256
00257 INTC_register_interrupt( &dip204_example_Joy_int_handler, AVR32_GPIO_IRQ_0 + (GPIO_JOYSTICK_UP/8), AVR32_INTC_INT1);
00258 INTC_register_interrupt( &dip204_example_Joy_int_handler, AVR32_GPIO_IRQ_0 + (GPIO_JOYSTICK_DOWN/8), AVR32_INTC_INT1);
00259 INTC_register_interrupt( &dip204_example_Joy_int_handler, AVR32_GPIO_IRQ_0 + (GPIO_JOYSTICK_RIGHT/8), AVR32_INTC_INT1);
00260 INTC_register_interrupt( &dip204_example_Joy_int_handler, AVR32_GPIO_IRQ_0 + (GPIO_JOYSTICK_LEFT/8), AVR32_INTC_INT1);
00261 INTC_register_interrupt( &dip204_example_Joy_int_handler, AVR32_GPIO_IRQ_0 + (GPIO_JOYSTICK_PUSH/8), AVR32_INTC_INT1);
00262
00263 Enable_global_interrupt();
00264 }
00265
00269 int main(void)
00270 {
00271 static const gpio_map_t DIP204_SPI_GPIO_MAP =
00272 {
00273 {DIP204_SPI_SCK_PIN, DIP204_SPI_SCK_FUNCTION },
00274 {DIP204_SPI_MISO_PIN, DIP204_SPI_MISO_FUNCTION},
00275 {DIP204_SPI_MOSI_PIN, DIP204_SPI_MOSI_FUNCTION},
00276 {DIP204_SPI_NPCS_PIN, DIP204_SPI_NPCS_FUNCTION}
00277 };
00278
00279
00280 pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);
00281
00282
00283 Disable_global_interrupt();
00284
00285
00286 INTC_init_interrupts();
00287
00288
00289 Enable_global_interrupt();
00290
00291
00292 spi_options_t spiOptions =
00293 {
00294 .reg = DIP204_SPI_NPCS,
00295 .baudrate = 1000000,
00296 .bits = 8,
00297 .spck_delay = 0,
00298 .trans_delay = 0,
00299 .stay_act = 1,
00300 .spi_mode = 0,
00301 .modfdis = 1
00302 };
00303
00304
00305 gpio_enable_module(DIP204_SPI_GPIO_MAP,
00306 sizeof(DIP204_SPI_GPIO_MAP) / sizeof(DIP204_SPI_GPIO_MAP[0]));
00307
00308
00309 spi_initMaster(DIP204_SPI, &spiOptions);
00310
00311
00312 spi_selectionMode(DIP204_SPI, 0, 0, 0);
00313
00314
00315 spi_enable(DIP204_SPI);
00316
00317
00318 spi_setupChipReg(DIP204_SPI, &spiOptions, FOSC0);
00319
00320
00321 dip204_example_configure_push_buttons_IT();
00322
00323
00324 dip204_example_configure_joystick_IT();
00325
00326
00327 delay_init( FOSC0 );
00328
00329
00330 dip204_init(backlight_PWM, TRUE);
00331
00332
00333 current_char = 0x10;
00334
00335
00336 dip204_set_cursor_position(8,1);
00337 dip204_write_string("ATMEL");
00338 dip204_set_cursor_position(7,2);
00339 dip204_write_string("EVK1100");
00340 dip204_set_cursor_position(6,3);
00341 dip204_write_string("AVR32 UC3");
00342 dip204_set_cursor_position(3,4);
00343 dip204_write_string("AT32UC3A Series");
00344 dip204_hide_cursor();
00345
00346
00347 while (1)
00348 {
00349 if (display)
00350 {
00351 delay_ms(400);
00352
00353
00354 dip204_set_cursor_position(19,1);
00355 dip204_write_string(" ");
00356
00357 dip204_set_cursor_position(18,2);
00358 dip204_write_string(" ");
00359
00360 dip204_set_cursor_position(19,3);
00361 dip204_write_string(" ");
00362 display = 0;
00363 }
00364 }
00365 }