void getFactoryTSCalibData(TSCALIB_TypeDef* data)
{
    uint32_t deviceID;

    deviceID = DBGMCU_GetDEVID();

    if (deviceID == 0x427) *data = *FACTORY_TSCALIB_MDP_DATA;
    else if (deviceID == 0x416) *data = *FACTORY_TSCALIB_MD_DATA;
    else while(1); // add error handler - device cannot be identified calibration data not loaded!
}
Exemplo n.º 2
0
Arquivo: main.c Projeto: travisg/stm32
void _start(void)
{
	/* copy data from rom */
	if (&__data_start != &__data_start_rom) {
		unsigned int *src = &__data_start_rom;
		unsigned int *dest = &__data_start;

		while (dest != &__data_end)
			*dest++ = *src++;
	}

	/* zero out bss */
	unsigned int *bss = &__bss_start;
	while (bss != &__bss_end)
		*bss++ = 0;


	USART_TypeDef *debug_usart;
#if TARGET_STM3210E
	/* configure the usart1 pins */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

	GPIO_PinRemapConfig(GPIO_Remap_USART1, DISABLE);

	GPIO_InitTypeDef init;
	init.GPIO_Pin = GPIO_Pin_9;
	init.GPIO_Speed = GPIO_Speed_50MHz;
	init.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOA, &init);

	init.GPIO_Pin = GPIO_Pin_10;
	init.GPIO_Speed = GPIO_Speed_50MHz;
	init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOA, &init);

	debug_usart = USART1;
#endif
#if TARGET_STM32_P107
	/* configure the usart3 pins */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

	GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE);

	GPIO_InitTypeDef init;
	init.GPIO_Pin = GPIO_Pin_8;
	init.GPIO_Speed = GPIO_Speed_50MHz;
	init.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOD, &init);

	init.GPIO_Pin = GPIO_Pin_9;
	init.GPIO_Speed = GPIO_Speed_50MHz;
	init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOD, &init);

	debug_usart = USART3;
#endif

	init_leds();

	usart_init(debug_usart);

	printf("how are you gentlemen\n");

	printf("devid 0x%x\n", DBGMCU_GetDEVID());

	dump_clocks();
	
	// bring up te HSE
	printf("enabling external crystal\n");
	RCC_HSEConfig(RCC_HSE_ON);
	RCC_WaitForHSEStartUp();
	printf("external crystal up\n");

	// try to program up the pll
	printf("enabling pll\n");
#if STM32F10X_CL
	RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_4);
#else
	RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
#endif
	RCC_PLLCmd(ENABLE);

	while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
		;
	printf("pll latched\n");

	printf("setting up clocks\n");

	FLASH_SetLatency(FLASH_Latency_2);
	RCC_HCLKConfig(RCC_SYSCLK_Div1);
	RCC_PCLK1Config(RCC_HCLK_Div2);
	RCC_PCLK2Config(RCC_HCLK_Div1);
#if STM32F10X_CL
	RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
#else
	RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
#endif

	usart_init(debug_usart);

	set_led(3, 0);
	set_led(3, 1);
	printf("after new sysclk\n");

	dump_clocks();

	printf("done!\n");

	/* try to fire the systick */
//	__set_BASEPRI(8 << __NVIC_PRIO_BITS);

	/* start the systick timer */
	NVIC_SetVectorTable(0, 0);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	uint32_t pri = NVIC_EncodePriority(3, 0, 0);	
	NVIC_SetPriority(SysTick_IRQn, pri);
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
	SysTick_Config(systick_counter);

#if 0
	uint32_t last = 0;
	for (;;) {
		uint32_t now = current_time();
		if (now - last >= 1000000) {
			printf("time %d\n", now);
			last = now;
		}
	}
#endif

#if 0
	uint32_t val;
	for (val = 0; ; val++) {
		set_led(0, val & 0x1);
		set_led(1, val & 0x2);
		set_led(2, val & 0x4);
		set_led(3, val & 0x8);
	}
#endif

	/* write the boot sequence */
	led_panel_command_write(0b100000000010, 12); // SYS_EN
	led_panel_command_write(0b100000000110, 12); // LED_ON
	led_panel_command_write(0b100000010000, 12); // BLINK_OFF
	led_panel_command_write(0b100000110000, 12); // INT_RC
	led_panel_command_write(0b100001001000, 12); // n-mos open drain, 16 com
	led_panel_command_write(0b100101011110, 12); // PWM_CTRL | 0xf

	for(uint j = 0; ; j++) {
		GPIO_ResetBits(GPIOF, LED_CS);
		led_panel_write(0b1010000000, 10); // start write at address 0

		for (int i = 0; i < 96; i++) {
			led_panel_write(((j % 96) > i) ? 0b1111: 0, 4);
		}
		GPIO_SetBits(GPIOF, LED_CS);

		spin(10000);
	}

	for(;;)
		;
}
Exemplo n.º 3
0
/*
 * Device Information View
 * Device: Win32 or Cortex-M3 etc
 * Memory:
 * Thread:
 * IP Address:
 * Gateway:
 * DNS:
 */
