?? 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 + -