📄 adc.lst
字号:
1 .file "adc.c"
2 .arch atmega128
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
74 .global ADCHPLInitPortmap
76 ADCHPLInitPortmap:
1:adc.c **** /*
2:adc.c **** ****************************************************************************
3:adc.c **** * 宁波市科技园区创业大厦六楼
4:adc.c **** * 宁波中科集成电路设计中心 版权所有 Copyright 2005
5:adc.c **** *
6:adc.c **** *文件名: adc.c
7:adc.c **** *程序员:
8:adc.c **** *主要内容:ADC
9:adc.c **** *完成日期:2005.3.25
10:adc.c **** ****************************************************************************
11:adc.c **** */
12:adc.c ****
13:adc.c **** #include "adc.h"
14:adc.c **** #include "os.h"
15:adc.c **** #include "radiocontrol.h"
16:adc.c **** #include "sensor.h"
17:adc.c ****
18:adc.c **** uint16_t ADCM_ReqPort;
19:adc.c **** uint16_t ADCM_ReqVector;
20:adc.c **** uint16_t ADCM_ContReqMask;
21:adc.c **** bool HPLADCM_init_portmap_done;
22:adc.c **** uint8_t adcPortmap[OSH_ADC_PORTMAPSIZE];
23:adc.c ****
24:adc.c ****
25:adc.c **** result_t ADCHPLInit(void)
26:adc.c **** {
27:adc.c **** ADCHPLInitPortmap();
28:adc.c ****
29:adc.c **** { uint8_t atomicState = AtomicStart();
30:adc.c **** {
31:adc.c **** * (volatile unsigned char *)(0x06 + 0x20) = (1 << 3) | (6 << 0);
32:adc.c ****
33:adc.c **** * (volatile unsigned char *)(0x07 + 0x20) = 0;
34:adc.c **** }
35:adc.c **** AtomicEnd(atomicState); }
36:adc.c **** return SUCCESS;
37:adc.c **** }
38:adc.c ****
39:adc.c **** result_t ADCControlInit(void)
40:adc.c **** {
41:adc.c **** { uint8_t atomicState = AtomicStart();
42:adc.c **** {
43:adc.c **** ADCM_ReqPort = 0;
44:adc.c **** ADCM_ReqVector = ADCM_ContReqMask = 0;
45:adc.c **** }
46:adc.c **** AtomicEnd(atomicState); }
47:adc.c ****
48:adc.c **** return ADCHPLInit();
49:adc.c **** }
50:adc.c ****
51:adc.c **** result_t ADCBindPort(uint8_t port, uint8_t adcPort)
52:adc.c **** {
53:adc.c **** if (
54:adc.c **** port < OSH_ADC_PORTMAPSIZE &&
55:adc.c **** port != OS_ADC_BANDGAP_PORT &&
56:adc.c **** port != OS_ADC_GND_PORT) {
57:adc.c **** ADCHPLInitPortmap();
58:adc.c **** { uint8_t atomicState = AtomicStart();
59:adc.c **** adcPortmap[port] = adcPort;
60:adc.c **** AtomicEnd(atomicState); }
61:adc.c **** return SUCCESS;
62:adc.c **** }
63:adc.c **** else {
64:adc.c **** return FAIL;
65:adc.c **** }
66:adc.c **** }
67:adc.c ****
68:adc.c **** result_t ADCDataReady(uint8_t port, uint16_t value){
69:adc.c **** unsigned char result;
70:adc.c ****
71:adc.c **** switch (port) {
72:adc.c ****
73:adc.c **** case OS_ADC_CC_RSSI_PORT:
74:adc.c **** result = RadiocontrolRSSIADCDataReady(value);
75:adc.c **** break;
76:adc.c ****
77:adc.c **** case OS_ADC_PHOTO_PORT:
78:adc.c **** result = SensorInternalPhotoADCDataReady(value);
79:adc.c **** break;
80:adc.c ****
81:adc.c **** case OS_ADC_TEMP_PORT:
82:adc.c **** result = SensorInternalTempADCDataReady(value);
83:adc.c **** break;
84:adc.c ****
85:adc.c **** default:
86:adc.c **** result = 0;
87:adc.c **** }
88:adc.c ****
89:adc.c **** return result;
90:adc.c **** }
91:adc.c ****
92:adc.c **** result_t ADCHPLDataReady(uint16_t data)
93:adc.c **** {
94:adc.c **** uint16_t doneValue = data;
95:adc.c **** uint8_t donePort;
96:adc.c **** result_t Result;
97:adc.c ****
98:adc.c ****
99:adc.c **** { uint8_t atomicState = AtomicStart();
100:adc.c **** {
101:adc.c **** donePort = ADCM_ReqPort;
102:adc.c ****
103:adc.c **** if (((1 << donePort) & ADCM_ContReqMask) == 0) {
104:adc.c **** ADCM_ReqVector &= ~(1 << donePort);
105:adc.c **** }
106:adc.c ****
107:adc.c **** if (ADCM_ReqVector) {
108:adc.c **** do {
109:adc.c **** ADCM_ReqPort++;
110:adc.c **** ADCM_ReqPort = ADCM_ReqPort == OSH_ADC_PORTMAPSIZE ? 0 : ADCM_ReqPort;
111:adc.c **** }
112:adc.c **** while (((
113:adc.c **** 1 << ADCM_ReqPort) & ADCM_ReqVector) == 0);
114:adc.c **** ADCHPLSamplePort(ADCM_ReqPort);
115:adc.c **** }
116:adc.c **** }
117:adc.c **** AtomicEnd(atomicState); }
118:adc.c ****
119:adc.c ****
120:adc.c **** Result = ADCDataReady(donePort, doneValue);
121:adc.c ****
122:adc.c **** { uint8_t atomicState = AtomicStart();
123:adc.c **** {
124:adc.c **** if (Result == FAIL && ADCM_ContReqMask & (1 << donePort)) {
125:adc.c **** ADCM_ContReqMask &= ~(1 << donePort);
126:adc.c **** }
127:adc.c **** }
128:adc.c **** AtomicEnd(atomicState); }
129:adc.c ****
130:adc.c **** return SUCCESS;
131:adc.c **** }
132:adc.c ****
133:adc.c **** result_t ADCStartGet(uint8_t newState, uint8_t port)
134:adc.c **** {
135:adc.c **** uint16_t PortMask;
136:adc.c **** uint16_t oldReqVector;
137:adc.c **** result_t Result = SUCCESS;
138:adc.c ****
139:adc.c **** if (port > OSH_ADC_PORTMAPSIZE) {
140:adc.c **** return FAIL;
141:adc.c **** }
142:adc.c ****
143:adc.c **** PortMask = 1 << port;
144:adc.c ****
145:adc.c **** { uint8_t atomicState = AtomicStart();
146:adc.c **** {
147:adc.c **** if ((PortMask & ADCM_ReqVector) != 0) {
148:adc.c ****
149:adc.c **** Result = FAIL;
150:adc.c **** }
151:adc.c **** else {
152:adc.c **** oldReqVector = ADCM_ReqVector;
153:adc.c **** ADCM_ReqVector |= PortMask;
154:adc.c **** if (newState == ADCM_CONTINUOUS_CONVERSION) {
155:adc.c **** ADCM_ContReqMask |= PortMask;
156:adc.c **** }
157:adc.c **** if (oldReqVector == 0) {
158:adc.c ****
159:adc.c **** ADCM_ReqPort = port;
160:adc.c **** Result = ADCHPLSamplePort(port);
161:adc.c **** }
162:adc.c **** }
163:adc.c **** }
164:adc.c **** AtomicEnd(atomicState); }
165:adc.c ****
166:adc.c ****
167:adc.c **** return Result;
168:adc.c **** }
169:adc.c ****
170:adc.c **** result_t ADCGetData(uint8_t port)
171:adc.c **** {
172:adc.c **** return ADCStartGet(ADCM_SINGLE_CONVERSION, port);
173:adc.c **** }
174:adc.c ****
175:adc.c **** void ADCHPLInitPortmap(void)
176:adc.c **** {
78 .LM1:
79 /* prologue: frame size=0 */
80 /* prologue end (size=0) */
81 .LBB2:
177:adc.c ****
178:adc.c **** { uint8_t atomicState = AtomicStart();
83 .LM2:
84 0000 0E94 0000 call AtomicStart
85 0004 282F mov r18,r24
179:adc.c **** {
180:adc.c **** if (HPLADCM_init_portmap_done == FALSE) {
87 .LM3:
88 0006 8091 0000 lds r24,HPLADCM_init_portmap_done
89 000a 8823 tst r24
90 000c 91F4 brne .L2
91 .LBB3:
181:adc.c **** int i;
182:adc.c ****
183:adc.c **** for (i = 0; i < OSH_ADC_PORTMAPSIZE; i++)
93 .LM4:
94 000e 80E0 ldi r24,lo8(0)
95 0010 90E0 ldi r25,hi8(0)
96 0012 E0E0 ldi r30,lo8(adcPortmap)
97 0014 F0E0 ldi r31,hi8(adcPortmap)
98 .L6:
184:adc.c **** adcPortmap[i] = i;
100 .LM5:
101 0016 8193 st Z+,r24
103 .LM6:
104 0018 0196 adiw r24,1
105 001a 8C30 cpi r24,12
106 001c 9105 cpc r25,__zero_reg__
107 001e DCF3 brlt .L6
185:adc.c ****
186:adc.c ****
187:adc.c **** adcPortmap[OS_ADC_BANDGAP_PORT] = OSH_ACTUAL_BANDGAP_PORT;
109 .LM7:
110 0020 8EE1 ldi r24,lo8(30)
111 0022 8093 0000 sts adcPortmap+10,r24
188:adc.c **** adcPortmap[OS_ADC_GND_PORT] = OSH_ACTUAL_GND_PORT;
113 .LM8:
114 0026 8FE1 ldi r24,lo8(31)
115 0028 8093 0000 sts adcPortmap+11,r24
189:adc.c **** HPLADCM_init_portmap_done = TRUE;
117 .LM9:
118 002c 81E0 ldi r24,lo8(1)
119 002e 8093 0000 sts HPLADCM_init_portmap_done,r24
120 .L2:
121 .LBE3:
190:adc.c **** }
191:adc.c **** }
192:adc.c **** AtomicEnd(atomicState); }
123 .LM10:
124 0032 822F mov r24,r18
125 0034 0E94 0000 call AtomicEnd
126 .LBE2:
127 /* epilogue: frame size=0 */
128 0038 0895 ret
129 /* epilogue end (size=1) */
130 /* function ADCHPLInitPortmap size 29 (28) */
139 .global ADCHPLInit
141 ADCHPLInit:
143 .LM11:
144 /* prologue: frame size=0 */
145 /* prologue end (size=0) */
147 .LM12:
148 003a 0E94 0000 call ADCHPLInitPortmap
149 .LBB4:
151 .LM13:
152 003e 0E94 0000 call AtomicStart
154 .LM14:
155 0042 9EE0 ldi r25,lo8(14)
156 0044 96B9 out 38-0x20,r25
158 .LM15:
159 0046 17B8 out 39-0x20,__zero_reg__
161 .LM16:
162 0048 0E94 0000 call AtomicEnd
163 .LBE4:
165 .LM17:
166 004c 81E0 ldi r24,lo8(1)
167 004e 90E0 ldi r25,hi8(1)
168 /* epilogue: frame size=0 */
169 0050 0895 ret
170 /* epilogue end (size=1) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -