📄 driver.lst
字号:
C51 COMPILER V7.50 DRIVER 10/19/2006 09:37:29 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DRIVER
OBJECT MODULE PLACED IN .\Driver.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Src\Driver.c OMF2 ROM(COMPACT) BROWSE DEBUG PRINT(.\Driver.lst) OBJECT(.
-\Driver.obj)
line level source
1 /*==========================================================================*/
2 /*
3 ; SOURCE_FILE: Driver.C
4 ; APPLICATION: LPC9XX
5 ; COMPONENT: ISR,IIC,IR
6 ; DATE: 16 May 2006
7 ;
8 ; (C) 2006 : CHANGHONG FPD SOFTWARE Lab
9 AUTHOR: DJ
10 */
11 /*==========================================================================*/
12
13 #define _DRIVER_C_
14 /* ======================================= */
15 // INCLUDE
16 /* ======================================= */
17 #include <REG922.H>
18 #include <intrins.h>
19 #include "define.h"
20 #include "Driver.h"
21 #include "clone.h"
22 /* ======================================= */
23 // STATIC VARIABLE DEFINE
24 /* ====================================== */
25 //i2c
26 static Bool bSubAddrSended = FALSE;
27 static Bool bIrSendTimer1Use = FALSE;
28 static Bool bIrOutPinChangeStandby = FALSE;
29 static Bool bIrOutPinStatus = 0;
30
31 static I2C_MESSAGE DATA NvI2c;
32 //ir
33 static Byte DATA ucIrDetectStatus = 0;
34 static Byte DATA ucIrRecBitCount = 0;
35 static Byte DATA ucIrRecByte = 0;
36 static Byte DATA ucNeedRecByteNum = 0;
37 //static Byte DATA ucIrDetectTimer = 0;
38 //static Byte DATA ucDelay1msCount = 0;
39 static Byte DATA ucIrSendDelayType = 0;
40
41
42
43 /* ======================================= */
44 //MACRO DEFINE
45 /* ======================================= */
46
47 /* ======================================= */
48 //FUNCTION DEFINE
49 /* ======================================= */
50 //only use for creat IR 38K carrier wave
51 void ISR_Timer0(void) interrupt 1 using 1
52 {
53 1 TF0 = 0;//clear the flag
54 1 TR0 = 0;
C51 COMPILER V7.50 DRIVER 10/19/2006 09:37:29 PAGE 2
55 1 TL0 = LOWBYTE(ISR_TIME0_38K_RELOAD_VALUE);
56 1 TH0 = HIGHBYTE(ISR_TIME0_38K_RELOAD_VALUE);
57 1 TR0 = 1;
58 1
59 1 if((bIrOutPinStatus == 0) ||
60 1 (bIrOutPinChangeStandby == TRUE))
61 1 {
62 2 bIrOutPinChangeStandby = FALSE;
63 2 PIN_IR_OUT = ~PIN_IR_OUT;
64 2 bIrOutPinStatus = ~bIrOutPinStatus;
65 2 }
66 1 else
67 1 {
68 2 bIrOutPinChangeStandby = TRUE;
69 2 }
70 1 }
71
72 /* ======================================= */
73 //IR receive hander
74 void ISR_ExtInt1(void) interrupt 2 using 1
75 {
76 1 Word irTimer;
77 1 IE1 = 0;//clear flag
78 1 // irTimer = ucIrDetectTimer;
79 1 // ucIrDetectTimer = 0;
80 1 TR1 = 0;
81 1 irTimer = (TH1<<8) + TL1;
82 1 TL1 = 0;
83 1 TH1 = 0;
84 1 TR1 = 1;
85 1
86 1 if(INT1) return; //get rid of debounce
87 1 switch(ucIrDetectStatus)
88 1 {
89 2 case IR_STANDBY:
90 2 ucIrDetectStatus = IR_CHECK_LEADING;
91 2 break;
92 2 case IR_CHECK_LEADING:
93 2 if(irTimer > (IR_LEADING_TIME - IR_LEADING_DIFF) &&
94 2 irTimer < (IR_LEADING_TIME + IR_LEADING_DIFF) )
95 2 {
96 3 ucIrDetectStatus = IR_REC_DATA;
97 3 ucIrRecBitCount = 0;
98 3 ucNeedRecByteNum = 0;
99 3 ucIrRecByte = 0;
100 3 }
101 2 else
102 2 {
103 3 ucIrDetectStatus = IR_STANDBY;
104 3 }
105 2 break;
106 2 case IR_REC_DATA:
107 2 ucIrRecByte >>= 1;
108 2 if(irTimer <= IR_LOGIC0_1_BORDER)
109 2 {
110 3 ;//ucIrRecByte &= ~BIT7; // 0
111 3 }
112 2 else
113 2 {
114 3 ucIrRecByte |= BIT7; // 1
115 3 }
116 2 // else
C51 COMPILER V7.50 DRIVER 10/19/2006 09:37:29 PAGE 3
117 2 // {
118 2 // g_ucIRRecDataType = REC_ERROR;
119 2 // ucIrDetectStatus = IR_STANDBY;
120 2 // }
121 2 ucIrRecBitCount++;
122 2 if((ucIrRecBitCount % 8) == 0)
123 2 {
124 3 irRecBuffer[(ucIrRecBitCount/8) - 1] = ucIrRecByte;
125 3 ucIrRecByte = 0;
126 3 if(ucIrRecBitCount == 16)//get first 2 bytes
127 3 {
128 4 if((irRecBuffer[0] == 0xAA) && (irRecBuffer[1] == 0x55))
129 4 {
130 5 g_ucIRRecDataType = REC_SEND_READY;
131 5 g_bIRDetect = 1;
132 5 }
133 4 else if((irRecBuffer[0]== 0xAB) && (irRecBuffer[1] == 0x54))
134 4 {
135 5 g_ucIRRecDataType = REC_DATA_ADDRESS;
136 5 ucNeedRecByteNum = 5;
137 5 }
138 4 else if((irRecBuffer[0] == 0xAC) && (irRecBuffer[1] == 0x53))
139 4 {
140 5 g_bIRDetect = 1;
141 5 g_ucIRRecDataType = REC_REC_READY;
142 5 }
143 4 else if((irRecBuffer[0] == 0xAD) && (irRecBuffer[1] == 0x52))
144 4 {
145 5 g_ucIRRecDataType = REC_N_BYTES;
146 5 }
147 4 else if((irRecBuffer[0] == 0xAE) && (irRecBuffer[1] == 0x51))
148 4 {
149 5 g_ucIRRecDataType = REC_16_BYTES;
150 5 ucNeedRecByteNum = 19;
151 5 }
152 4 else
153 4 {
154 5 //g_ucIRRecDataType = REC_ERROR; //test
155 5 ucIrDetectStatus = IR_STANDBY;
156 5 }
157 4 }
158 3 else if((ucIrRecBitCount == 24) && ( g_ucIRRecDataType == REC_N_BYTES))
159 3 {
160 4 ucNeedRecByteNum = irRecBuffer[2] + 4;
161 4 }
162 3 else if(ucIrRecBitCount == (ucNeedRecByteNum*8))
163 3 {
164 4 g_bIRDetect = 1;
165 4 }
166 3 if(g_bIRDetect)
167 3 {
168 4 ucIrDetectStatus = IR_STANDBY;
169 4 }
170 3
171 3 }
172 2 break;
173 2
174 2 default:
175 2 break;
176 2 }
177 1 //20060616>>>confirm
178 1 EX1 = 1;
C51 COMPILER V7.50 DRIVER 10/19/2006 09:37:29 PAGE 4
179 1 IT1 = 1;
180 1 //20060616<<<
181 1 }
182 /* ======================================= */
183
184 void ISR_Timer1(void) interrupt 3 using 2
185 {
186 1 TF1 = 0; //Clear Flag
187 1
188 1 if(ucIrSendDelayType != DELAY_FINISH)
189 1 {
190 2 ucIrSendDelayType = DELAY_FINISH;
191 2 }
192 1
193 1 if(ucIrDetectStatus != IR_STANDBY)
194 1 {
195 2 ucIrDetectStatus = IR_STANDBY;
196 2 TR1 = 0;
197 2 }
198 1 }
199
200 /* ======================================= */
201 void ISR_I2c(void) interrupt 6 using 1
202 {
203 1 switch(I2STAT)
204 1 {
205 2 case 0x08://A START condition has been transmitted
206 2 I2DAT = NV_DEVICE_ADDR;//for nv ,first start must write device address with write
207 2 STA = 0;
208 2 break;
209 2
210 2 case 0x10://A repeated START condition has been transmitted
211 2 if(NvI2c.Direction == NV_WRITE)
212 2 I2DAT = NV_DEVICE_ADDR;
213 2 else
214 2 I2DAT = NV_DEVICE_ADDR + 1;
215 2
216 2 STA = 0;
217 2 break;
218 2 //master transmit
219 2 case 0x18://SLA+W has been transmitted;ACK has been received
220 2 I2DAT = HIGHBYTE(g_wCloneNVAddress);
221 2 NvI2c.RetryCount = 0;
222 2 break;
223 2 case 0x20://SLA+W has been transmitted; NOT-ACK has been received
224 2 if(NvI2c.RetryCount > 3)
225 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -