aboutsummaryrefslogtreecommitdiffstats
path: root/src/wiring/wiring.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wiring/wiring.c')
-rw-r--r--src/wiring/wiring.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/wiring/wiring.c b/src/wiring/wiring.c
new file mode 100644
index 0000000..83679c7
--- /dev/null
+++ b/src/wiring/wiring.c
@@ -0,0 +1,85 @@
+#include <inttypes.h>
+#include "stm32f10x_flash.h"
+#include "stm32f10x_rcc.h"
+#include "stm32f10x_map.h"
+#include "stm32f10x_nvic.h"
+#include "wiring.h"
+#include "systick.h"
+#include "gpio.h"
+
+void RCC_Configuration(void);
+void NVIC_Configuration(void);
+
+void init(void) {
+ RCC_Configuration();
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
+ RCC_APB2Periph_GPIOB |
+ RCC_APB2Periph_GPIOC |
+ RCC_APB2Periph_AFIO
+ , ENABLE);
+ NVIC_Configuration();
+
+ systick_init();
+
+ gpio_init();
+
+ /* off for debug */
+// adc_init();
+
+// timer_init(1, 1);
+// timer_init(2, 1);
+// timer_init(3, 1);
+// timer_init(4, 1);
+}
+
+void NVIC_Configuration(void) {
+ /* Set the Vector Table base location at 0x08000000 */
+ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
+}
+
+
+void RCC_Configuration(void) {
+ ErrorStatus HSEStartUpStatus;
+ /* RCC system reset(for debug purpose) */
+ RCC_DeInit();
+
+ /* Enable HSE */
+ RCC_HSEConfig(RCC_HSE_ON);
+
+ /* Wait till HSE is ready */
+ HSEStartUpStatus = RCC_WaitForHSEStartUp();
+
+ if(HSEStartUpStatus == SUCCESS) {
+ /* Enable Prefetch Buffer */
+ FLASH_PrefetchBufferCmd( (u32)FLASH_PrefetchBuffer_Enable);
+
+ /* Flash 2 wait state */
+ FLASH_SetLatency(FLASH_Latency_2);
+
+ /* HCLK = SYSCLK */
+ RCC_HCLKConfig(RCC_SYSCLK_Div1);
+
+ /* PCLK2 = HCLK APB2 Periphs, no prescaler 72MHz */
+ RCC_PCLK2Config(RCC_HCLK_Div1);
+
+ /* PCLK1 = HCLK/2 APB1 periphs = 36MHZ*/
+ RCC_PCLK1Config(RCC_HCLK_Div2);
+
+ /* PLLCLK = 8MHz * 9 = 72 MHz */
+ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
+
+ /* Enable PLL */
+ RCC_PLLCmd(ENABLE);
+
+ /* Wait till PLL is ready */
+ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
+ ;
+
+ /* Select PLL as system clock source */
+ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
+
+ /* Wait till PLL is used as system clock source */
+ while(RCC_GetSYSCLKSource() != 0x08)
+ ;
+ }
+}