Beispiel #1
0
void _pal_lld_setgroupmode(ioportid_t port, ioportmask_t mask, uint32_t mode) {
  int i;
  switch (mode) {
  case PAL_MODE_INPUT:
    set_gpio_in(port, mask);
    set_gpio_pud(port, mask, GPIO_PUD_OFF);
    break;
  case PAL_MODE_INPUT_PULLUP:
    set_gpio_in(port, mask);
    set_gpio_pud(port, mask, GPIO_PUD_PULLUP);
    break;
  case PAL_MODE_INPUT_PULLDOWN:
    set_gpio_in(port, mask);
    set_gpio_pud(port, mask, GPIO_PUD_PULLDOWN);
    break;
  case PAL_MODE_OUTPUT:
  case PAL_MODE_OUTPUT_PUSHPULL:
  case PAL_MODE_OUTPUT_OPENDRAIN:
    for (i = 0; i < 32; i++) {
      unsigned int bit = mask & 1;
      if (bit) 
        bcm2835_gpio_fnsel(i + port->pin_base, GPFN_OUT);
      mask >>= 1;
    }
    break;
  }
}
Beispiel #2
0
static int
gpio_proc_write(struct file *file, const char *buffer, unsigned long count,
                void *data)
{
    u32 reg = 0;

    /* get buffer size */
    procfs_buffer_size = count;
    if (procfs_buffer_size > PROCFS_MAX_SIZE) {
        procfs_buffer_size = PROCFS_MAX_SIZE;
    }
    /* write data to the buffer */
    if (copy_from_user(procfs_buffer, buffer, procfs_buffer_size)) {
        return -EFAULT;
    }

    procfs_buffer[procfs_buffer_size] = 0;

    if (procfs_buffer[0] == '0' || procfs_buffer[0] == 'i')
        reg = 0;
    if (procfs_buffer[0] == '1' || procfs_buffer[0] == 'o')
        reg = 1;

    if ((unsigned int)data & GPIO_IN) {
        set_gpio_in(((unsigned int)data) & PIN_MASK, reg);
    }
    if ((unsigned int)data & GPIO_OUT) {
        set_gpio_out(((unsigned int)data) & PIN_MASK, reg);
    }
    if ((unsigned int)data & GPIO_DIR) {
        set_dir(((unsigned int)data) & PIN_MASK, reg);
    }

    return procfs_buffer_size;
}
Beispiel #3
0
void _pal_lld_init(const PALConfig* config) {

  (void)config;
	
  IOPORT0.gpset = &GPSET0;
  IOPORT0.gpclr = &GPCLR0;
  IOPORT0.gplev = &GPLEV0;
  IOPORT0.gppudclk = &GPPUDCLK0;
  set_gpio_in(&IOPORT0, 0xFFFFFFFF);

  IOPORT1.gpset = &GPSET1;
  IOPORT1.gpclr = &GPCLR1;
  IOPORT1.gplev = &GPLEV1;
  IOPORT1.gppudclk = &GPPUDCLK1;
  IOPORT1.pin_base = 32;
  set_gpio_in(&IOPORT1, 0xFFFFFFFF);
}