msp430adc12p.nc

来自「tinyos-2.0源代码!转载而已!要的尽管拿!」· NC 代码 · 共 506 行 · 第 1/2 页

NC
506
字号
        enc: 0,        adc12tovie: 0,        adc12ovie: 0,        adc12on: 1,        refon: call HplAdc12.getRefon(),        r2_5v: call HplAdc12.isRef2_5V(),        msc: (jiffies == 0) ? 1 : 0,        sht0: config->sht,        sht1: config->sht      };      adc12ctl1_t ctl1 = {        adc12busy: 0,        conseq: 2,        adc12ssel: config->adc12ssel,        adc12div: config->adc12div,        issh: 0,        shp: 1,        shs: (jiffies == 0) ? 0 : 1,        cstartadd: 0      };      adc12memctl_t memctl = {        inch: config->inch,        sref: config->sref,        eos: 1      };              conversionMode = SINGLE_DATA_REPEAT;      configureAdcPin( config->inch );      call HplAdc12.setCtl0(ctl0);      call HplAdc12.setCtl1(ctl1);      call HplAdc12.setMCtl(0, memctl);      call HplAdc12.setIEFlags(0x01);      if (jiffies){        atomic flags |= TIMERA_USED;           prepareTimerA(jiffies, config->sampcon_ssel, config->sampcon_id);      }           call HplAdc12.startConversion();      if (jiffies)        startTimerA(); // go!    }    return result;  }  async command error_t SingleChannel.getMultipleData[uint8_t id](      const msp430adc12_channel_config_t *config,      uint16_t *buf, uint16_t length, uint16_t jiffies)  {    error_t result;#ifdef CHECK_ARGS    if (!config || !buf || !length || jiffies == 1 || jiffies == 2)      return EINVAL;#endif    if ((result = clientAccessRequest(id)) == SUCCESS)    {      adc12ctl0_t ctl0 = {         adc12sc: 0,        enc: 0,        adc12tovie: 0,        adc12ovie: 0,        adc12on: 1,        refon: call HplAdc12.getRefon(),        r2_5v: call HplAdc12.isRef2_5V(),        msc: (jiffies == 0) ? 1 : 0,        sht0: config->sht,        sht1: config->sht      };      adc12ctl1_t ctl1 = {        adc12busy: 0,        conseq: (length > 16) ? 3 : 1,        adc12ssel: config->adc12ssel,        adc12div: config->adc12div,        issh: 0,        shp: 1,        shs: (jiffies == 0) ? 0 : 1,        cstartadd: 0      };      adc12memctl_t memctl = {        inch: config->inch,        sref: config->sref,        eos: 0      };              uint16_t i, mask = 1;      conversionMode = MULTIPLE_DATA;      atomic {        resultBuffer = buf;        resultBufferLength = length;        resultBufferIndex = 0;      }          configureAdcPin( config->inch );      call HplAdc12.setCtl0(ctl0);      call HplAdc12.setCtl1(ctl1);      for (i=0; i<(length-1) && i < 15; i++)        call HplAdc12.setMCtl(i, memctl);      memctl.eos = 1;        call HplAdc12.setMCtl(i, memctl);      call HplAdc12.setIEFlags(mask << i);                    if (jiffies){        atomic flags |= TIMERA_USED;        prepareTimerA(jiffies, config->sampcon_ssel, config->sampcon_id);      }            call HplAdc12.startConversion();      if (jiffies)        startTimerA(); // go!    }    return result;  }  async command error_t SingleChannel.getMultipleDataRepeat[uint8_t id](      const msp430adc12_channel_config_t *config,      uint16_t *buf, uint8_t length, uint16_t jiffies)  {    error_t result;#ifdef CHECK_ARGS    if (!config || !buf || !length || length > 16 || jiffies == 1 || jiffies == 2)      return EINVAL;#endif    if ((result = clientAccessRequest(id)) == SUCCESS)    {      adc12ctl0_t ctl0 = {         adc12sc: 0,        enc: 0,        adc12tovie: 0,        adc12ovie: 0,        adc12on: 1,        refon: call HplAdc12.getRefon(),        r2_5v: call HplAdc12.isRef2_5V(),        msc: (jiffies == 0) ? 1 : 0,        sht0: config->sht,        sht1: config->sht      };      adc12ctl1_t ctl1 = {        adc12busy: 0,        ctl1.conseq = 3,        adc12ssel: config->adc12ssel,        adc12div: config->adc12div,        issh: 0,        shp: 1,        shs: (jiffies == 0) ? 0 : 1,        cstartadd: 0      };      adc12memctl_t memctl = {        inch: config->inch,        sref: config->sref,        eos: 0      };              uint16_t i, mask = 1;      conversionMode = MULTIPLE_DATA_REPEAT;      atomic {         resultBuffer = buf;        resultBufferLength = length;        resultBufferIndex = 0;                  }      configureAdcPin( config->inch );      call HplAdc12.setCtl0(ctl0);      call HplAdc12.setCtl1(ctl1);      for (i=0; i<(length-1) && i < 15; i++)        call HplAdc12.setMCtl(i, memctl);      memctl.eos = 1;        call HplAdc12.setMCtl(i, memctl);      call HplAdc12.setIEFlags(mask << i);                    if (jiffies){        atomic flags |= TIMERA_USED;        prepareTimerA(jiffies, config->sampcon_ssel, config->sampcon_id);      }            call HplAdc12.startConversion();      if (jiffies)        startTimerA(); // go!    }    return result;  }  async event void TimerA.overflow(){}  async event void CompareA0.fired(){}  async event void CompareA1.fired(){}    async event void HplAdc12.conversionDone(uint16_t iv)  {    switch (conversionMode)     {       case SINGLE_DATA:        stopConversionSingleChannel();        signal SingleChannel.singleDataReady[clientID](call HplAdc12.getMem(0));        break;      case SINGLE_DATA_REPEAT:        {          error_t repeatContinue;          repeatContinue = signal SingleChannel.singleDataReady[clientID](                call HplAdc12.getMem(0));          if (repeatContinue == FAIL)            stopConversionSingleChannel();          break;        }      case MULTIPLE_DATA:        {          uint16_t i = 0, length;          if (resultBufferLength - resultBufferIndex > 16)             length = 16;          else            length = resultBufferLength - resultBufferIndex;          do {            *resultBuffer++ = call HplAdc12.getMem(i);          } while (++i < length);          resultBufferIndex += length;                        if (resultBufferLength - resultBufferIndex > 15)            return;          else if (resultBufferLength - resultBufferIndex > 0){            adc12memctl_t memctl = call HplAdc12.getMCtl(0);            memctl.eos = 1;            call HplAdc12.setMCtl(resultBufferLength - resultBufferIndex, memctl);          } else {            stopConversionSingleChannel();            signal SingleChannel.multipleDataReady[clientID](                resultBuffer - resultBufferLength, resultBufferLength);          }        }        break;      case MULTIPLE_DATA_REPEAT:        {          uint8_t i = 0;          do {            *resultBuffer++ = call HplAdc12.getMem(i);          } while (++i < resultBufferLength);                    resultBuffer = signal SingleChannel.multipleDataReady[clientID](              resultBuffer-resultBufferLength,                    resultBufferLength);          if (!resultBuffer)              stopConversionSingleChannel();          break;        }      } // switch  }  default async event error_t SingleChannel.singleDataReady[uint8_t id](uint16_t data)  {    return FAIL;  }    default async event uint16_t* SingleChannel.multipleDataReady[uint8_t id](      uint16_t *buf, uint16_t length)  {    return 0;  }    async event void HplAdc12.memOverflow(){}  async event void HplAdc12.conversionTimeOverflow(){}}

⌨️ 快捷键说明

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