Exemplo n.º 1
0
int main( void )
{
	sysInit();

	/* USB Power dinyalakan supaya memory USB bisa dipakai */
	PCONP |= 0x80000000; 

	FIO0DIR = LED_UTAMA;
	FIO0CLR = LED_UTAMA;	
	
	FIO1DIR = 0xFFFFFFFF;

	#ifdef PAKAI_SERIAL_3
	/* PCONP enable UART3 */
	PCONP |= BIT(25);
	
	/* PCLK UART3, PCLK = CCLK */
	PCLKSEL1 &= ~(BIT(18) | BIT(19));
	PCLKSEL1 |= BIT(18);
	
	/* init TX3, RX3 */
	PINSEL1 &= ~(BIT(18) | BIT(19) | BIT(20) | BIT(21));
	PINSEL1 |= (BIT(18) | BIT(19));
	PINSEL1 |= (BIT(20) | BIT(21));
	PINSEL1 &= ~(BIT(16) | BIT(17));
	/* TXDE di highkan */
	FIO0DIR |= TXDE;
	//FIO0SET = TXDE;		// on	---> bisa kirim
	//FIO0SET &= ~TXDE;		// off	---> gak bisa kirim
	//FIO0CLR = TXDE;
	FIO0SET = TXDE;
	
	FIO0DIR |= RXDE;
	FIO0SET  = RXDE;
	#endif

	#ifdef PAKAI_SERIAL_2
	/* PCONP enable UART2 */
	PCONP |= BIT(24);
	
	/* PCLK UART2, PCLK = CCLK */
	PCLKSEL1 &= ~(BIT(16) | BIT(17));
	PCLKSEL1 |= BIT(16);
	
	/* init TX2, RX2 */
	PINSEL0 |= (BIT(20) | BIT(22));
	#endif

	/*	untuk cek blinking saat system boot */
#ifdef CEK_BLINK
	int t=0;
	while(t<5)
	{
		dele(1000000);
		FIO0CLR = LED_UTAMA;
		dele(1000000);
		FIO0SET = LED_UTAMA;
		t++;
	}
#endif

	xSerialPortInitMinimal( BAUD_RATE, configMINIMAL_STACK_SIZE  );
	#ifdef PAKAI_SERIAL_2
		serial2_init( BAUD_PM, (1 * configMINIMAL_STACK_SIZE) );
	#endif
	#ifdef PAKAI_SERIAL_3
		serial3_init( BAUD_PM, (1 * configMINIMAL_STACK_SIZE) );
	#endif

#ifdef PAKAI_ADC
	init_gpio_adc();
	init_gpio_mmc();
	init_spi_mmc(0);		// untuk adc dan mmc
#endif

#ifdef jalankan
	init_led_utama();
	start_ether();

#if (defined(PAKAI_PM) && defined(AMBIL_PM))
	//init_task_pm();
#endif
	init_shell();
	vTaskStartScheduler();

    /* Will only get here if there was insufficient memory to create the idle
    task. */
	return 0;
#endif
Exemplo n.º 2
0
static int __init micom_init_module(void)
{	
  unsigned int         *ASC_3_INT_EN = (unsigned int*)(ASC3BaseAddress + ASC_INT_EN);
  unsigned int         *ASC_3_CTRL   = (unsigned int*)(ASC3BaseAddress + ASC_CTRL);
  int i;
  
  printk("Frontpanel VFD/MICOM driver for ABIP 9900/99HD, version %d.%02d (c) 2010 Sysifos\n", MICOM_MODULE_VERSION / 100, MICOM_MODULE_VERSION % 100);

  //Disable all ASC 3 interrupts
  *ASC_3_INT_EN = *ASC_3_INT_EN & ~0x000001ff;

  serial3_init();

  sema_init(&rx_int_sem, 0);
  sema_init(&write_sem, 1);
  sema_init(&receive_sem, 1);
  sema_init(&transmit_sem, 1);

  for (i = 0; i < LASTMINOR; i++)
    sema_init(&FrontPanelOpen[i].sem, 1);

  init_waitqueue_head(&wq);
  init_waitqueue_head(&task_wq);
  init_waitqueue_head(&ioctl_wq);

  //Enable the FIFO
  *ASC_3_CTRL = *ASC_3_CTRL | ASC_CTRL_FIFO_EN;

#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17)
    i = request_irq(120, (void*)FP_interrupt, IRQF_DISABLED /* SA_INTERRUPT */, "FP_serial", NULL);
#else
    i = request_irq(120, (void*)FP_interrupt, SA_INTERRUPT, "FP_serial", NULL);
#endif

  if (!i)
  {
    *ASC_3_INT_EN = *ASC_3_INT_EN | 0x00000001;

  } else {
	  printk("FP: ERR: Can't get irq 120\n");
	  return -EINVAL;
  }

  kernel_thread(fpReceiverTask, NULL, 0);
  kernel_thread(fpTransmitterTask, NULL, 0);

#if 1
  msleep(1000);
  micom_init_func();
#endif

  if (register_chrdev(VFD_MAJOR,"VFD",&vfd_fops)) {
	printk("FP: ERR: unable to get major %d for VFD/MICOM\n",VFD_MAJOR);

	//FIXME: stop threads, free irq

	return -EINVAL;
  }

  // input device init
  fp_button_dev = input_allocate_device();
  if (!fp_button_dev) {
	printk("FP: ERR: Not enough memory\n");

	//FIXME: stop threads, free irq
	return -ENOMEM;
  }


  printk("FP: register key events:");
  set_bit(EV_KEY, fp_button_dev->evbit);
  memset(fp_button_dev->keybit, 0, sizeof(fp_button_dev->keybit));
  for(i = 0; i < FP_KEYS_MAX; i++)
	if(fp_keys[i].key) {
		set_bit(fp_keys[i].key, fp_button_dev->keybit);
		printk(" [%s]", fp_keys[i].name);
	}
  printk("\n");

  fp_button_dev->name = "Frontpanel";

  i = input_register_device(fp_button_dev);
  if (i) {
	printk("FP: ERR: Failed to register input device\n");

	//FIXME: stop threads, free irq
	return -ENOMEM;
  }

  dprintk("%s <\n", __func__);
  return 0;
}