OpenCores
URL https://opencores.org/ocsvn/openmsp430/openmsp430/trunk

Subversion Repositories openmsp430

[/] [openmsp430/] [trunk/] [fpga/] [altera_de0_nano_soc/] [software/] [libs/] [gfx/] [gfx_controller.h] - Blame information for rev 222

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 221 olivier.gi
#ifndef GFX_CONTROLLER_H
2
#define GFX_CONTROLLER_H
3
 
4
#include "timerA.h"
5
#include <in430.h>
6
#include <stdint.h>
7
 
8
//----------------------------------------------------------
9
// GLOBAL CONFIGURATION
10
//----------------------------------------------------------
11
 
12
#ifdef VERILOG_SIMULATION
13
  #define SCREEN_WIDTH         5
14
  #define SCREEN_HEIGHT        3
15
#else
16
  #define SCREEN_WIDTH         320
17
  #define SCREEN_HEIGHT        240
18
#endif
19
 
20
#define   FRAME_MEMORY_KB_SIZE 75*2
21
 
22
//#define LT24_ROTATE
23
 
24
//----------------------------------------------------------
25
// UTILITY MACROS
26
//----------------------------------------------------------
27
 
28
// Convert pixel coordinates into memory address
29
#define PIX_ADDR(X, Y) ((((uint32_t)(Y)) * ((uint32_t)(SCREEN_WIDTH))) + ((uint32_t)(X)))
30
 
31
 
32
//----------------------------------------------------------
33
// FUNCTIONS
34
//----------------------------------------------------------
35
 
36
// Initialization functions
37
void init_gfx_ctrl (uint16_t gfx_mode, uint16_t refresh_rate);
38
void start_gfx_ctrl(void);
39
 
40
// LT24 specific functions
41
void init_lt24(uint16_t lt24_clk_div);
42
void start_lt24(void);
43
 
44
// GPU Functions
45
void gpu_fill (uint32_t addr, uint16_t width, uint16_t length, uint16_t color, uint16_t configuration);
46
void gpu_copy (uint32_t src_addr, uint32_t dst_addr, uint16_t width, uint16_t length, uint16_t configuration);
47
void gpu_copy_transparent (uint32_t src_addr, uint32_t dst_addr, uint16_t width, uint16_t length, uint16_t trans_color, uint16_t configuration);
48
inline void gpu_wait_done (void);
49
 
50
// Other Functions
51
void sync_screen_refresh_done(void);
52
void sync_screen_refresh_start(void);
53
 
54
 
55
//----------------------------------------------------------
56
// GRAPHIC CONTROLLER REGISTERS
57
//----------------------------------------------------------
58
#define  GFX_CTRL          (*(volatile uint16_t  *) 0x0200)
59
#define  GFX_STATUS        (*(volatile uint16_t  *) 0x0208)
60
#define  GFX_IRQ           (*(volatile uint16_t  *) 0x020A)
61
 
62
#define  DISPLAY_WIDTH     (*(volatile uint16_t  *) 0x0210)
63
#define  DISPLAY_HEIGHT    (*(volatile uint16_t  *) 0x0212)
64
#define  DISPLAY_SIZE      (*(volatile uint32_t  *) 0x0214)
65
#define  DISPLAY_CFG       (*(volatile uint16_t  *) 0x0218)
66
#define  DISPLAY_REFR_CNT  (*(volatile uint16_t  *) 0x021A)
67
 
68
#define  LT24_CFG          (*(volatile uint16_t  *) 0x0220)
69
#define  LT24_REFRESH      (*(volatile uint16_t  *) 0x0222)
70
#define  LT24_REFRESH_SYNC (*(volatile uint16_t  *) 0x0224)
71
#define  LT24_CMD          (*(volatile uint16_t  *) 0x0226)
72
#define  LT24_CMD_PARAM    (*(volatile uint16_t  *) 0x0228)
73
#define  LT24_CMD_DFILL    (*(volatile uint16_t  *) 0x022A)
74
#define  LT24_STATUS       (*(volatile uint16_t  *) 0x022C)
75
 
76 222 olivier.gi
#define  LUT_CFG           (*(volatile uint16_t  *) 0x0230)
77
#define  LUT_RAM_ADDR      (*(volatile uint16_t  *) 0x0232)
78
#define  LUT_RAM_DATA      (*(volatile uint16_t  *) 0x0234)
79 221 olivier.gi
 
