예제 #1
0
/**
 * pinMode
 * 
 * Config pin mode
 * 
 * @param pin pin number
 * @param mode pin mode
 */
void pinMode(uint8_t pin, uint8_t mode) 
{
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);

	volatile uint8_t *dir = portDirRegister(port);
	volatile uint8_t *ren = portRenRegister(port);
	volatile uint8_t *out = portOutputRegister(port);
	volatile uint8_t *sel = portSelRegister(port);

  *sel &= ~bit;     // Unselect alternate function
   
  switch(mode)
  {
    case INPUT:
      *dir &= ~bit;
      break;
    case INPUT_PULLUP:
      *dir &= ~bit;
      *out |= bit;
      *ren |= bit;
      break;
    case INPUT_PULLDOWN:
      *dir &= ~bit;
      *out &= ~bit;
      *ren |= bit;
      break;
    case OUTPUT:
      *dir |= bit;
      break;
    default:
      break;
  }
}
예제 #2
0
void pinMode(uint8_t pin, uint8_t mode)
{
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);

	volatile uint16_t *dir;
	volatile uint16_t *ren;
	volatile uint16_t *out;

	if (port == NOT_A_PORT) return;

	dir = portDirRegister(port);
	ren = portRenRegister(port);
	out = portOutputRegister(port);

	if (mode == INPUT) {
		*dir &= ~bit;
	} else if (mode == INPUT_PULLUP) {
		*dir &= ~bit;
                *out |= bit;
                *ren |= bit;
        } else if (mode == INPUT_PULLDOWN) {
		*dir &= ~bit;
                *out &= ~bit;
                *ren |= bit;
        } else {
		*dir |= bit;
	}
}
예제 #3
0
파일: Touch.cpp 프로젝트: smeenka/Energia
  TouchPin::TouchPin(uint8_t pin, int16_t threshold ){                 // select given pin as a capacitive touch pin
  	_bit  = digitalPinToBitMask(pin);
	_port = digitalPinToPort(pin);
	volatile uint16_t *reg = portSelRegister(_port);
	*reg  &= ~_bit; //reset portselect bit
	reg = portSel2Register(_port);
	*reg  &= ~_bit; //reset portselect2 bit
	

  	reg = portDirRegister(_port);
	*reg  &= ~_bit; //set port as input 
  	reg = portRenRegister(_port);
	*reg  |= _bit; //enable pullup register when port is input 

	_threshold = threshold;
  }