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