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

📄 sensor.c

📁 基于cc1000和avr128处理器的指定路由多跳网络的试验程序
💻 C
字号:
/*
****************************************************************************
*              宁波中科集成电路设计中心  版权所有 Copyright 2005
*						http:\\www.nbicc.com
*文件名:  sensor.c
*程序员:  夏鹏	xpsonny@nbicc.com
*主要内容  光传感和温度传感采集

*如有问题或BUG,请登录www.wsn.net.cn 提问或用邮件和作者联系
****************************************************************************
*/

#include "sensor.h"
#include "os.h"
#include "adc.h"

static void OSH_SET_TEMP_CTL_PIN(void);
static void OSH_MAKE_TEMP_CTL_OUTPUT(void);
static void OSH_CLR_PHOTO_CTL_PIN(void);
static void OSH_MAKE_PHOTO_CTL_INPUT(void);

static void OSH_SET_PHOTO_CTL_PIN(void);
static void OSH_MAKE_PHOTO_CTL_OUTPUT(void);
static void OSH_CLR_TEMP_CTL_PIN(void);
static void OSH_MAKE_TEMP_CTL_INPUT(void);

static int PhotoTempM_state;

enum PhotoTempM_state {
  PhotoTempM_IDLE = 1, 
  PhotoTempM_BUSY = 2, 
  PhotoTempM_CONTINUOUS = 3
};

result_t SensorTempStdControlInit(void)
{
	ADCBindPort(OS_ADC_TEMP_PORT, OSH_ACTUAL_TEMP_PORT);
	{ uint8_t atomicState = AtomicStart();
    {
		PhotoTempM_state = PhotoTempM_IDLE;
    }
    AtomicEnd(atomicState); }
	return ADCControlInit();
}

void OSH_MAKE_INT1_OUTPUT(void)
{
	* (volatile unsigned char *)(0x02 + 0x20) |= 1 << 5;
}

void OSH_MAKE_PHOTO_CTL_OUTPUT(void)
{
	OSH_MAKE_INT1_OUTPUT();
}

void OSH_SET_INT1_PIN(void)
{
	* (volatile unsigned char *)(0x03 + 0x20) |= 1 << 5;
}

void OSH_SET_PHOTO_CTL_PIN(void)
{
	OSH_SET_INT1_PIN();
}

void OSH_MAKE_INT2_OUTPUT(void)
{
	* (volatile unsigned char *)(0x02 + 0x20) |= 1 << 6;
}

void OSH_MAKE_TEMP_CTL_OUTPUT(void)
{
	OSH_MAKE_INT2_OUTPUT();
}

void OSH_SET_INT2_PIN(void)
{
	* (volatile unsigned char *)(0x03 + 0x20) |= 1 << 6;
}

void OSH_SET_TEMP_CTL_PIN(void)
{
	OSH_SET_INT2_PIN();
}

result_t SensorTempStdControlStart(void)
{
	{ uint8_t atomicState = AtomicStart();
    {
		OSH_SET_TEMP_CTL_PIN();
		OSH_MAKE_TEMP_CTL_OUTPUT();
    }
    AtomicEnd(atomicState); }
	return SUCCESS;
}

result_t SensorInternalTempADCGetData(void)
{
	unsigned char result;
	result = ADCGetData(OS_ADC_TEMP_PORT);
	
	return result;
}

void OSH_MAKE_INT2_INPUT(void)
{
	* (volatile unsigned char *)(0x02 + 0x20) &= ~(1 << 6);
}

void OSH_MAKE_TEMP_CTL_INPUT(void)
{
	OSH_MAKE_INT2_INPUT();
}

void OSH_CLR_INT2_PIN(void)
{
	* (volatile unsigned char *)(0x03 + 0x20) &= ~(1 << 6);
}

void OSH_CLR_TEMP_CTL_PIN(void)
{
	OSH_CLR_INT2_PIN();
}

void OSH_MAKE_INT1_INPUT(void)
{
	* (volatile unsigned char *)(0x02 + 0x20) &= ~(1 << 5);
}

void OSH_MAKE_PHOTO_CTL_INPUT(void)
{
	OSH_MAKE_INT1_INPUT();
}

void OSH_CLR_INT1_PIN(void)
{
	* (volatile unsigned char *)(0x03 + 0x20) &= ~(1 << 5);
}

void OSH_CLR_PHOTO_CTL_PIN(void)
{
	OSH_CLR_INT1_PIN();
}

