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; }
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); }
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(); }
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(); }
void doMux(unsigned pinIndex, unsigned value) { PIN pin; pin = pins[pinIndex]; gpio_mux(&pin, value); }