Browse Source

Fix optimization level. It work...

Vladimir N. Shilov 3 years ago
parent
commit
9d3ecb7eac
6 changed files with 39 additions and 22 deletions
  1. 0 1
      Inc/board.h
  2. 4 4
      MDK-ARM/MNC-IN12x5.uvprojx
  3. 1 1
      Makefile
  4. 7 0
      ReadMe.txt
  5. 26 15
      Src/board.c
  6. 1 1
      Src/main.c

+ 0 - 1
Inc/board.h

@@ -108,7 +108,6 @@
 #define UART_ST_Pin GPIO_PIN_15
 
 /* Variables */
-uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
 
 /* Expoted funcions */
 void SystemClock_Config(void);

+ 4 - 4
MDK-ARM/MNC-IN12x5.uvprojx

@@ -313,7 +313,7 @@
           </ArmAdsMisc>
           <Cads>
             <interw>1</interw>
-            <Optim>6</Optim>
+            <Optim>5</Optim>
             <oTime>0</oTime>
             <SplitLS>0</SplitLS>
             <OneElfS>1</OneElfS>
@@ -329,7 +329,7 @@
             <uGnu>1</uGnu>
             <useXO>0</useXO>
             <v6Lang>6</v6Lang>
-            <v6LangP>4</v6LangP>
+            <v6LangP>3</v6LangP>
             <vShortEn>1</vShortEn>
             <vShortWch>1</vShortWch>
             <v6Lto>0</v6Lto>
@@ -570,8 +570,8 @@
   <RTE>
     <apis/>
     <components>
-      <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.4.0" condition="ARMv6_7_8-M Device">
-        <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.7.0"/>
+      <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.5.0" condition="ARMv6_7_8-M Device">
+        <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.8.0"/>
         <targetInfos>
           <targetInfo name="MNC-IN12x5"/>
         </targetInfos>

+ 1 - 1
Makefile

@@ -22,7 +22,7 @@ TARGET = MNC-IN12x5
 # debug build?
 DEBUG = 0
 # optimization
-OPT = -O2
+OPT = -Os
 OPT += -ffunction-sections -fdata-sections
 OPT += -fno-strict-aliasing
 OPT += -ffast-math -msoft-float -mfloat-abi=soft

+ 7 - 0
ReadMe.txt

@@ -60,3 +60,10 @@ pulse mode? тогда будет синхронизация со сменой 
 На очереди - SPI.
 И глобальное причёсывание.
 И HSV2RGB...
+---
+17.01.2022
+
+Засады на каждом шагу...
+Какая-то лажа с оптимизациями. Код из Кейла не работает. вернее не 
+"тикает", хотя минуты вроде меняются. Наверное, нужно код прервааний 
+оборачивать в "-O0" или как-то так.

+ 26 - 15
Src/board.c

@@ -34,38 +34,49 @@ void Board_Init(void)
 void SystemClock_Config(void)
 {
   /* HSI configuration and activation */
-  LL_RCC_HSI_Enable();
-  while(LL_RCC_HSI_IsReady() != 1)
+  RCC->CR |= RCC_CR_HSIKERON; // Enable HSI even in stop mode
+  while((RCC->CR & RCC_CR_HSIRDY) == 0)
   {
   }
 
   /* Main PLL configuration and activation */
-  LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI, LL_RCC_PLLM_DIV_2, 9, LL_RCC_PLLR_DIV_3);
-  LL_RCC_PLL_Enable();
-  LL_RCC_PLL_EnableDomain_SYS();
-  while(LL_RCC_PLL_IsReady() != 1)
+  RCC->PLLCFGR &= ~(RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR);
+  RCC->PLLCFGR |= (RCC_PLLCFGR_PLLSRC_HSI | (9 << RCC_PLLCFGR_PLLN_Pos) | RCC_PLLCFGR_PLLR_2 | RCC_PLLCFGR_PLLR_0);
+  RCC->PLLCFGR |= RCC_PLLCFGR_PLLREN; // RCC_PLL_EnableDomain_SYS
+  RCC->CR |= RCC_CR_PLLON; // RCC_PLL_Enable
+  while((RCC->CR & RCC_CR_PLLRDY) == 0)
   {
   }
 
   /* Set AHB prescaler*/
-  LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
+  //RCC->CFGR &= ~(RCC_CFGR_HPRE);
+  //RCC->CFGR |= 0x00000000U;
 
   /* Sysclk activation on the main PLL */
-  LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
-  while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
+  RCC->CFGR &= RCC_CFGR_SW;
+  RCC->CFGR |= RCC_CFGR_SW_1;
+  while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1)
   {
   }
 
-  /* Set APB1 prescaler*/
-  LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
+  /* Set APB1 prescaler !!! uncorrect !!! */
+  //RCC->CFGR &= RCC_CFGR_PPRE;
+  //RCC->CFGR |= 0x00000000U;
 
-  LL_Init1msTick(24000000);
+#ifdef USES_SYSTICK
+  /* Configure the SysTick to have interrupt in 1ms time base */
+  SysTick->LOAD  = (uint32_t)((24000000 / 1000) - 1UL);  /* set reload register */
+  SysTick->VAL   = 0UL;                                  /* Load the SysTick Counter Value */
+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
+                   SysTick_CTRL_ENABLE_Msk;              /* Enable the Systick Timer */
+#endif
 
   /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
-  LL_SetSystemCoreClock(24000000);
+  SystemCoreClock = 24000000;
 
-  /* Select I2C clock source */
-  LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_HSI);
+  /* Set I2C Clock Source */
+  RCC->CCIPR &= ~(RCC_CCIPR_I2C1SEL);
+  RCC->CCIPR |= RCC_CCIPR_I2C1SEL_1;
 }
 
 /**

+ 1 - 1
Src/main.c

@@ -142,7 +142,7 @@ int main(void)
   /* USER CODE BEGIN SysInit */
   LL_LPM_EnableSleep();
   LL_LPM_DisableSleepOnExit();
-  LL_RCC_GetSystemClocksFreq(&rcc_clocks);
+//  LL_RCC_GetSystemClocksFreq(&rcc_clocks);
   /* USER CODE END SysInit */
 
   /* Initialize all configured peripherals */