|
//关闭io口,减少耗电
__STATIC_INLINE void nrf_gpio_close(uint32_t pin_number)
{
/*lint -e{845} // A zero has been given as right argument to operator '|'" */
NRF_GPIO->PIN_CNF[pin_number] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)
| (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)
| (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos)
| (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos)
| (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos);
}
//channel 对应0到7 ,测量的管脚为:p27 p26 p01 p02 p03 p04 p05 p06
//adcbit adc位选择
返回转换的adc值
uint16_t GetAdc(uint32_t channel,uint32_t adcbit)//ADC_CONFIG_RES_10bit
{
const uint8_t channel_pin[8]={27,26,1,2,3,4,5,6};
uint16_t adc_value;
nrf_gpio_cfg_input(channel_pin[channel],NRF_GPIO_PIN_NOPULL);
NRF_ADC->CONFIG = (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos)
/*Bits 17..16 : ADC external reference pin selection. */
| ((0x01<<channel) << ADC_CONFIG_PSEL_Pos)
/*!<Use analog input 2 as analog input. */
| (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos)
/*!< Use internal 1.2V bandgap voltage as reference for conversion. */
| (ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos)
/*!< Analog input specified by PSEL with no prescaling used as inputfor the conversion. */
| (adcbit << ADC_CONFIG_RES_Pos);
/*!< 8bit ADC resolution. */
NRF_ADC->ENABLE = 1;
NRF_ADC->TASKS_START = 1;
while(NRF_ADC->EVENTS_END == 0);
NRF_ADC->EVENTS_END = 0;
adc_value = NRF_ADC->RESULT;
NRF_ADC->TASKS_STOP = 1;
NRF_ADC->ENABLE = 0;
nrf_gpio_close(channel_pin[channel]);
return adc_value;
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|