interface Msp430Adc12MultiChannel as MultiChannel[uint8_t id];
interface Msp430Adc12Overflow as Overflow[uint8_t id];
interface AsyncStdControl as DMAExtension[uint8_t id];
interface Msp430Adc12MultiChannel as MultiChannel[uint8_t id];
interface Msp430Adc12Overflow as Overflow[uint8_t id];
interface AsyncStdControl as DMAExtension[uint8_t id];
interface Msp430Timer as TimerA;;
interface Msp430TimerControl as ControlA0;
interface Msp430TimerControl as ControlA1;
interface Msp430Timer as TimerA;;
interface Msp430TimerControl as ControlA0;
interface Msp430TimerControl as ControlA1;
interface HplMsp430GeneralIO as Port65;
interface HplMsp430GeneralIO as Port66;
interface HplMsp430GeneralIO as Port67;
interface HplMsp430GeneralIO as Port65;
interface HplMsp430GeneralIO as Port66;
interface HplMsp430GeneralIO as Port67;
uint16_t resultBufferIndex; /* offset into buffer */
uint8_t numChannels; /* number of channels (multi-channel conversion) */
uint8_t clientID; /* ID of client that called getData() */
command error_t Init.init()
{
uint16_t resultBufferIndex; /* offset into buffer */
uint8_t numChannels; /* number of channels (multi-channel conversion) */
uint8_t clientID; /* ID of client that called getData() */
command error_t Init.init()
{
msp430_compare_control_t ccResetSHI = {
ccifg : 0, cov : 0, out : 0, cci : 0, ccie : 0,
outmod : 0, cap : 0, clld : 0, scs : 0, ccis : 0, cm : 0 };
msp430_compare_control_t ccResetSHI = {
ccifg : 0, cov : 0, out : 0, cci : 0, ccie : 0,
outmod : 0, cap : 0, clld : 0, scs : 0, ccis : 0, cm : 0 };
call ControlA0.setControl(ccResetSHI);
call CompareA0.setEvent(interval-1);
call CompareA1.setEvent((interval-1)/2);
call ControlA0.setControl(ccResetSHI);
call CompareA0.setEvent(interval-1);
call CompareA1.setEvent((interval-1)/2);
msp430_compare_control_t ccSetSHI = {
ccifg : 0, cov : 0, out : 1, cci : 0, ccie : 0,
outmod : 0, cap : 0, clld : 0, scs : 0, ccis : 0, cm : 0 };
msp430_compare_control_t ccSetSHI = {
ccifg : 0, cov : 0, out : 1, cci : 0, ccie : 0,
outmod : 0, cap : 0, clld : 0, scs : 0, ccis : 0, cm : 0 };
//call ControlA1.setControl(ccResetSHI);
call ControlA1.setControl(ccRSOutmod);
call TimerA.setMode(MSP430TIMER_UP_MODE); // go!
//call ControlA1.setControl(ccResetSHI);
call ControlA1.setControl(ccRSOutmod);
call TimerA.setMode(MSP430TIMER_UP_MODE); // go!
uint16_t *buf, uint16_t length, uint16_t jiffies)
{
error_t result = ERESERVE;
uint16_t *buf, uint16_t length, uint16_t jiffies)
{
error_t result = ERESERVE;
uint16_t *buf, uint8_t length, uint16_t jiffies)
{
error_t result = ERESERVE;
uint16_t *buf, uint8_t length, uint16_t jiffies)
{
error_t result = ERESERVE;
adc12ssel: config->adc12ssel,
adc12div: config->adc12div,
issh: 0,
adc12ssel: config->adc12ssel,
adc12div: config->adc12div,
issh: 0,
uint16_t numSamples, uint16_t jiffies)
{
error_t result = ERESERVE;
uint16_t numSamples, uint16_t jiffies)
{
error_t result = ERESERVE;
if (!config || !memctl || !numMemctl || numMemctl > 15 || !numSamples ||
!buf || jiffies == 1 || jiffies == 2 || numSamples % (numMemctl+1) != 0)
return EINVAL;
if (!config || !memctl || !numMemctl || numMemctl > 15 || !numSamples ||
!buf || jiffies == 1 || jiffies == 2 || numSamples % (numMemctl+1) != 0)
return EINVAL;
adc12ssel: config->adc12ssel,
adc12div: config->adc12div,
issh: 0,
adc12ssel: config->adc12ssel,
adc12div: config->adc12div,
issh: 0,
if (iv <= 4){ // check for overflow
if (iv == 2)
signal Overflow.memOverflow[clientID]();
else
signal Overflow.conversionTimeOverflow[clientID]();
if (iv <= 4){ // check for overflow
if (iv == 2)
signal Overflow.memOverflow[clientID]();
else
signal Overflow.conversionTimeOverflow[clientID]();
do {
*resultBuffer++ = call HplAdc12.getMem(i);
} while (++i < numChannels);
resultBufferIndex += numChannels;
do {
*resultBuffer++ = call HplAdc12.getMem(i);
} while (++i < numChannels);
resultBufferIndex += numChannels;
- signal MultiChannel.dataReady[clientID](resultBuffer, resultBufferLength);
- } else call HplAdc12.enableConversion();
+ signal MultiChannel.dataReady[clientID](resultBuffer,
+ overflow ? k : resultBufferLength);
+ }
- uint16_t i = 0, length;
+ uint16_t i = 0, length, k;
+ resultBuffer = resultBufferStart + resultBufferIndex;
-
- if (resultBufferLength - resultBufferIndex > 15)
+ if (overflow || resultBufferLength == resultBufferIndex){
+ stopConversion();
+ resultBuffer -= resultBufferIndex;
+ k = resultBufferIndex - length;
+ resultBufferIndex = 0;
+ signal SingleChannel.multipleDataReady[clientID](resultBuffer,
+ overflow ? k : resultBufferLength);
+ } else if (resultBufferLength - resultBufferIndex > 15)
adc12memctl_t memctl = call HplAdc12.getMCtl(0);
memctl.eos = 1;
call HplAdc12.setMCtl(resultBufferLength - resultBufferIndex, memctl);
adc12memctl_t memctl = call HplAdc12.getMCtl(0);
memctl.eos = 1;
call HplAdc12.setMCtl(resultBufferLength - resultBufferIndex, memctl);