80
#define  FRAME_SELECT      (*(volatile uint16_t  *) 0x023E)
81
#define  FRAME0_PTR        (*(volatile uint32_t  *) 0x0240)
82
#define  FRAME1_PTR        (*(volatile uint32_t  *) 0x0244)
83
#define  FRAME2_PTR        (*(volatile uint32_t  *) 0x0248)
84
#define  FRAME3_PTR        (*(volatile uint32_t  *) 0x024C)
85
 
86
#define  VID_RAM0_CFG      (*(volatile uint16_t  *) 0x0250)
87
#define  VID_RAM0_WIDTH    (*(volatile uint16_t  *) 0x0252)
88
#define  VID_RAM0_ADDR     (*(volatile uint32_t  *) 0x0254)
89
#define  VID_RAM0_DATA     (*(volatile uint16_t  *) 0x0258)
90
 
91
#define  VID_RAM1_CFG      (*(volatile uint16_t  *) 0x0260)
92
#define  VID_RAM1_WIDTH    (*(volatile uint16_t  *) 0x0262)
93
#define  VID_RAM1_ADDR     (*(volatile uint32_t  *) 0x0264)
94
#define  VID_RAM1_DATA     (*(volatile uint16_t  *) 0x0268)
95
 
96
#define  GPU_CMD           (*(volatile uint16_t  *) 0x0270)
97
#define  GPU_CMD32         (*(volatile uint32_t  *) 0x0270)
98
#define  GPU_STAT          (*(volatile uint16_t  *) 0x0274)
99
 
100
 
101
//----------------------------------------------------------
102
// GRAPHIC CONTROLLER REGISTER FIELD MAPPING
103
//----------------------------------------------------------
104
 
105
// GFX_CTRL Register
106
#define  GFX_REFR_DONE_IRQ_EN      0x0001
107
#define  GFX_REFR_DONE_IRQ_DIS     0x0000
108
#define  GFX_REFR_START_IRQ_EN     0x0002
109
#define  GFX_REFR_START_IRQ_DIS    0x0000
110 222 olivier.gi
#define  GFX_REFR_CNT_DONE_IRQ_EN  0x0004
111
#define  GFX_REFR_CNT_DONE_IRQ_DIS 0x0000
112 221 olivier.gi
#define  GFX_GPU_FIFO_DONE_IRQ_EN  0x0010
113
#define  GFX_GPU_FIFO_DONE_IRQ_DIS 0x0000
114
#define  GFX_GPU_FIFO_OVFL_IRQ_EN  0x0020
115
#define  GFX_GPU_FIFO_OVFL_IRQ_DIS 0x0000
116
#define  GFX_GPU_CMD_DONE_IRQ_EN   0x0040
117
#define  GFX_GPU_CMD_DONE_IRQ_DIS  0x0000
118
#define  GFX_GPU_CMD_ERROR_IRQ_EN  0x0080
119
#define  GFX_GPU_CMD_ERROR_IRQ_DIS 0x0000
120
#define  GFX_16_BPP                0x0400
121
#define  GFX_8_BPP                 0x0300
122
#define  GFX_4_BPP                 0x0200
123
#define  GFX_2_BPP                 0x0100
124
#define  GFX_1_BPP                 0x0000
125
#define  GFX_GPU_EN                0x1000
126
#define  GFX_GPU_DIS               0x0000
127
 
128
// GFX_STATUS Register
129
#define  STATUS_REFRESH_BUSY       0x0001
130 222 olivier.gi
#define  STATUS_GPU_FIFO           0x0010
131
#define  STATUS_GPU_BUSY           0x0040
132 221 olivier.gi
 
133
// GFX_IRQ Register
134
#define  GFX_IRQ_REFRESH_DONE      0x0001
135
#define  GFX_IRQ_REFRESH_START     0x0002
136 222 olivier.gi
#define  GFX_IRQ_REFRESH_CNT_DONE  0x0004
137 221 olivier.gi
#define  GFX_IRQ_GPU_FIFO_DONE     0x0010
138
#define  GFX_IRQ_GPU_FIFO_OVFL     0x0020
139
#define  GFX_IRQ_GPU_CMD_DONE      0x0040
140
#define  GFX_IRQ_GPU_CMD_ERROR     0x0080
141
 