result_t SensorExternalTempADCGetData(void)
{
	uint8_t oldState;
	
	{ uint8_t atomicState = AtomicStart();
    {
		oldState = PhotoTempM_state;
		if (PhotoTempM_state == PhotoTempM_IDLE) {
			PhotoTempM_state = PhotoTempM_BUSY;
        }
    }
    AtomicEnd(atomicState); }
	if (oldState == PhotoTempM_IDLE) {
		OSH_CLR_PHOTO_CTL_PIN();
		OSH_MAKE_PHOTO_CTL_INPUT();
		OSH_SET_TEMP_CTL_PIN();
		OSH_MAKE_TEMP_CTL_OUTPUT();
		return SensorInternalTempADCGetData();
    }
	return FAIL;
}

result_t PhotoTempM_ExternalTempADC_default_dataReady(uint16_t data)
{
	return SUCCESS;
}

result_t SensorExternalTempADCDataReady(uint16_t data)
{
	unsigned char result;
    result =  SensordataReady(data);
	return SUCCESS;
}

result_t SensorInternalTempADCDataReady(uint16_t data)
{
	uint8_t oldState;
	
	{ uint8_t atomicState = AtomicStart();
    {
		oldState = PhotoTempM_state;
		if (PhotoTempM_state == PhotoTempM_BUSY) {
			PhotoTempM_state = PhotoTempM_IDLE;
        }
    }
    AtomicEnd(atomicState); }
	if (oldState == PhotoTempM_BUSY) {
		
		
		return SensorExternalTempADCDataReady(data);
    }
	else {
		if (oldState == PhotoTempM_CONTINUOUS) {
			int ret;
			
			ret = SensorExternalTempADCDataReady(data);
			if (ret == FAIL) {
				
				
				{ uint8_t atomicState = AtomicStart();
				{
					PhotoTempM_state = PhotoTempM_IDLE;
				}
				AtomicEnd(atomicState); }
			}
			return ret;
		}
    }
	return FAIL;
}

result_t SensorExternalPhotoADCDataReady(uint16_t data)
{
	unsigned char result;
    result =  SensordataReady(data);
	return result;
}


result_t SensorPhoOStdControlInit(void)
{
	ADCBindPort(OS_ADC_PHOTO_PORT, OSH_ACTUAL_PHOTO_PORT);
	{ uint8_t atomicState = AtomicStart();
    {
		PhotoTempM_state = PhotoTempM_IDLE;
    }
    AtomicEnd(atomicState); }
	return ADCControlInit();
}

result_t SensorPhoOStdControlStart(void)
{
	{ uint8_t atomicState = AtomicStart();
    {
		OSH_SET_PHOTO_CTL_PIN();
		OSH_MAKE_PHOTO_CTL_OUTPUT();
    }
    AtomicEnd(atomicState); }
	return SUCCESS;
}

result_t SensorExternalPhotoADCGetData(void)
{
	uint8_t oldState;
	
	{ uint8_t atomicState = AtomicStart();
    {
		oldState = PhotoTempM_state;
		if (PhotoTempM_state == PhotoTempM_IDLE) {
			PhotoTempM_state = PhotoTempM_BUSY;
        }
    }
    AtomicEnd(atomicState); }
	if (oldState == PhotoTempM_IDLE) {
		OSH_CLR_TEMP_CTL_PIN();
		OSH_MAKE_TEMP_CTL_INPUT();
		OSH_SET_PHOTO_CTL_PIN();
		OSH_MAKE_PHOTO_CTL_OUTPUT();
		return SensorInternalPhotoADCGetData();
    }
	return FAIL;
}

result_t SensorInternalPhotoADCDataReady(uint16_t data)
{
	uint8_t oldState;
	
	{ uint8_t atomicState = AtomicStart();
    {
		oldState = PhotoTempM_state;
		if (PhotoTempM_state == PhotoTempM_BUSY) {
			PhotoTempM_state = PhotoTempM_IDLE;
        }
    }
    AtomicEnd(atomicState); }
	if (oldState == PhotoTempM_BUSY) {
		
		return SensorExternalPhotoADCDataReady(data);
    }
	else {
		if (oldState == PhotoTempM_CONTINUOUS) {
			int ret;
			ret = SensorExternalPhotoADCDataReady(data);
			if (ret == FAIL) {
				{ uint8_t atomicState = AtomicStart();
				{
					PhotoTempM_state = PhotoTempM_IDLE;
				}
				AtomicEnd(atomicState); }
			}
			return ret;
		}
    }
	return FAIL;
}

result_t SensorInternalPhotoADCGetData(void)
{
	unsigned char result;
	result = ADCGetData(OS_ADC_PHOTO_PORT);
	
	return result;
}

⌨️ 快捷键说明

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