static rt_bool_t view_event_handler(struct rtgui_widget* widget, struct rtgui_event* event)
{
	switch (event->type)
	{
	case RTGUI_EVENT_PAINT:
		{
			struct rtgui_dc* dc;
			struct rtgui_rect rect;
			char* line;
			rt_uint32_t total, used, max_used;

			line = rtgui_malloc(256);
			if (line == RT_NULL) return RT_FALSE;

			dc = rtgui_dc_begin_drawing(widget);
			if (dc == RT_NULL)
			{
				rtgui_free(line);
				return RT_FALSE;
			}
			rtgui_widget_get_rect(widget, &rect);

			/* fill background */
			rtgui_dc_fill_rect(dc, &rect);

			rect.y2 = rect.y1 + 18;

			{
				rt_uint32_t dev_index, rev_index;
				
				dev_index = DBGMCU_GetDEVID();
				dev_index = (dev_index - 0x410)/2;
				rev_index = DBGMCU_GetREVID();
				switch (rev_index)
				{
				case 0x1000:
				case 0x0000:
					rev_index = 0; 	/* Revision A */
					break;
					
				case 0x1001:
				case 0x2001:
					rev_index = 3;	/* Revision Z */
					break;
				
				case 0x2000:
					rev_index = 1;	/* Revision B */
					break;
				case 0x2002:
					rev_index = 2;	/* Revision Y */
					break;
					
				default:
					rev_index = 4;	/* Unknown */
					break;
				};

				/* check device index */
				if (dev_index > 4) dev_index = 3;

				/* draw each information */
				sprintf(line, "设备: %s %s", 
					stm32_devname[dev_index], 
					stm32_revname[rev_index]);
				rtgui_dc_draw_text(dc, line, &rect); rect.y1 += 16; rect.y2 += 16;
			}

			rt_memory_info(&total, &used, &max_used);
			sprintf(line, "内存: 当前使用 %d 字节", used);
			rtgui_dc_draw_text(dc, line, &rect); rect.y1 += 16; rect.y2 += 16;
			{
				rt_uint16_t rect_width;
				rtgui_color_t saved;
				
				rtgui_rect_t mem_rect = rect;
				rtgui_rect_inflate(&mem_rect, -2);
				rtgui_dc_draw_rect(dc, &mem_rect);

				rtgui_rect_inflate(&mem_rect, -1);
				rect_width = rtgui_rect_width(mem_rect);

				saved = RTGUI_WIDGET_BACKGROUND(widget);

				RTGUI_WIDGET_BACKGROUND(widget) = light_grey;
				mem_rect.x2 = mem_rect.x1 + (max_used * rect_width / total);
				rtgui_dc_fill_rect(dc, &mem_rect);
				
				RTGUI_WIDGET_BACKGROUND(widget) = blue;
				mem_rect.x2 = mem_rect.x1 + (used * rect_width / total);
				rtgui_dc_fill_rect(dc, &mem_rect);

				/* restore color */
				RTGUI_WIDGET_BACKGROUND(widget) = saved;
			}
			rect.y1 += 18; rect.y2 += 18;

			sprintf(line, "线程数: %d", get_thread_cnt());
			rtgui_dc_draw_text(dc, line, &rect); rect.y1 += 16; rect.y2 += 16;

#ifdef RT_USING_LWIP
			{
				struct ip_addr ip_addr;
				struct _ip_addr
				{
					rt_uint8_t addr0, addr1, addr2, addr3;
				} *addr;
			
				addr = (struct _ip_addr*)&netif_default->ip_addr.addr;

				sprintf(line, "IP地址  : %d.%d.%d.%d", addr->addr0, addr->addr1, addr->addr2, addr->addr3);
				rtgui_dc_draw_text(dc, line, &rect); rect.y1 += 16; rect.y2 += 16;

				addr = (struct _ip_addr*)&netif_default->gw.addr;
				sprintf(line, "网关地址: %d.%d.%d.%d", addr->addr0, addr->addr1, addr->addr2, addr->addr3);
				rtgui_dc_draw_text(dc, line, &rect); rect.y1 += 16; rect.y2 += 16;

				addr = (struct _ip_addr*)&netif_default->netmask.addr;
				sprintf(line, "网络掩码: %d.%d.%d.%d", addr->addr0, addr->addr1, addr->addr2, addr->addr3);
				rtgui_dc_draw_text(dc, line, &rect); rect.y1 += 16; rect.y2 += 16;

#if LWIP_DNS
				ip_addr = dns_getserver(0);
				addr = (struct _ip_addr*)&ip_addr;
				sprintf(line, "DNS地址 : %d.%d.%d.%d", addr->addr0, addr->addr1, addr->addr2, addr->addr3);
				rtgui_dc_draw_text(dc, line, &rect); rect.y1 += 16; rect.y2 += 16;
#endif
			}
#endif

			rtgui_dc_end_drawing(dc);
			rtgui_free(line);
			return RT_FALSE;
		}

	case RTGUI_EVENT_KBD:
		{
            struct rtgui_event_kbd* ekbd;
			
			ekbd = (struct rtgui_event_kbd*)event;
            if (ekbd->type == RTGUI_KEYDOWN && ekbd->key == RTGUIK_RETURN)
            {
				rtgui_workbench_t* workbench;

				workbench = RTGUI_WORKBENCH(RTGUI_WIDGET(device_view)->parent);
				rtgui_workbench_remove_view(workbench, device_view);

				rtgui_view_destroy(device_view);
				device_view = RT_NULL;
            }
		}
		return RT_FALSE;
	}

	/* use parent event handler */
	return rtgui_view_event_handler(widget, event);
}