142
// DISPLAY_CFG Register
143
#define  DISPLAY_CL_SWAP           0x0001
144
#define  DISPLAY_Y_SWAP            0x0002
145
#define  DISPLAY_X_SWAP            0x0004
146
#define  DISPLAY_NO_CL_SWAP        0x0000
147
#define  DISPLAY_NO_Y_SWAP         0x0000
148
#define  DISPLAY_NO_X_SWAP         0x0000
149
 
150
// LT24_CFG Register
151
#define  LT24_ON                   0x0001
152
#define  LT24_RESET                0x0002
153
#define  LT24_CLK_DIV1             0x0000
154
#define  LT24_CLK_DIV2             0x0010
155
#define  LT24_CLK_DIV3             0x0020
156
#define  LT24_CLK_DIV4             0x0030
157
#define  LT24_CLK_DIV5             0x0040
158
#define  LT24_CLK_DIV6             0x0050
159
#define  LT24_CLK_DIV7             0x0060
160
#define  LT24_CLK_DIV8             0x0070
161
#define  LT24_CLK_MASK             0x0070
162
 
163
// LT24_REFRESH Register
164
#define  LT24_REFR_START           0x0001
165
#define  LT24_REFR_MANUAL          0x0000
166
#define  LT24_REFR_21_FPS          (((48000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
167
#define  LT24_REFR_24_FPS          (((40000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
168
#define  LT24_REFR_31_FPS          (((32000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
169
#define  LT24_REFR_42_FPS          (((24000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
170
#define  LT24_REFR_62_FPS          (((16000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
171
#define  LT24_REFR_125_FPS         ((( 8000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
172
#define  LT24_REFR_250_FPS         ((( 4000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
173
#define  LT24_REFR_500_FPS         ((( 2000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
174
#define  LT24_REFR_1000_FPS        ((( 1000000/DCO_CLK_PERIOD)>>8) & 0xFFF0)
175
#define  LT24_REFR_MASK            0xFFF0
176
 
177
// LT24_REFRESH_SYNC Register
178
#define  LT24_REFR_SYNC            0x8000
179
#define  LT24_REFR_NO_SYNC         0x0000
180
 
181
// LT24_CMD Register
182
#define  LT24_CMD_MSK              0x00FF
183
#define  LT24_CMD_HAS_PARAM        0x0100
184
#define  LT24_CMD_NO_PARAM         0x0000
185
 
186
// LT24_STATUS Register
187
#define  LT24_STATUS_FSM_BUSY      0x0001
188
#define  LT24_STATUS_WAIT_PARAM    0x0002
189
#define  LT24_STATUS_REFRESH_BUSY  0x0004
190
#define  LT24_STATUS_REFRESH_WAIT  0x0008
191
#define  LT24_STATUS_DFILL_BUSY    0x0010
192
 
193 222 olivier.gi
// LUT_CFG Register
194
#define  SW_LUT_DISABLE            0x0000
195
#define  SW_LUT_ENABLE             0x0001
196
#define  SW_LUT_RAM_RMW_MODE       0x0002
197
#define  SW_LUT_RAM_NO_RMW_MODE    0x0000
198
#define  SW_LUT_BANK0_SELECT       0x0000
199
#define  SW_LUT_BANK1_SELECT       0x0004
200
#define  HW_LUT_PALETTE_0_HI       0x0000
201
#define  HW_LUT_PALETTE_0_LO       0x0010
202
#define  HW_LUT_PALETTE_1_HI       0x0020
203
#define  HW_LUT_PALETTE_1_LO       0x0030
204
#define  HW_LUT_PALETTE_2_HI       0x0040
205
#define  HW_LUT_PALETTE_2_LO       0x0050
206
#define  HW_LUT_PALETTE_MSK        0x0070
207
#define  HW_LUT_BGCOLOR_MSK        0x0F00
208
#define  HW_LUT_FGCOLOR_MSK        0xF000
209
 
210
#define  HW_LUT_BG_BLACK           0x0000
211
#define  HW_LUT_BG_BLUE            0x0100
212
#define  HW_LUT_BG_GREEN           0x0200
213
#define  HW_LUT_BG_CYAN            0x0300
214
#define  HW_LUT_BG_RED             0x0400
215
#define  HW_LUT_BG_MAGENTA         0x0500
216
#define  HW_LUT_BG_BROWN           0x0600
217
#define  HW_LUT_BG_LIGHT_GRAY      0x0700
218
#define  HW_LUT_BG_GRAY            0x0800
219
#define  HW_LUT_BG_LIGHT_BLUE      0x0900
220
#define  HW_LUT_BG_LIGHT_GREEN     0x0A00
221
#define  HW_LUT_BG_LIGHT_CYAN      0x0B00
222
#define  HW_LUT_BG_LIGHT_RED       0x0C00
223
#define  HW_LUT_BG_LIGHT_MAGENTA   0x0D00
224
#define  HW_LUT_BG_YELLOW          0x0E00
225
#define  HW_LUT_BG_WHITE           0x0F00
226
 
