📄 sensor.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 + -