Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: CUbeide 1.8 глючит.

Чт янв 27, 2022 17:08:16

будет-то тебе Ваньку валять
и так инфу тебе разжевывают, что не ловко за тебя

лучше поясни народу, что за часы там утебя, от включения которых все становится нормально

Re: CUbeide 1.8 глючит.

Чт янв 27, 2022 17:42:06

Часы реального времени Ds3231

Re: CUbeide 1.8 глючит.

Чт янв 27, 2022 18:03:03

Ага
Все ж стало понятно.

И фото всех внутренностей этого твоего камбайна покажешь?
ну уж до полной картины.

Re: CUbeide 1.8 глючит.

Чт янв 27, 2022 18:11:30

Только, пожалуйста, все фото под спойлером!!!

Re: CUbeide 1.8 глючит.

Чт янв 27, 2022 18:27:54

А что понятно?

Re: CUbeide 1.8 глючит.

Чт янв 27, 2022 18:43:38

как "что"?
как аппаратно подключено, как программно, ...
и "становится нормально" - что с часами проект работает как надо, а выключаешь часы - хулиганит?

Ты же внятно рассказал

Re: CUbeide 1.8 глючит.

Чт янв 27, 2022 21:16:07

Но иногда у меня закрадываются сомнения, что это делается для учёта особенностей выполнения кода на конкретных ядрах. Ну просто я никогда не поверю, что он не может вот такое "оптимизировать"
Код:
  LDR.W    R4,??DataTable2
  MOVS     R0,#+2         
  STR      R0,[R4, #+0]   
  MOVS     R1,#+2         
  STR      R1,[R4, #+4]   

Это сомнительно. Много раз наблюдал эту деоптимизацию (дублирование загрузок констант). И судя по контексту - явно это не подстройка под ядро.
Нашёл галочку, которая влияет на это поведение. Называется Instruction Scheduling в настройках оптимизации.

Re: CUbeide 1.8 глючит.

Чт янв 27, 2022 21:29:15

Instruction Scheduling И что это означает.Написано на асемблере.На Си переведите.

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 07:22:43

ivan dimir, это мне написали, что бы я слюной изошелся, еще 2-4 байта, а может и больше, и лишние 2-3 мкс, а может и не лишние, теперь полезу галочку в настройках оптимизации искать, сначала перерою eclips, следом EmBitz, а там может и до флагов оптимизации доберусь.

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 07:32:15

Ты то тут причём? Какой смысл писать это тому кто ничего не поймёт? Мы этот вопрос с jcxz обсуждали.

PS: Можно подумать, сделать код быстрее это что-то плохое. Вместо того чтобы сидеть и конспектировать они зубоскалят. Странные люди.

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 13:01:47

Нашёл галочку, которая влияет на это поведение. Называется Instruction Scheduling в настройках оптимизации.
Не помогает. :( По-крайней мере в "IAR ANSI C/C++ Compiler V7.80.4.12462/W32 for ARM".
См. в личке листинги с примерами.
Проверил в 2-х точках проекта, про которые помню что там были случаи этой деоптимизации. В обоих - не помогло.

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 13:40:47

На крайней версии влияет. Я бы не писал, если бы не заметил.

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 14:12:23

Я честно говоря ошибся в тактиролвании шины APB1

Добавлено after 2 minutes 36 seconds:
Спойлер
Код:
void RCC_init(void)
  {
     FLASH->ACR |= FLASH_ACR_PRFTEN ;
        //FLASH->ACR &=~ (FLASH_ACR_LATENCY_2WS) ;
     FLASH->ACR |= FLASH_ACR_LATENCY_3WS ;

     //PWR->CR|= PWR_CR_VOS;
     RCC->CR|=RCC_CR_HSEON;                                 // Enable HSE
      while (!(RCC->CR & RCC_CR_HSERDY));


      RCC->CR|=RCC_CR_CSSON;

      RCC->PLLCFGR |=RCC_PLLCFGR_PLLSRC_HSE  ;
      RCC->PLLCFGR |=  PLL_M>>RCC_PLLCFGR_PLLM_Pos |PLL_N << RCC_PLLCFGR_PLLN_Pos|PLL_P>>RCC_PLLCFGR_PLLP_Pos |RCC_PLLCFGR_PLLSRC_HSE;


          RCC->CFGR |= RCC_CFGR_HPRE_DIV1;//   ��������� ����  AHB
                         RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;//   ��������� ����  APB1

                       RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;

           RCC->CR |= RCC_CR_PLLON;                                           // enable PLL
           while(!(RCC->CR & RCC_CR_PLLRDY))
           {

           }

            RCC->CFGR |= RCC_CFGR_SW_PLL;                                      // select source SYSCLK = PLL
           while(!(RCC->CFGR&  RCC_CFGR_SWS_PLL))

              {

              }



  }

Спойлер[code][#define SYSCLOCK 100000000U
#define PLL_M 12
#define PLL_N 96

#define PLL_P 2/code]


Добавлено after 2 minutes 34 seconds:
А как правильно настроить параметры .Расчитать параметы вроде посчитал перепрвил.Не работает.

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 19:13:34

ivan dimir писал(а):А как правильно настроить параметры .Расчитать параметы вроде посчитал перепрвил.Не работает.

PLLдля каждой серии чипов - уникальный, тут обязательно требуется изучение доков на чип, и сам кубик - там сразу видно какие коэффициенты нужно вводить, и куда. Но вот проблема, значения из кубика не всегда совпадают с нужным значением для регистра. Вот тут нужно читать доку, раздел про PLL - тот самый регистр что нужно запрограммировать. Это не сложно, достаточно использовать поиск в доке.

Несмотря на разные PLL, делители, и коммутаторы - общий алгоритм настройки у всех один.
Запуск кварца, подключение делителя и PLL к линии кварца, ожидание готовности кварца, ожидание готовности PLL, новое значение тайминга для флеша, и финальное переключение на PLL. Обрати внимание, вырезание поля не используется, вместо этого записывается всё значение сразу. Макрос _VAL2FLD поможет избежать ошибок. И да, тут можно и нужно писать комментарии потому как лишняя информация со временем выветривается.
Спойлер
Код:
    ///system_f746
   RCC->CR  = RCC_CR_HSION | RCC_CR_HSEON;

    RCC->PLLCFGR =  _VAL2FLD(RCC_PLLCFGR_PLLM, 12)|     // Primary frequency divider (2-63)
                    _VAL2FLD(RCC_PLLCFGR_PLLN, 324)|    // Clock multiplier for PLLCLK (50-432)
                    _VAL2FLD(RCC_PLLCFGR_PLLP, 0)|      // The last divisor for PLLCLK n[2,4,6,8]
                    _VAL2FLD(RCC_PLLCFGR_PLLQ, 9)|      // Divisor for USB, SDMMC, and RNG (2-15)
                    RCC_PLLCFGR_PLLSRC_HSE;


    RCC->PLLSAICFGR = _VAL2FLD(RCC_PLLSAICFGR_PLLSAIN, 252)|    // PLLN frequency multiplication PLLSAI (50-432)
                      _VAL2FLD(RCC_PLLSAICFGR_PLLSAIP, 0)|     // P division factor for USB,RNG,SDMMC(48MHz) n[2,4,6,8]
                      _VAL2FLD(RCC_PLLSAICFGR_PLLSAIQ, 15)|    // Q division factor for SAI clock  (2-15)
                      _VAL2FLD(RCC_PLLSAICFGR_PLLSAIR, 3);    // R division factor for LCD clock  (2-7)

    RCC->CR |=  RCC_CR_PLLSAION | RCC_CR_PLLON; // PLL enable
    RCC->CFGR = RCC_CFGR_HPRE_DIV1|             // Divisor SYSCLK to HCLK
                RCC_CFGR_PPRE1_DIV4|            // Divisor HCLK to the 1 periphery
                RCC_CFGR_PPRE2_DIV2|            // Divisor HCLK to the 2 periphery
                _VAL2FLD(RCC_CFGR_RTCPRE,20)|   // HSE division factor for RTC clock 2-31
                _VAL2FLD(RCC_CFGR_MCO1, 3)|     // Microcontroller clock output PLL clock selected
                _VAL2FLD(RCC_CFGR_MCO1PRE, 7);  // MCO1 prescaler 111: division by 5

    RCC->DCKCFGR2 = _VAL2FLD(RCC_DCKCFGR2_USART1SEL, 0)| // APB2 clock (PCLK2) is selected as USART 1 clock
                    _VAL2FLD(RCC_DCKCFGR2_USART1SEL, 1)|// Low-power timer1 10: HSI clock is selected
                    _VAL2FLD(RCC_DCKCFGR2_CK48MSEL, 0)| // 48MHz clock from PLL is selected
                    _VAL2FLD(RCC_DCKCFGR2_SDMMC1SEL, 0); // 48 MHz clock is selected as SDMMC clock
   
   while(! (RCC->CR & RCC_CR_HSIRDY));
    while(! (RCC->CR & RCC_CR_HSERDY));

    __DMB();
    FLASH->ACR = 7                          /// Latency >210mg
                | FLASH_ACR_ARTEN           /// вкл кеш флеша
                | FLASH_ACR_PRFTEN;
    while(! (RCC->CR & RCC_CR_PLLRDY));
    while(! (RCC->CR & RCC_CR_PLLSAIRDY));

    RCC->CFGR |= RCC_CFGR_SW_PLL;              // PLL selected as system clock

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 20:15:15

Спойлер
Код:
VAL2FLD


У мееня usart не работал.Выводил какие то козябрики.Так настроил .И пошла строка.Я имею ввиду что настраиваю APB1 2 APB2 1 кукиш.Можно проексперементировать .Но usart не будет работать.Выводит мусор какой -то.Меня волнуют эти регистры
Спойлер
Код:
I2C1->TRISE= 15; //100
  I2C2->CCR|=I2C_CCR_FS ;

   I2C1->CCR=41;

APB1 /2 APB2/ 1 Это максимальная так как 100 Mhz шина тактировния.Вот это расчёт регистров который я посчитал а шина интефейс не работает. При настройках APB1 /4 работает.Почему хотя расчёт вроде по книге настроил.

Добавлено after 3 minutes 26 seconds:
Контроллер stm32f411cue

Добавлено after 5 minutes 52 seconds:
Спойлер
Код:
 I2C1->CR2|= _VAL2FLD(I2C_CR2_FREQ,50);
 I2C1->CCR|=I2C_CCR_FS ;
  I2C1->TRISE= 8; //100
  I2C2->CCR|=I2C_CCR_FS ;

   I2C1->CCR=25;

А так выводит.на 400 кГц

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 21:41:38

ivan dimir писал(а):А так выводит.на 400 кГц

Невнимательность к точным инструкциям. Дока не допускает многовариантность трактования, должно быть именно так как написано там.
Для i2c есть два режима работы Fm и Sm - различаются рабочей частотой и настройками. Описание режимов и таблицы расположены выше описания регистров.

Re: CUbeide 1.8 глючит.

Пт янв 28, 2022 22:05:02

Спойлер
Код:
https://mcu.goodboard.ru/viewtopic.php?id=11

я читал здесь.А расчётные данные незапускают интерфейс.

Добавлено after 7 minutes 6 seconds:
Есть у меня один проект ни чего не написано(только настройки).67 кбайт занимает.

Re: CUbeide 1.8 глючит.

Сб янв 29, 2022 00:05:42

Так вот откуда зараза распространяется, а кто запретил искать документацию у производителя чипа?
https://www.st.com/content/st_com/en/se ... cts-page=1
Кто запретил использовать кубик?
https://www.st.com/stm32cubemx
Кстати stm32f411cue не существует, для серии 411 - APB1 не может превышать 50МГц. Остальное после угадывания полного названия чипа.

Re: CUbeide 1.8 глючит.

Сб янв 29, 2022 08:49:19

Ошибся не stm32f411cue stm32f411ceu.Можно и использовать КУб.Но хочется понять как вручную.

Добавлено after 3 minutes 33 seconds:
Правильно APB1 =50Мгц. Основная шина 100Мгц

Re: CUbeide 1.8 глючит.

Сб янв 29, 2022 09:35:36

Код:
FLASH->ACR = FLASH_ACR_PRFTEN
           | FLASH_ACR_ICEN
           | FLASH_ACR_DCEN
           | FLASH_ACR_LATENCY_3WS; 

RCC->CR = _VAL2FLD(RCC_CR_HSITRIM,16)
        | RCC_CR_HSION
        | RCC_CR_HSEON; //Включаем HSE = 8 MHz
while(!(RCC->CR & RCC_CR_HSERDY));

// SYSCLK = 96 МГц  USB = 48 МГц 
RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSE
             | _VAL2FLD(RCC_PLLCFGR_PLLQ,4)
             | _VAL2FLD(RCC_PLLCFGR_PLLN,96)
             | _VAL2FLD(RCC_PLLCFGR_PLLM,4)
             | RCC_PLLCFGR_PLLP_div2;
             
RCC->CR = _VAL2FLD(RCC_CR_HSITRIM,16)
        | RCC_CR_HSION
        | RCC_CR_HSEON
        | RCC_CR_PLLON; //Включаем PLL
while(!(RCC->CR & RCC_CR_PLLRDY));

RCC->CFGR = RCC_CFGR_MCO2_HSE
          | RCC_CFGR_MCO2PRE_div1
          | RCC_CFGR_MCO1PRE_div1
          | RCC_CFGR_I2SSRC_PLLI2S
          | RCC_CFGR_MCO1_HSE
          | _VAL2FLD(RCC_CFGR_RTCPRE,8)
          | RCC_CFGR_PPRE2_DIV1
          | RCC_CFGR_PPRE1_DIV2
          | RCC_CFGR_HPRE_DIV1
          | RCC_CFGR_SW_PLL;


СпойлерВ заголовочном для F411 не хватает
Код:
#define RCC_PLLCFGR_PLLP_div2              (0x0U << RCC_PLLCFGR_PLLP_Pos)     
#define RCC_PLLCFGR_PLLP_div4              (0x1U << RCC_PLLCFGR_PLLP_Pos)     
#define RCC_PLLCFGR_PLLP_div6              (0x2U << RCC_PLLCFGR_PLLP_Pos)     
#define RCC_PLLCFGR_PLLP_div8              (0x3U << RCC_PLLCFGR_PLLP_Pos)     
#define RCC_CFGR_MCO2_SYSCLK               (0x0U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2_PLLI2S               (0x1U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2_HSE                  (0x2U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2_PLL                  (0x3U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2PRE_div1              (0x0U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO2PRE_div2              (0x4U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO2PRE_div3              (0x5U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO2PRE_div4              (0x6U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO2PRE_div5              (0x7U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO1PRE_div1              (0x0U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_MCO1PRE_div2              (0x4U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_MCO1PRE_div3              (0x5U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_MCO1PRE_div4              (0x6U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_MCO1PRE_div5              (0x7U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_I2SSRC_PLLI2S             (0x0U << RCC_CFGR_I2SSRC_Pos)
#define RCC_CFGR_I2SSRC_EXT                (0x1U << RCC_CFGR_I2SSRC_Pos)
#define RCC_CFGR_MCO1_HSI                  (0x0U << RCC_CFGR_MCO1_Pos)
#define RCC_CFGR_MCO1_LSE                  (0x1U << RCC_CFGR_MCO1_Pos)
#define RCC_CFGR_MCO1_HSE                  (0x2U << RCC_CFGR_MCO1_Pos)
#define RCC_CFGR_MCO1_PLL                  (0x3U << RCC_CFGR_MCO1_Pos)
Ответить