227
#define  HW_LUT_FG_BLACK           0x0000
228
#define  HW_LUT_FG_BLUE            0x1000
229
#define  HW_LUT_FG_GREEN           0x2000
230
#define  HW_LUT_FG_CYAN            0x3000
231
#define  HW_LUT_FG_RED             0x4000
232
#define  HW_LUT_FG_MAGENTA         0x5000
233
#define  HW_LUT_FG_BROWN           0x6000
234
#define  HW_LUT_FG_LIGHT_GRAY      0x7000
235
#define  HW_LUT_FG_GRAY            0x8000
236
#define  HW_LUT_FG_LIGHT_BLUE      0x9000
237
#define  HW_LUT_FG_LIGHT_GREEN     0xA000
238
#define  HW_LUT_FG_LIGHT_CYAN      0xB000
239
#define  HW_LUT_FG_LIGHT_RED       0xC000
240
#define  HW_LUT_FG_LIGHT_MAGENTA   0xD000
241
#define  HW_LUT_FG_YELLOW          0xE000
242
#define  HW_LUT_FG_WHITE           0xF000
243
 
244 221 olivier.gi
// FRAME_SELECT Register
245
#define  REFRESH_FRAME0_SELECT     0x0000
246
#define  REFRESH_FRAME1_SELECT     0x0001
247
#define  REFRESH_FRAME2_SELECT     0x0002
248
#define  REFRESH_FRAME3_SELECT     0x0003
249
#define  REFRESH_FRAME_MASK        0x0003
250
 
251
#define  VID_RAM0_FRAME0_SELECT    0x0000
252
#define  VID_RAM0_FRAME1_SELECT    0x0010
253
#define  VID_RAM0_FRAME2_SELECT    0x0020
254
#define  VID_RAM0_FRAME3_SELECT    0x0030
255
#define  VID_RAM0_FRAME_MASK       0x0030
256
 
257
#define  VID_RAM1_FRAME0_SELECT    0x0000
258
#define  VID_RAM1_FRAME1_SELECT    0x0040
259
#define  VID_RAM1_FRAME2_SELECT    0x0080
260
#define  VID_RAM1_FRAME3_SELECT    0x00C0
261
#define  VID_RAM1_FRAME_MASK       0x00C0
262
 
263
// VID_RAMx_CFG Register
264
#define  VID_RAM_RMW_MODE          0x0010
265
#define  VID_RAM_MSK_MODE          0x0020
266
#define  VID_RAM_WIN_MODE          0x0040
267
#define  VID_RAM_NO_RMW_MODE       0x0000
268
#define  VID_RAM_NO_MSK_MODE       0x0000
269
#define  VID_RAM_NO_WIN_MODE       0x0000
270
#define  VID_RAM_WIN_CL_SWAP       0x0001
271
#define  VID_RAM_WIN_Y_SWAP        0x0002
272
#define  VID_RAM_WIN_X_SWAP        0x0004
273
#define  VID_RAM_WIN_NO_CL_SWAP    0x0000
274
#define  VID_RAM_WIN_NO_Y_SWAP     0x0000
275
#define  VID_RAM_WIN_NO_X_SWAP     0x0000
276
 
277
// GPU_STAT Register
278
#define  GPU_STAT_FIFO_CNT_EMPTY   0x000F
279
#define  GPU_STAT_FIFO_CNT         0x00F0
280
#define  GPU_STAT_FIFO_EMPTY       0x0100
281
#define  GPU_STAT_FIFO_FULL        0x0200
282
#define  GPU_STAT_DMA_BUSY         0x1000
283
#define  GPU_STAT_BUSY             0x8000
284
 
285
//----------------------------------------------------------
286
// GPU COMMANDS
287
//----------------------------------------------------------
288
 
