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

📄 adc.lst

📁 adhoc信息节点程序源代码(点对多点)——for atmega128
💻 LST
📖 第 1 页 / 共 3 页
字号:
   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 + -