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 + -
显示快捷键?