289
// GPU COMMAND
290
#define  GPU_EXEC_FILL             0x0000
291
#define  GPU_EXEC_COPY             0x4000
292
#define  GPU_EXEC_COPY_TRANS       0x8000
293
#define  GPU_REC_WIDTH             0xC000
294
#define  GPU_REC_HEIGHT            0xD000
295
#define  GPU_SRC_PX_ADDR           0xF800
296
#define  GPU_DST_PX_ADDR           0xF801
297
#define  GPU_OF0_ADDR              0xF810
298
#define  GPU_OF1_ADDR              0xF811
299
#define  GPU_OF2_ADDR              0xF812
300
#define  GPU_OF3_ADDR              0xF813
301
#define  GPU_SET_FILL              0xF420
302
#define  GPU_SET_TRANS             0xF421
303
 
304
// ADDRESS SOURCE SELECTION
305
#define  GPU_SRC_OF0               0x0000
306
#define  GPU_SRC_OF1               0x1000
307
#define  GPU_SRC_OF2               0x2000
308
#define  GPU_SRC_OF3               0x3000
309
#define  GPU_DST_OF0               0x0000
310
#define  GPU_DST_OF1               0x0008
311
#define  GPU_DST_OF2               0x0010
312
#define  GPU_DST_OF3               0x0018
313
 
314
// DMA CONFIGURATION
315
#define  GPU_DST_CL_SWP            0x0001
316
#define  GPU_DST_Y_SWP             0x0002
317
#define  GPU_DST_X_SWP             0x0004
318
#define  GPU_SRC_CL_SWP            0x0200
319
#define  GPU_SRC_Y_SWP             0x0400
320
#define  GPU_SRC_X_SWP             0x0800
321
#define  GPU_DST_NO_CL_SWP         0x0000
322
#define  GPU_DST_NO_Y_SWP          0x0000
323
#define  GPU_DST_NO_X_SWP          0x0000
324
#define  GPU_SRC_NO_CL_SWP         0x0000
325
#define  GPU_SRC_NO_Y_SWP          0x0000
326
#define  GPU_SRC_NO_X_SWP          0x0000
327
 
328
#define  DST_SWAP_NONE             0x0000
329
#define  DST_SWAP_CL               0x0001
330
#define  DST_SWAP_Y                0x0002
331
#define  DST_SWAP_Y_CL             0x0003
332
#define  DST_SWAP_X                0x0004
333
#define  DST_SWAP_X_CL             0x0005
334
#define  DST_SWAP_X_Y              0x0006
335
#define  DST_SWAP_X_Y_CL           0x0007
336
#define  DST_SWAP_MSK              0xFFF8
337
 
338
#define  SRC_SWAP_NONE             0x0000
339
#define  SRC_SWAP_CL               0x0200
340
#define  SRC_SWAP_Y                0x0400
341
#define  SRC_SWAP_Y_CL             0x0600
342
#define  SRC_SWAP_X                0x0800
343
#define  SRC_SWAP_X_CL             0x0A00
344
#define  SRC_SWAP_X_Y              0x0C00
345
#define  SRC_SWAP_X_Y_CL           0x0E00
346
#define  SRC_SWAP_MSK              0xF1FF
347
 
348
// PIXEL OPERATION
349
#define  GPU_PXOP_0                0x0000  // S
350
#define  GPU_PXOP_1                0x0020  // not S
351
#define  GPU_PXOP_2                0x0040  // not D
352
#define  GPU_PXOP_3                0x0060  // S and D
353
#define  GPU_PXOP_4                0x0080  // S or  D
354
#define  GPU_PXOP_5                0x00A0  // S xor D
355
#define  GPU_PXOP_6                0x00C0  // not (S and D)
356
#define  GPU_PXOP_7                0x00E0  // not (S or  D)
357
#define  GPU_PXOP_8                0x0100  // not (S xor D)
358
#define  GPU_PXOP_9                0x0120  // (not S) and      D
359
#define  GPU_PXOP_A                0x0140  //      S  and (not D)
360
#define  GPU_PXOP_B                0x0160  // (not S) or       D
361
#define  GPU_PXOP_C                0x0180  //      S  or  (not D)
362
#define  GPU_PXOP_D                0x01A0  // Fill 0            if S not transparent (only COPY_TRANSPARENT command)
363
#define  GPU_PXOP_E                0x01C0  // Fill 1            if S not transparent (only COPY_TRANSPARENT command)
364
#define  GPU_PXOP_F                0x01E0  // Fill 'fill_color' if S not transparent (only COPY_TRANSPARENT command)
365
 
366
 
367
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.