Ejemplo n.º 1
0
static int stm32_test_rcc(void)
{
	struct clk *sysclk;

	sysclk = clk_get("sysclk");
	if (!sysclk)
		return -1;

	if (clk_set_rate(sysclk, MAX_48_MHZ_FREQ) < 0)
		return -1;

	clk_put(sysclk);

#if 0
	/* Set MCO */
	gpio_mux(GPIO_A, 8, 0);

	/* Configure TX GPIO */
	gpio_set_mode(GPIO_A, 8, GPIO_MODE_AF);
	gpio_set_type(GPIO_A, 8, GPIO_OTYPE_PP);
	gpio_set_speed(GPIO_A, 8, GPIO_OSPEED_HIGH);
	gpio_set_pupd(GPIO_A, 8, GPIO_PUPD_UP);

	set_value(RCC_CFGR, 5, 24, 3);
#endif

	return 0;
}
Ejemplo n.º 2
0
void pinMode(PIN pin, unsigned int value) {
  unsigned gpio;
  const Pair* pair;

  pair  = get_pair_with_key(pin.def, pin.no, "gpio");
  gpio = atoi(pair->value);
  
  //printf("pinMode GPIO:%d as %s\n",gpio, (INPUT) ? "INPUT" : "OUTPUT");

  if (value == INPUT) {
    // mux mode 0x27
    gpio_mux(&pin,  (_MUX_0 | _MUX_1 | _MUX_2 | _MUX_RECEIVER_ENABLE));
  }
  else {
    // mux mode 0x7
    gpio_mux(&pin, (_MUX_0 | _MUX_1 | _MUX_2));
  }

  gpio_export(gpio);
  gpio_set_direction(gpio, value);

}
Ejemplo n.º 3
0
void TaskStart (void *data)
{
  extern u32 _end;
  u32 bss_end = (u32)(&_end);
  BOOL ret = FALSE;
  u32 *pstack_pnt = NULL;
  u32 heap_start = 0;
 // u32 montage_auto = 0;
  u32 cpuclk = 0;

  heap_start = ROUNDUP(bss_end,4);

  mtos_irq_init();

  hal_concerto_attach( );

  mtos_register_putchar(uart_write_byte);
  mtos_register_getchar(uart_read_byte_polling);

  //mtos_ticks_init(SYS_CPU_CLOCK);
  hal_module_clk_get(HAL_CPU0, &cpuclk);
  mtos_ticks_init(cpuclk);

  gpio_mux();

  mem_mgr_partition_param_t partition_param = { 0 };
  uart_init(0);
  uart_init(1);
  //init memory manager, to the memory end
  mem_mgr_init((u8 *)heap_start, SYSTEM_MEMORY_END);

  //create system partition
  partition_param.id   = MEM_SYS_PARTITION;
  partition_param.size = SYS_PARTITION_SIZE;
  partition_param.p_addr = (u8 *)heap_start;
  partition_param.atom_size = SYS_PARTITION_ATOM;
  partition_param.user_id = SYS_MODULE_SYSTEM;
  partition_param.method_id = MEM_METHOD_NORMAL;
  ret = MEM_CREATE_PARTITION(&partition_param);
  MT_ASSERT(FALSE != ret);
  mtos_mem_init(mt_mem_malloc, mt_mem_free);

 //create timer task
  pstack_pnt = (u32*)mtos_malloc(SYS_TIMER_TASK_STK_SIZE);
  MT_ASSERT(pstack_pnt != NULL);

  ret = mtos_task_create((u8 *)"Timer",
         Task_SysTimer,
         (void *)0,
         SYS_TIMER_TASK_PRIORITY,
         pstack_pnt,
         SYS_TIMER_TASK_STK_SIZE);

  MT_ASSERT(FALSE != ret);

  // init_dual_printk();

   //init message queue  
  mtos_irq_enable(TRUE);
  ret = mtos_message_init();
  MT_ASSERT(FALSE != ret);

  mtos_task_sleep(100);
  ap_init();

  mtos_task_exit();
}
Ejemplo n.º 4
0
void TaskStart (void *data)
{
  extern u32 _end;
  u32 bss_end = (u32)(&_end);
  BOOL ret = FALSE;
  u32 heap_start = 0;
  u32 cpuclk = 0;

  heap_start = ROUNDUP(bss_end,4);
  mtos_irq_init();
  extern void hal_concerto_attach(void);

  hal_concerto_attach( );

  mtos_register_putchar(uart_write_byte);
  mtos_register_getchar(uart_read_byte);

  hal_module_clk_get(HAL_CPU0, &cpuclk);
  mtos_ticks_init(cpuclk);

  /* uart1 pin mux */
  gpio_mux();
  uart_init(0);
  uart_init(1);
  uart_set_param(0, 115200, 8, 1, 0);
  uart_set_param(1, 115200, 8, 1, 0);

  OS_PRINTF("\n FastLogo app start\n");
  OS_PRINTF("\n Built at %s \n", buildSTR);

  OS_PRINTF("\n 1. heap_start[0x%x]\n", heap_start);
  OS_PRINTF("\n 2. whole memory size[0x%x]\n", (WHOLE_MEM_END & 0xFFFFFFF));

  OS_PRINTF("\n 3. SYS_PARTITION_SIZE is 0x%x, GUI_RESOURCE_BUFFER_ADDR is 0x%x\n", SYS_PARTITION_SIZE, GUI_RESOURCE_BUFFER_ADDR);

  if((heap_start + SYS_PARTITION_SIZE) > (GUI_RESOURCE_BUFFER_ADDR + 0x80000000))
  {
    OS_PRINTF("system partition is overlaped %d\n", (heap_start + SYS_PARTITION_SIZE) - GUI_RESOURCE_BUFFER_ADDR - 0x80000000);
    MT_ASSERT(0);
  }
  //init memory manager, only 11M
  //mem_mgr_init((u8 *)heap_start, SYS_PARTITION_SIZE + (1 * 1024 * 1024));
  OS_PRINTF("\n 4. free mem size 0x%x address from 0x%x to 0x%x\n", 
  (GUI_RESOURCE_BUFFER_ADDR | 0x80000000) - (heap_start + SYS_PARTITION_SIZE),
  (heap_start + SYS_PARTITION_SIZE),(GUI_RESOURCE_BUFFER_ADDR | 0x80000000));


  mem_mgr_init((u8 *)heap_start,
  SYS_PARTITION_SIZE);

  OS_PRINTF("\n 5. mem_mgr_start[0x%x],size=0x%x\n", heap_start,
  	SYS_PARTITION_SIZE);
  dlmem_init((void *)heap_start,
  	SYS_PARTITION_SIZE);
  mtos_mem_init(dl_malloc, dl_free);
  OS_PRINTF("init mem ok!\n");


//enable interrupt
  mtos_irq_enable(TRUE);

  //init message queue
  ret = mtos_message_init();
  MT_ASSERT(FALSE != ret);


  ap_init();

  mtos_task_exit();
}
Ejemplo n.º 5
0
void doMux(unsigned pinIndex, unsigned value) {
  PIN pin;

  pin = pins[pinIndex];
  gpio_mux(&pin, value);
}