|
发表于 2017-4-18 16:59:51
|
显示全部楼层
测过的代码:
#include <pio_common.h>
#include <adc.h>
#include <pio.h>
#include <stdlib.h>
#include <vm.h>
/*********************/
void Aio_Init(void);
void AIO_ReadStart(Task task, vm_adc_source_type adc_source, uint32 period);
void AIO_ReadReStart(Task task);
void Aio_Handler(Task task, MessageId id, Message message);
typedef struct
{
TaskData task;
uint16 voltage_value;
vm_adc_source_type adc_source;
} AIO_TaskData_T;
AIO_TaskData_T aio_app;
#define AIO_READ_PERIOD 1000
#define MESSAGE_ADC_READ_START (MESSAGE_ADC_RESULT+100)
void Aio_Init(void)
{
aio_app.task.handler = Aio_Handler;
aio_app.voltage_value = 0;
aio_app.adc_source = adcsel_aio0;
AIO_ReadReStart(&aio_app.task);
}
void AIO_ReadStart(Task task, vm_adc_source_type adc_source, uint32 period)
{
/* Request ADC Reading */
if(AdcRequest(task, adc_source))
{
/* Successful request*/
aio_app.adc_source = adc_source;
MessageSendLater(task, MESSAGE_ADC_READ_START, NULL, period);
}
}
void AIO_ReadReStart(Task task)
{
AIO_ReadStart(task, aio_app.adc_source, AIO_READ_PERIOD);
}
void Aio_Handler(Task task, MessageId id, Message message)
{
switch(id)
{
case MESSAGE_ADC_READ_START:
AIO_ReadReStart(task);
break;
case MESSAGE_ADC_RESULT:
{
const MessageAdcResult* const result = (const MessageAdcResult*)message;
uint16 reading = result->reading;
PRINT(("AIO: ADC msg source %u reading %u\n", result->adc_source, result->reading));
reading=0;
#if 0
uint16 res;
if (result->adc_source<adcsel_vref)
/* for aio inputs continue to use the VREF reading which comes from the same ADC as the aio inputs */
{
/* for AIOs voltage(mV) = reading(ADC counts) * (mv_per_count = VREF(mV)/VREF(ADC counts)) */
res = (uint16)(((uint32)VmReadVrefConstant() * reading) / power->vref);
}
PRINT(("POWER: BC7 res %u\n", res));
AIO_ReadReStart(task);
#endif
}
break;
default:
break;
}
}
/*********************/
|
|