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

📄 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:
  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 + -