📄 md.lst
字号:
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MD
OBJECT MODULE PLACED IN .\OBJ\md.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE md.c LARGE OPTIMIZE(9,SIZE) BROWSE PRINT(.\LST\md.lst) OBJECT(.\OBJ\md.obj)
line level source
1 /*
2 Vineyard Technologies, Inc.
3
4 * MD header file
5 file name: md.c
6 Author: Owen Kwon
7 history: 12/31/03 initial, start
8
9 * Introduction
10 Implementation of MD
11
12 * compile option
13 VY_MD
14 include MD module
15 VY_MD_DEBUG_AREA
16 print coordinates of one block area
17 VY_MD_DEBUG_INT
18 print interrupt service status
19 */
20
21 #include "types.h"
22
23 #ifdef VY_MD
24
25 ///////////////////////////////////////////////////////////////////////////////
26 // includes
27 #include "md.h"
28 #include "absacc.h"
29 #include "gio.h"
30 #include "eprom.h"
31 #include "stdio.h"
32 #include "tw2804.h"
33 #ifdef USE_4954_GP
#include "cs4954.h"
#endif
36
37 #ifdef G1PMD
38
39 WORD g1p_md_get_block_count(u8 *ch_num);
40 u8 g1p_md_get_max_difference(void);
41 u8 g1p_conv_16x24_to_16x32(u8 y);
42 u8 g1pMDreg_read(u8 addr);
43 void g1pMDreg_write(u8 addr, u8 value);
44 void g1p_md_reg_set_area(BYTE ch);
45 void g1p_md_enable(BOOL enable);
46 BOOL g1p_md_is_detected(u8 cmd);
47
48 //
49 // G1P MD indirect mode address and data registers
50 // assuming the G1P base register address base is 0x8000
51 //
52 #define MD_ADDRESS_REGISTER XBYTE[0x8016]
53 #define MD_DATA_REGISTER XBYTE[0x8017]
54
55 // G1P MD registers
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 2
56 // general
57 #define MD_BCL 0x0A
58 #define MD_BCH 0x0B
59 #define MD_DMAXL 0x0C
60 #define MD_DMAXH 0x0D
61
62 #endif // G1PMD
63
64
65 ///////////////////////////////////////////////////////////////////////////////
66 // extern variables
67 extern xdata BYTE gv_NTSC_PAL;
68
69 ///////////////////////////////////////////////////////////////////////////////
70 // Global Variables: public
71
72 // md levels
73 xdata BYTE mdgv_md_sensitivity_levels[4] = {0,0,0,0};
74 // sensitivity level set indexes
75
76 // md area : value unit is based on 16 x 24 font and saved into EPROM directly
77 xdata BYTE mdgv_md_areas[4][2][4] = {
78 {{0,0,0,0},{0,0,0,0}}, // channel 0
79 {{0,0,0,0},{0,0,0,0}}, // channel 1
80 {{0,0,0,0},{0,0,0,0}}, // channel 2
81 {{0,0,0,0},{0,0,0,0}}}; // channel 3
82 // { 0:block 0, upper-left point x,
83 // 1:block 0, upper-left point y,
84 // 2:block 0, lower-right point x,
85 // 3:block 0, lower-right point y,
86 // 4:block 1, upper-left point x,
87 // 5:block 1, upper-left point y,
88 // 6:block 1, lower-right point x,
89 // 7:block 1, lower-right point y}
90 // set for each channel
91
92 // md detected channel
93 xdata BYTE mdgv_channel_detected = 0; // "default No Channel"
94 // bit[0]: channel 0
95 // bit[1]: channel 1
96 // bit[2]: channel 2
97 // bit[3]: channel 3
98 // bit[7~4]: don't care
99
100 // md enable/disable status
101 xdata BYTE mdgv_md_active_ch_stat = 0;
102 // indicates md enable/disable status
103 // bit[0]: channel 0
104 // bit[1]: channel 1
105 // bit[2]: channel 2
106 // bit[3]: channel 3
107 // bit[7~4]: don't care
108
109 xdata BYTE mdgv_md_enabled = 0;
110
111 ///////////////////////////////////////////////////////////////////////////////
112 // Global Variables: private
113 #ifdef G1PMD
114 static xdata BYTE mdgvp_md_sensitivity_level_set[MD_SENSITIVITY_LEVEL_MAX]
115 = {0x00,0x99,0x77,0x56,0x55,0x46,0x45,0x44,0x34,0x33};
116 // {bit[7~4]:mean, bit[3~0]:mean variant} pair for each channel
117 // level description
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 3
118 // mean mean variant remark
119 // -----------+-------+---------------+-----------
120 // level 0: 0 0 disable
121 // level 1: 9 9
122 // level 2: 7 7
123 // level 3: 5 6
124 // level 4: 5 5
125 // level 5: 4 6
126 // level 6: 4 5
127 // level 7: 4 4
128 // level 8: 3 4
129 // level 9: 3 3 most sensitive
130
131 #endif
132
133 #ifdef TW2804
static xdata BYTE mdgvp_md_sensitivity_level_set[MD_SENSITIVITY_LEVEL_MAX] =
// Field Description
// bit[7~4]:LVLSENS, bit[3~2]:TMPSENS, bit[1~0]:SPTSENS
/*
// Level Temp Special
// ----- ---- -------
// 0000 00 00
{ 0x00, // Off Off Off
0x5B, // 1010 10 11
0x4B, // 1000 10 11
0x3B, // 0110 10 11
0x2B, // 0100 10 11
0x1B // 0010 10 11
}; // TechWell's recommended value
*/
// Level Temp Special
// ----- ---- -------
// 0000 00 00
{ 0x00, // Off Off Off
0x5E, // 1010 11 10
0x4E, // 1000 11 10
0x3E, // 0110 11 10
0x2E, // 0100 11 10
0x1E // 0010 11 10
}; // Owen's value - 1
/*
// Level Temp Special
// ----- ---- -------
// 0000 00 00
{ 0x00, // Off Off Off
0xa7, // 1010 01 11
0x87, // 1000 01 11
0x67, // 0110 01 11
0x47, // 0100 01 11
0x27 // 0010 01 11
}; // Steve's value
*/
#define MD_MPERIOD 5
// md enable channel status
static xdata BYTE mdgvp_channel_enable_mask = 0x0F;
void tw2804_md_reg_set_area(BYTE ch);
void tw2804_md_enable(BOOL enable);
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 4
BOOL tw2804_md_is_detected(void);
#endif
182
183 /*/////////////////////////////////////////////////////////
184 void md_eprom_write(BYTE ch)
185
186 * save md info. at the eprom for a channel specified
187 ch : BYTE, channel number [0~3]
188 * remark
189 writes md info. of the specified channel
190 area : mdgv_md_areas will be saved
191 level: mdgv_md_sensitivity_levels will be saved
192 /////////////////////////////////////////////////////////*/
193 void md_eprom_write(BYTE ch)
194 {
195 1 xdata BYTE offset_base = ch*0x09 + EPROM_MD_OFFSET;
196 1 xdata BYTE i,j;
197 1 // write area info.
198 1 for(i=0;i<2;i++)
199 1 {
200 2 for(j=0;j<4;j++)
201 2 {
202 3 EPROM_SetUp_data_Write(offset_base+i*4+j, mdgv_md_areas[ch][i][j]);
203 3 }
204 2 }
205 1 // write sensitivity level
206 1 EPROM_SetUp_data_Write(offset_base+8, mdgv_md_sensitivity_levels[ch]);
207 1 }
208
209 /*/////////////////////////////////////////////////////////
210 void md_eprom_read(BYTE ch)
211
212 * retrieve md info. from the eprom for a channel specified
213 ch : BYTE, channel number [0~3]
214 * remark
215 writes md info. of the specified channel
216 area info will be copied to mdgv_md_areas
217 level will be copied to mdgv_md_sensitivity_levels
218 /////////////////////////////////////////////////////////*/
219 void md_eprom_read(BYTE ch)
220 {
221 1 xdata BYTE offset_base = ch*0x09 + EPROM_MD_OFFSET;
222 1 xdata BYTE i,j;
223 1 // write area info.
224 1 for(i=0;i<2;i++)
225 1 {
226 2 for(j=0;j<4;j++)
227 2 {
228 3 mdgv_md_areas[ch][i][j] = EPROM_SetUp_data_Read(offset_base+i*4+j);
229 3 }
230 2 }
231 1 // read sensitivity level
232 1 mdgv_md_sensitivity_levels[ch] = EPROM_SetUp_data_Read(offset_base+8);
233 1 }
234
235 /*/////////////////////////////////////////////////////////
236 void md_reg_set_area(BYTE ch)
237
238 * set md area for each channel
239 ch : BYTE, channel number [0~3]
240 * scope public
241 * remark
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 5
242 global variable mdgv_md_areas[ch][..] should be set
243 before calling this function
244 /////////////////////////////////////////////////////////*/
245 void md_reg_set_area(BYTE ch)
246 {
247 1 #ifdef TW2804
tw2804_md_reg_set_area(ch);
#endif
250 1
251 1 #ifdef G1PMD
252 1 g1p_md_reg_set_area(ch);
253 1 #endif
254 1 }
255
256
257 /*/////////////////////////////////////////////////////////
258 BOOL md_init(void)
259
260 * load md area data from eprom and write md registers
261 * remark
262 n/a
263 /////////////////////////////////////////////////////////*/
264 void md_init(void)
265 {
266 1 xdata BYTE i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -