00001 /***************************************************** 00002 ** VGA display Driver 00003 ******************************************************/ 00004 00005 #include <avr/io.h> 00006 #include <avr/interrupt.h> 00007 #include "task.h" 00008 #include "display.h" 00009 00010 ECB VgaSem; 00011 00012 void EnableVGAIrq(void) 00013 { 00014 EIMSK |= BIT(INT5); 00015 } 00016 00017 void DisableVGAIrq(void) 00018 { 00019 EIMSK &= ~BIT(INT5); 00020 } 00021 00022 void INT5_vect(void) __attribute__ ((naked)); 00023 void INT5_vect(void) 00024 { 00025 SAVE_IRQ(); 00026 ++InterruptCount; 00027 EIFR = BIT(INT5); 00028 VGA_CONTROL_STATUS = 0x02; //clear interrupt 00029 PostSemaphoreIrq(&VgaSem,0); 00030 ExitInterrupt(); 00031 RESTORE_IRQ(); 00032 } 00033 00034 void InitVGA(void) 00035 { 00036 int i; 00037 volatile unsigned short *pI; 00038 00039 for(i=0,pI = VGA_CHARMEM_P ;i< (80*60);++i) 00040 { 00041 *pI++ = ' ' | FG(WHITE) | BG(BLACK); 00042 } 00043 i = 0; 00044 volatile unsigned char *pL = VGA_COLOR_LUT_P; 00045 *pL++ = (BLACK << 3) | BLACK; 00046 *pL++ = (RED << 3) | RED; 00047 *pL++ = (GREEN << 3) | GREEN; 00048 *pL++ = (YELLOW << 3) | YELLOW; 00049 *pL++ = (BLUE << 3) | BLUE; 00050 *pL++ = (VIOLET << 3) | VIOLET; 00051 *pL++ = (CYAN << 3) | CYAN; 00052 *pL++ = (WHITE << 3) | WHITE; 00053 CreateSemaphore(&VgaSem,0,SEMAPHORE_MODE_BLOCKING,"VgaSem"); 00054 } 00055 00056