diff options
Diffstat (limited to 'VexRiscvSocSoftware/libs/vga.h')
-rw-r--r-- | VexRiscvSocSoftware/libs/vga.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/VexRiscvSocSoftware/libs/vga.h b/VexRiscvSocSoftware/libs/vga.h new file mode 100644 index 0000000..182b968 --- /dev/null +++ b/VexRiscvSocSoftware/libs/vga.h @@ -0,0 +1,78 @@ +/* + * vga.h + * + * Created on: Jul 8, 2017 + * Author: spinalvm + */ + +#ifndef VGA_H_ +#define VGA_H_ +#include <stdint.h> + +typedef struct { + uint32_t hSyncStart ,hSyncEnd; + uint32_t hColorStart,hColorEnd; + + uint32_t vSyncStart ,vSyncEnd; + uint32_t vColorStart,vColorEnd; +}Vga_Timing; + +static const Vga_Timing vga_h640_v480_r60 = { + .hSyncStart = 96, + .hSyncEnd = 800, + .hColorStart = 96 + 16, + .hColorEnd = 800 - 48, + .vSyncStart = 2, + .vSyncEnd = 525, + .vColorStart = 2 + 10, + .vColorEnd = 525 - 33 +}; + +static const Vga_Timing vga_simRes = { + .hSyncStart = 8, + .hSyncEnd = 70, + .hColorStart = 16, + .hColorEnd = 64, + .vSyncStart = 2, + .vSyncEnd = 48, + .vColorStart = 8, + .vColorEnd = 40 +}; + +static const Vga_Timing vga_simRes_h160_v120 = { + .hSyncStart = 8, + .hSyncEnd = 24+160, + .hColorStart = 16, + .hColorEnd = 16+160, + .vSyncStart = 2, + .vSyncEnd = 10+120, + .vColorStart = 6, + .vColorEnd = 6+120 +}; + +typedef struct +{ + volatile uint32_t STATUS; + volatile uint32_t FRAME_SIZE; + volatile uint32_t FRAME_BASE; + volatile uint32_t DUMMY0[13]; + volatile Vga_Timing TIMING; +} Vga_Reg; + +static uint32_t vga_isBusy(Vga_Reg *reg){ + return (reg->STATUS & 2) != 0; +} + +static void vga_run(Vga_Reg *reg){ + reg->STATUS = 1; +} + +static void vga_stop(Vga_Reg *reg){ + reg->STATUS = 0; + while(vga_isBusy(reg)); +} + + +#endif /* VGA_H_ */ + + |