示例#1
0
文件: video.c 项目: RTEMS/rtems
static void i2c_write_bit(unsigned int bit)
{
  if(bit) {
    MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE|BT656_I2C_SDAOUT);
  } else {
    MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE);
  }
  i2c_delay();
  MM_WRITE(MM_BT656_I2C, MM_READ(MM_BT656_I2C) | BT656_I2C_SDC);
  i2c_delay();
  MM_WRITE(MM_BT656_I2C, MM_READ(MM_BT656_I2C) & ~BT656_I2C_SDC);
}
示例#2
0
static rtems_isr mmconsole_interrupt(rtems_vector_number n)
{
  char c;
  while (MM_READ(MM_UART_STAT) & UART_STAT_RX_EVT) {
    c = MM_READ(MM_UART_RXTX);
    MM_WRITE(MM_UART_STAT, UART_STAT_RX_EVT);
    rtems_termios_enqueue_raw_characters(tty, &c, 1);
  }
  if (MM_READ(MM_UART_STAT) & UART_STAT_TX_EVT) {
    MM_WRITE(MM_UART_STAT, UART_STAT_TX_EVT);
    rtems_termios_dequeue_characters(tty, 1);
  }
  lm32_interrupt_ack(1 << MM_IRQ_UART);
}
示例#3
0
文件: network.c 项目: RTEMS/rtems
static rtems_isr rx_interrupt_handler(rtems_vector_number vector)
{
  /* Deassert IRQ line.
   * The RX daemon will then read all the slots we marked as empty.
   */
  if(MM_READ(MM_MINIMAC_STATE0) == MINIMAC_STATE_PENDING)
    MM_WRITE(MM_MINIMAC_STATE0, MINIMAC_STATE_EMPTY);
  if(MM_READ(MM_MINIMAC_STATE1) == MINIMAC_STATE_PENDING)
    MM_WRITE(MM_MINIMAC_STATE1, MINIMAC_STATE_EMPTY);

  rtems_bsdnet_event_send(rx_daemon_id, RX_EVENT);

  lm32_interrupt_ack(1 << MM_IRQ_ETHRX);
}
示例#4
0
static void swap_buffers(void)
{
  unsigned short int *p;

  /* Make sure last buffer swap has been executed */
  while (MM_READ(MM_VGA_BASEADDRESS_ACT) != MM_READ(MM_VGA_BASEADDRESS));

  p = frontbuffer;
  frontbuffer = backbuffer;
  backbuffer = lastbuffer;
  lastbuffer = p;

  fb_fix.smem_start = (volatile char *)backbuffer;
  MM_WRITE(MM_VGA_BASEADDRESS, (unsigned int)frontbuffer);
}
示例#5
0
文件: versions.c 项目: gedare/rtems
static int get_soc_version(char *buffer)
{
  char fmt[13];
  char *version;
  int len;
  unsigned int id;
  unsigned int major, minor, subminor, rc;

  id = MM_READ(MM_SYSTEM_ID);
	major = (id & 0xf0000000) >> 28;
	minor = (id & 0x0f000000) >> 24;
	subminor = (id & 0x00f00000) >> 20;
	rc = (id & 0x000f0000) >> 16;

  version = fmt;
  version += sprintf(version, "%u.%u", major, minor);
	if (subminor != 0)
		version += sprintf(version, ".%u", subminor);
	if (rc != 0)
		version += sprintf(version, "RC%u", rc);

  len = version - fmt;
  memcpy(buffer, fmt, len);
  return len;
}
示例#6
0
static void icap_write(int val, unsigned int w)
{
  while (!(MM_READ(MM_ICAP) & ICAP_READY));
  if (!val)
    w |= ICAP_CE|ICAP_WRITE;
  MM_WRITE(MM_ICAP, w);
}
示例#7
0
文件: ckinit.c 项目: Fyleo/rtems
void Clock_driver_support_initialize_hardware(void)
{
  MM_WRITE(MM_TIMER0_COMPARE, 
   (MM_READ(MM_FREQUENCY)/(1000000/rtems_configuration_get_microseconds_per_tick())));
  MM_WRITE(MM_TIMER0_COUNTER, 0);
  MM_WRITE(MM_TIMER0_CONTROL, TIMER_ENABLE | TIMER_AUTORESTART);
  bsp_interrupt_vector_enable(MM_IRQ_TIMER0);
}
示例#8
0
文件: ir.c 项目: AlexShiLucky/rtems
static rtems_isr interrupt_handler(rtems_vector_number n)
{
  unsigned short int msg;

  lm32_interrupt_ack(1 << MM_IRQ_IR);
  msg = MM_READ(MM_IR_RX);
  rtems_message_queue_send(ir_q, &msg, 2);
}
示例#9
0
文件: versions.c 项目: gedare/rtems
static int get_pcb_revision(char *buffer)
{
  unsigned int v;

  v = MM_READ(MM_GPIO_IN);
  v = (v & 0x78) >> 3;
  buffer[0] = '0' + v;
  return 1;
}
示例#10
0
文件: versions.c 项目: gedare/rtems
static int get_pcb_type(char *buffer)
{
  unsigned int id;

  id = MM_READ(MM_SYSTEM_ID);
  buffer[0] = (id & 0x0000ff00) >> 8;
  buffer[1] = id & 0x000000ff;
  return 2;
}
示例#11
0
文件: network.c 项目: RTEMS/rtems
static void rx_daemon(void *arg)
{
  rtems_event_set events;
  
  while(1) {
    rtems_bsdnet_event_receive(RX_EVENT, RTEMS_EVENT_ANY | RTEMS_WAIT,
      RTEMS_NO_TIMEOUT, &events);

    if(MM_READ(MM_MINIMAC_STATE0) == MINIMAC_STATE_EMPTY) {
      receive_packet((uint8_t *)MINIMAC_RX0_BASE, MM_READ(MM_MINIMAC_COUNT0));
      MM_WRITE(MM_MINIMAC_STATE0, MINIMAC_STATE_LOADED);
    }
    if(MM_READ(MM_MINIMAC_STATE1) == MINIMAC_STATE_EMPTY) {
      receive_packet((uint8_t *)MINIMAC_RX1_BASE, MM_READ(MM_MINIMAC_COUNT1));
      MM_WRITE(MM_MINIMAC_STATE1, MINIMAC_STATE_LOADED);
    }
  }
}
示例#12
0
文件: timer.c 项目: RTEMS/rtems
benchmark_timer_t benchmark_timer_read(void)
{
  uint32_t ticks;
  uint32_t total;

  ticks = MM_READ(MM_TIMER1_COUNTER);
  if (ticks == 0xffffffff)
    printk("Timer overflow!\n");

  total = ticks / (MM_READ(MM_FREQUENCY) / 1000000);

  if (benchmark_timer_find_average_overhead)
    return total;
  else
  {
    if (total < LEAST_VALID)
      return 0;

    return (total - AVG_OVERHEAD);
  }
}
示例#13
0
文件: video.c 项目: RTEMS/rtems
static void i2c_start_cond(void)
{
  if(i2c_started) {
    /* set SDA to 1 */
    MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE|BT656_I2C_SDAOUT);
    i2c_delay();
    MM_WRITE(MM_BT656_I2C, MM_READ(MM_BT656_I2C) | BT656_I2C_SDC);
  }
  /* SCL is high, set SDA from 1 to 0 */
  MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE|BT656_I2C_SDC);
  i2c_delay();
  MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE);
  i2c_started = 1;
}
示例#14
0
文件: video.c 项目: RTEMS/rtems
rtems_device_driver video_close(
  rtems_device_major_number major,
  rtems_device_minor_number minor,
  void *arg
)
{
  int i;
  
  MM_WRITE(MM_BT656_FILTERSTATUS, 0);
  while(MM_READ(MM_BT656_FILTERSTATUS) & BT656_FILTER_INFRAME);
  for(i=0;i<N_BUFFERS;i++)
    free(buffers[i]);
  return RTEMS_SUCCESSFUL;
}
示例#15
0
文件: video.c 项目: RTEMS/rtems
/* I2C bit-banging functions from http://en.wikipedia.org/wiki/I2c */
static unsigned int i2c_read_bit(void)
{
  unsigned int bit;

  /* Let the slave drive data */
  MM_WRITE(MM_BT656_I2C, 0);
  i2c_delay();
  MM_WRITE(MM_BT656_I2C, BT656_I2C_SDC);
  i2c_delay();
  bit = MM_READ(MM_BT656_I2C) & BT656_I2C_SDAIN;
  i2c_delay();
  MM_WRITE(MM_BT656_I2C, 0);
  return bit;
}
示例#16
0
文件: ac97.c 项目: AlexShiLucky/rtems
static int read_cr(unsigned int adr)
{
  rtems_status_code sc;

  MM_WRITE(MM_AC97_CRADDR, adr);
  MM_WRITE(MM_AC97_CRCTL, AC97_CRCTL_RQEN);
  sc = rtems_semaphore_obtain(cr_write_sem, RTEMS_WAIT, CR_TIMEOUT);
  if (sc != RTEMS_SUCCESSFUL)
    return -1;
  sc = rtems_semaphore_obtain(cr_read_sem, RTEMS_WAIT, CR_TIMEOUT);
  if (sc != RTEMS_SUCCESSFUL)
    return -1;
  return MM_READ(MM_AC97_CRDATAIN);
}
示例#17
0
static int mmconsole_set_attributes(int minor, const struct termios *t)
{
  int baud;

  switch (t->c_cflag & CBAUD) {
    case B0:
      baud = 0;
      break;
    case B50:
      baud = 50;
      break;
    case B75:
      baud = 75;
      break;
    case B110:
      baud = 110;
      break;
    case B134:
      baud = 134;
      break;
    case B150:
      baud = 150;
      break;
    case B200:
      baud = 200;
      break;
    case B300:
      baud = 300;
      break;
    case B600:
      baud = 600;
      break;
    case B1200:
      baud = 1200;
      break;
    case B1800:
      baud = 1800;
      break;
    case B2400:
      baud = 2400;
      break;
    case B4800:
      baud = 4800;
      break;
    case B9600:
      baud = 9600;
      break;
    case B19200:
      baud = 19200;
      break;
    case B38400:
      baud = 38400;
      break;
    case B57600:
      baud = 57600;
      break;
    case B115200:
      baud = 115200;
      break;
    case B230400:
      baud = 230400;
      break;
    case B460800:
      baud = 460800;
      break;
    default:
      baud = -1;
      break;
  }

  if (baud > 0)
    MM_WRITE(MM_UART_DIV, MM_READ(MM_FREQUENCY)/baud/16);

  return 0;
}