⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 2 页
字号:
   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:
  90               	ADCHPLInitPortmap:
   1:adc.c         **** /*
   2:adc.c         **** ****************************************************************************
   3:adc.c         **** *              宁波中科集成电路设计中心  版权所有 Copyright 2005
   4:adc.c         **** *						http:\\www.nbicc.com
   5:adc.c         **** *文件名:  adc.c
   6:adc.c         **** *程序员:  夏鹏		xpsonny@nbicc.com
   7:adc.c         **** *主要内容:adc驱动相关
   8:adc.c         **** *
   9:adc.c         **** *如有问题或BUG,请登录www.wsn.net.cn 提问或用邮件和作者联系
  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         **** static result_t ADCDataReady(uint8_t port, uint16_t value);	// 加入对应port的数据接收处理调用
  18:adc.c         **** 
  19:adc.c         **** static result_t ADCHPLDataReady(uint16_t data);
  20:adc.c         **** static result_t ADCStartGet(uint8_t newState, uint8_t port);
  21:adc.c         **** static void     ADCHPLInitPortmap(void);
  22:adc.c         **** static result_t ADCHPLInit(void);
  23:adc.c         **** static result_t ADCHPLSamplePort(uint8_t port);
  24:adc.c         **** static uint16_t ADCM_ReqPort;
  25:adc.c         **** static uint16_t ADCM_ReqVector;
  26:adc.c         **** static uint16_t ADCM_ContReqMask;
  27:adc.c         **** static bool HPLADCM_init_portmap_done;
  28:adc.c         **** static uint8_t adcPortmap[OSH_ADC_PORTMAPSIZE];
  29:adc.c         **** 
  30:adc.c         **** 
  31:adc.c         **** result_t ADCHPLInit(void)
  32:adc.c         **** {
  33:adc.c         **** 	ADCHPLInitPortmap();
  34:adc.c         **** 	
  35:adc.c         **** 	{ uint8_t atomicState = AtomicStart();
  36:adc.c         ****     {
  37:adc.c         **** 		* (volatile unsigned char *)(0x06 + 0x20) = (1 << 3) | (6 << 0);
  38:adc.c         **** 		
  39:adc.c         **** 		* (volatile unsigned char *)(0x07 + 0x20) = 0;
  40:adc.c         ****     }
  41:adc.c         ****     AtomicEnd(atomicState); }
  42:adc.c         **** 	return SUCCESS;
  43:adc.c         **** }
  44:adc.c         **** 
  45:adc.c         **** result_t ADCControlInit(void)
  46:adc.c         **** {
  47:adc.c         **** 	{ uint8_t atomicState = AtomicStart();
  48:adc.c         ****     {
  49:adc.c         **** 		ADCM_ReqPort = 0;
  50:adc.c         **** 		ADCM_ReqVector = ADCM_ContReqMask = 0;
  51:adc.c         ****     }
  52:adc.c         ****     AtomicEnd(atomicState); }
  53:adc.c         **** 	
  54:adc.c         **** 	return ADCHPLInit();
  55:adc.c         **** }
  56:adc.c         **** 
  57:adc.c         **** result_t ADCBindPort(uint8_t port, uint8_t adcPort)
  58:adc.c         **** {
  59:adc.c         **** 	if (
  60:adc.c         **** 		port < OSH_ADC_PORTMAPSIZE && 
  61:adc.c         **** 		port != OS_ADC_BANDGAP_PORT && 
  62:adc.c         **** 		port != OS_ADC_GND_PORT) {
  63:adc.c         **** 		ADCHPLInitPortmap();
  64:adc.c         **** 		{ uint8_t atomicState = AtomicStart();
  65:adc.c         ****         adcPortmap[port] = adcPort;
  66:adc.c         ****         AtomicEnd(atomicState); }
  67:adc.c         **** 		return SUCCESS;
  68:adc.c         ****     }
  69:adc.c         **** 	else {
  70:adc.c         **** 		return FAIL;
  71:adc.c         ****     }
  72:adc.c         **** }
  73:adc.c         **** 
  74:adc.c         **** static result_t ADCDataReady(uint8_t port, uint16_t value){
  75:adc.c         **** 	unsigned char result;
  76:adc.c         **** 	
  77:adc.c         **** 	switch (port) {
  78:adc.c         **** 		
  79:adc.c         ****     case OS_ADC_CC_RSSI_PORT:
  80:adc.c         **** 		result = RadiocontrolRSSIADCDataReady(value);
  81:adc.c         **** 		break;
  82:adc.c         **** 		
  83:adc.c         ****     case OS_ADC_PHOTO_PORT:
  84:adc.c         **** 		result = SensorInternalPhotoADCDataReady(value);
  85:adc.c         **** 		break;
  86:adc.c         **** 		
  87:adc.c         ****     case OS_ADC_TEMP_PORT:
  88:adc.c         **** 		result = SensorInternalTempADCDataReady(value);
  89:adc.c         **** 		break;
  90:adc.c         **** 		
  91:adc.c         ****     default:
  92:adc.c         **** 		result = 0;
  93:adc.c         ****     }
  94:adc.c         **** 	
  95:adc.c         **** 	return result;
  96:adc.c         **** }
  97:adc.c         **** 
  98:adc.c         **** static result_t ADCHPLDataReady(uint16_t data)
  99:adc.c         **** {
 100:adc.c         **** 	uint16_t doneValue = data;
 101:adc.c         **** 	uint8_t donePort;
 102:adc.c         **** 	result_t Result;
 103:adc.c         **** 	
 104:adc.c         **** 	
 105:adc.c         **** 	{ uint8_t atomicState = AtomicStart();
 106:adc.c         ****     {
 107:adc.c         **** 		donePort = ADCM_ReqPort;
 108:adc.c         **** 		
 109:adc.c         **** 		if (((1 << donePort) & ADCM_ContReqMask) == 0) {
 110:adc.c         **** 			ADCM_ReqVector &= ~(1 << donePort);
 111:adc.c         ****         }
 112:adc.c         **** 		
 113:adc.c         **** 		if (ADCM_ReqVector) {
 114:adc.c         **** 			do {
 115:adc.c         **** 				ADCM_ReqPort++;
 116:adc.c         **** 				ADCM_ReqPort = ADCM_ReqPort == OSH_ADC_PORTMAPSIZE ? 0 : ADCM_ReqPort;
 117:adc.c         ****             }
 118:adc.c         **** 			while (((
 119:adc.c         **** 				1 << ADCM_ReqPort) & ADCM_ReqVector) == 0);
 120:adc.c         **** 			ADCHPLSamplePort(ADCM_ReqPort);
 121:adc.c         ****         }
 122:adc.c         ****     }
 123:adc.c         ****     AtomicEnd(atomicState); }
 124:adc.c         **** 	
 125:adc.c         **** 	
 126:adc.c         **** 	Result = ADCDataReady(donePort, doneValue);
 127:adc.c         **** 	
 128:adc.c         **** 	{ uint8_t atomicState = AtomicStart();
 129:adc.c         ****     {
 130:adc.c         **** 		if (Result == FAIL && ADCM_ContReqMask & (1 << donePort)) {
 131:adc.c         **** 			ADCM_ContReqMask &= ~(1 << donePort);
 132:adc.c         ****         }
 133:adc.c         ****     }
 134:adc.c         ****     AtomicEnd(atomicState); }
 135:adc.c         **** 	
 136:adc.c         **** 	return SUCCESS;
 137:adc.c         **** }
 138:adc.c         **** 
 139:adc.c         **** static result_t ADCStartGet(uint8_t newState, uint8_t port)
 140:adc.c         **** {
 141:adc.c         **** 	uint16_t PortMask;
 142:adc.c         **** 	uint16_t oldReqVector;
 143:adc.c         **** 	result_t Result = SUCCESS;
 144:adc.c         **** 	
 145:adc.c         **** 	if (port > OSH_ADC_PORTMAPSIZE) {
 146:adc.c         **** 		return FAIL;
 147:adc.c         ****     }
 148:adc.c         **** 	
 149:adc.c         **** 	PortMask = 1 << port;
 150:adc.c         **** 	
 151:adc.c         **** 	{ uint8_t atomicState = AtomicStart();
 152:adc.c         ****     {
 153:adc.c         **** 		if ((PortMask & ADCM_ReqVector) != 0) {
 154:adc.c         **** 			
 155:adc.c         **** 			Result = FAIL;
 156:adc.c         ****         }
 157:adc.c         **** 		else {
 158:adc.c         **** 			oldReqVector = ADCM_ReqVector;
 159:adc.c         **** 			ADCM_ReqVector |= PortMask;
 160:adc.c         **** 			if (newState == ADCM_CONTINUOUS_CONVERSION) {
 161:adc.c         **** 				ADCM_ContReqMask |= PortMask;
 162:adc.c         ****             }
 163:adc.c         **** 			if (oldReqVector == 0) {
 164:adc.c         **** 				
 165:adc.c         **** 				ADCM_ReqPort = port;
 166:adc.c         **** 				Result = ADCHPLSamplePort(port);
 167:adc.c         ****             }
 168:adc.c         ****         }
 169:adc.c         ****     }
 170:adc.c         ****     AtomicEnd(atomicState); }
 171:adc.c         **** 	
 172:adc.c         **** 	
 173:adc.c         **** 	return Result;
 174:adc.c         **** }
 175:adc.c         **** 
 176:adc.c         **** result_t ADCGetData(uint8_t port)
 177:adc.c         **** {
 178:adc.c         **** 	return ADCStartGet(ADCM_SINGLE_CONVERSION, port);
 179:adc.c         **** }
 180:adc.c         **** 
 181:adc.c         **** void ADCHPLInitPortmap(void)
 182:adc.c         **** {
  92               	.LM1:
  93               	/* prologue: frame size=0 */
  94               	/* prologue end (size=0) */
  95               	.LBB2:
 183:adc.c         **** 	
 184:adc.c         **** 	{ uint8_t atomicState = AtomicStart();
  97               	.LM2:
  98 0000 0E94 0000 		call AtomicStart
  99 0004 282F      		mov r18,r24
 185:adc.c         ****     {
 186:adc.c         **** 		if (HPLADCM_init_portmap_done == FALSE) {
 101               	.LM3:
 102 0006 8091 0000 		lds r24,HPLADCM_init_portmap_done
 103 000a 8823      		tst r24
 104 000c 91F4      		brne .L2
 105               	.LBB3:
 187:adc.c         **** 			int i;
 188:adc.c         **** 			
 189:adc.c         **** 			for (i = 0; i < OSH_ADC_PORTMAPSIZE; i++) 
 107               	.LM4:
 108 000e 80E0      		ldi r24,lo8(0)
 109 0010 90E0      		ldi r25,hi8(0)
 110 0012 E0E0      		ldi r30,lo8(adcPortmap)
 111 0014 F0E0      		ldi r31,hi8(adcPortmap)
 112               	.L6:
 190:adc.c         **** 				adcPortmap[i] = i;
 114               	.LM5:
 115 0016 8193      		st Z+,r24
 117               	.LM6:
 118 0018 0196      		adiw r24,1
 119 001a 8C30      		cpi r24,12
 120 001c 9105      		cpc r25,__zero_reg__
 121 001e DCF3      		brlt .L6
 191:adc.c         **** 			
 192:adc.c         **** 			
 193:adc.c         **** 			adcPortmap[OS_ADC_BANDGAP_PORT] = OSH_ACTUAL_BANDGAP_PORT;
 123               	.LM7:
 124 0020 8EE1      		ldi r24,lo8(30)
 125 0022 8093 0000 		sts adcPortmap+10,r24
 194:adc.c         **** 			adcPortmap[OS_ADC_GND_PORT] = OSH_ACTUAL_GND_PORT;
 127               	.LM8:
 128 0026 8FE1      		ldi r24,lo8(31)
 129 0028 8093 0000 		sts adcPortmap+11,r24
 195:adc.c         **** 			HPLADCM_init_portmap_done = TRUE;
 131               	.LM9:
 132 002c 81E0      		ldi r24,lo8(1)
 133 002e 8093 0000 		sts HPLADCM_init_portmap_done,r24
 134               	.L2:
 135               	.LBE3:
 196:adc.c         ****         }
 197:adc.c         ****     }
 198:adc.c         ****     AtomicEnd(atomicState); }
 137               	.LM10:
 138 0032 822F      		mov r24,r18
 139 0034 0E94 0000 		call AtomicEnd
 140               	.LBE2:
 141               	/* epilogue: frame size=0 */
 142 0038 0895      		ret
 143               	/* epilogue end (size=1) */
 144               	/* function ADCHPLInitPortmap size 29 (28) */
 153               	.global	ADCControlInit
 155               	ADCControlInit:
 157               	.LM11:
 158               	/* prologue: frame size=0 */
 159               	/* prologue end (size=0) */
 160               	.LBB4:
 162               	.LM12:
 163 003a 0E94 0000 		call AtomicStart
 165               	.LM13:
 166 003e 1092 0000 		sts (ADCM_ReqPort)+1,__zero_reg__
 167 0042 1092 0000 		sts ADCM_ReqPort,__zero_reg__
 169               	.LM14:
 170 0046 1092 0000 		sts (ADCM_ContReqMask)+1,__zero_reg__
 171 004a 1092 0000 		sts ADCM_ContReqMask,__zero_reg__
 172 004e 1092 0000 		sts (ADCM_ReqVector)+1,__zero_reg__
 173 0052 1092 0000 		sts ADCM_ReqVector,__zero_reg__
 175               	.LM15:
 176 0056 0E94 0000 		call AtomicEnd
 177               	.LBE4:
 178               	.LBB5:
 179               	.LBB6:
 181               	.LM16:
 182 005a 0E94 0000 		call ADCHPLInitPortmap
 183               	.LBB7:
 185               	.LM17:
 186 005e 0E94 0000 		call AtomicStart
 188               	.LM18:
 189 0062 9EE0      		ldi r25,lo8(14)
 190 0064 96B9      		out 38-0x20,r25
 192               	.LM19:
 193 0066 17B8      		out 39-0x20,__zero_reg__
 195               	.LM20:
 196 0068 0E94 0000 		call AtomicEnd
 197               	.LBE7:
 198               	.LBE6:
 199               	.LBE5:
 201               	.LM21:
 202 006c 81E0      		ldi r24,lo8(1)
 203 006e 90E0      		ldi r25,hi8(1)
 204               	/* epilogue: frame size=0 */
 205 0070 0895      		ret
 206               	/* epilogue end (size=1) */
 207               	/* function ADCControlInit size 28 (27) */
 212               	.global	ADCBindPort
 214               	ADCBindPort:
 216               	.LM22:
 217               	/* prologue: frame size=0 */
 218 0072 1F93      		push r17
 219 0074 CF93      		push r28
 220               	/* prologue end (size=2) */
 221 0076 C82F      		mov r28,r24
 222 0078 162F      		mov r17,r22
 224               	.LM23:
 225 007a 8C30      		cpi r24,lo8(12)
 226 007c 90F4      		brsh .L12
 228               	.LM24:
 229 007e 8A30      		cpi r24,lo8(10)
 230 0080 81F0      		breq .L12
 231 0082 8B30      		cpi r24,lo8(11)
 232 0084 71F0      		breq .L12
 234               	.LM25:
 235 0086 0E94 0000 		call ADCHPLInitPortmap
 236               	.LBB8:
 238               	.LM26:
 239 008a 0E94 0000 		call AtomicStart
 241               	.LM27:
 242 008e EC2F      		mov r30,r28
 243 0090 FF27      		clr r31
 244 0092 E050      		subi r30,lo8(-(adcPortmap))
 245 0094 F040      		sbci r31,hi8(-(adcPortmap))
 246 0096 1083      		st Z,r17
 248               	.LM28:
 249 0098 0E94 0000 		call AtomicEnd
 250               	.LBE8:
 252               	.LM29:
 253 009c 81E0      		ldi r24,lo8(1)
 254 009e 90E0      		ldi r25,hi8(1)
 255 00a0 02C0      		rjmp .L11
 256               	.L12:
 258               	.LM30:
 259 00a2 80E0      		ldi r24,lo8(0)
 260 00a4 90E0      		ldi r25,hi8(0)
 261               	.L11:
 262               	/* epilogue: frame size=0 */
 263 00a6 CF91      		pop r28
 264 00a8 1F91      		pop r17
 265 00aa 0895      		ret
 266               	/* epilogue end (size=3) */
 267               	/* function ADCBindPort size 29 (24) */
 272               	ADCHPLSamplePort:
 199:adc.c         **** }
 200:adc.c         **** 
 201:adc.c         **** void __attribute((signal))   __vector_21(void)
 202:adc.c         **** {
 203:adc.c         **** 	uint16_t data = * (volatile unsigned int *)(unsigned int )& * (volatile unsigned char *)(0x04 + 0x
 204:adc.c         **** 	
 205:adc.c         **** 	data &= 0x3ff;
 206:adc.c         **** 	* (volatile unsigned char *)(0x06 + 0x20) |= 1 << 4;
 207:adc.c         **** 	* (volatile unsigned char *)(0x06 + 0x20) &= ~(1 << 7);
 208:adc.c         **** 	EnableInterrupt();
 209:adc.c         **** 	ADCHPLDataReady(data);
 210:adc.c         **** }
 211:adc.c         **** 
 212:adc.c         **** static result_t ADCHPLSamplePort(uint8_t port)
 213:adc.c         **** {
 274               	.LM31:
 275               	/* prologue: frame size=0 */
 276 00ac 1F93      		push r17
 277               	/* prologue end (size=1) */
 278 00ae 182F      		mov r17,r24
 279               	.LBB9:
 214:adc.c         **** 	{ uint8_t atomicState = AtomicStart();
 281               	.LM32:
 282 00b0 0E94 0000 		call AtomicStart
 215:adc.c         ****     {
 216:adc.c         **** 		* (volatile unsigned char *)(0x07 + 0x20) = adcPortmap[port] & 0x1F;
 284               	.LM33:
 285 00b4 E0E0      		ldi r30,lo8(adcPortmap)
 286 00b6 F0E0      		ldi r31,hi8(adcPortmap)
 287 00b8 E10F      		add r30,r17
 288 00ba F11D      		adc r31,__zero_reg__
 289 00bc 9081      		ld r25,Z
 290 00be 9F71      		andi r25,lo8(31)
 291 00c0 97B9      		out 39-0x20,r25
 217:adc.c         ****     }
 218:adc.c         ****     AtomicEnd(atomicState); }
 293               	.LM34:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -