Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-дек-15 17:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 308 ]  На страницу Пред.  1 ... 17, 18, 19, 20, 21  След.
Автор Сообщение
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-05 17:32 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 22
Нашел ошибки в библиотечных файлах MDR1986VE1T.h и MDR32Fx.h

1. MDR1986VE1T.h - самый конец файла. Имеется
Код:
#endif /* __MDR1986VE1T_H */

#ifdef __cplusplus
}
#endif

Должно быть
Код:
#ifdef __cplusplus
}
#endif

#endif /* __MDR1986VE1T_H */

Т.е. порядок должен быть ОБРАТНЫМ, относительно того, как эти дефайны располагались в начале файла. Посмотрите на аналогичное место в конце файла MDR32Fx.h - там порядок правильный.

2. В файлах MDR1986VE1T.h и MDR32Fx.h полностью отсутствуют макроопределения битов и их позиций для регистра MDR_RST_CLK->PER_CLOCK структуры MDR_RST_CLK_TypeDef. Просто пропущены, забыты. Надо бы дополнить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-07 10:14 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 201
Откуда: ПКК "Миландр"
Цитата:
1. MDR1986VE1T.h - самый конец файла. Имеется ...

Спасибо, исправим в ближайшем обновлении.

Цитата:
2. В файлах MDR1986VE1T.h и MDR32Fx.h полностью отсутствуют макроопределения битов и их позиций для регистра MDR_RST_CLK->PER_CLOCK структуры MDR_RST_CLK_TypeDef

Определения находятся в MDR32F9Qx_rst_clk.h

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-20 12:51 
Не в сети
Аватара пользователя

Зарегистрирован: 2016-июн-15 13:22
Сообщения: 43
Доброго дня.

Когда будете формировать пакет для кейла не забудьте отредактировать pdsc файл, в 544 строке
Код:
...
<!-- EEPROM Driver -->
    <component Cclass="Drivers" Cgroup="EEMPROM" Cversion="1.5" condition="CON_MDR1986BXX">
...

написано EEMPROM вместо EEPROM.

_________________
cdeblog.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-20 13:14 
Не в сети

Зарегистрирован: 2016-май-07 09:49
Сообщения: 36
Откуда: Саратов
На демоплате перепаяли процессоры 1986ВЕ3 1-й ревизии на 2. Теперь при включении генератора HSE2 программа уходит в вечный цикл ожидания готовности генератора к работе. Может при перепайке мы его повредили? Как проверить, что он работоспособен?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-21 09:19 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 201
Откуда: ПКК "Миландр"
Цитата:
На демоплате перепаяли процессоры 1986ВЕ3 1-й ревизии на 2. Теперь при включении генератора HSE2 программа уходит в вечный цикл ожидания готовности генератора к работе. Может при перепайке мы его повредили? Как проверить, что он работоспособен?


Уже ответил на этот вопрос по обращению в техподдержку. Пишите туда же, на support@milandr.ru, если пример не заработает.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-23 10:21 
Не в сети
Аватара пользователя

Зарегистрирован: 2016-июн-15 13:22
Сообщения: 43
Решил однажды воспользоваться несколькими макросами из библиотеки... зачем, да вот нужно было.
В итоге нарвался на некоторые проблемы...

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

Открыть (МНОГО ТЕКСТА) Где нашел и что поправил, скорее всего не все возможные неприятности устранены
mdr32f9qx_dma.h 149
Код:
#define IS_DMA_CHANNELS(NUMBER) ((NUMBER >= 1) && (NUMBER <= 32))       // Было
#define IS_DMA_CHANNELS(NUMBER) (((NUMBER) >= 1) && ((NUMBER) <= 32))   // стало

mdr32f9qx_dma.h 345
Код:
#define IS_DMA_CHANNEL(CHANNEL) (CHANNEL <= (DMA_Channels_Number - 1))       // Было
#define IS_DMA_CHANNEL(CHANNEL) ((CHANNEL) <= (DMA_Channels_Number - 1))     // стало

mdr32f9qx_dma.h 422
Код:
#define IS_DMA_CYCLE_SIZE(SIZE)   ((SIZE >= 1) && (SIZE <= 1024))           // Было
#define IS_DMA_CYCLE_SIZE(SIZE)   (((SIZE) >= 1) && ((SIZE) <= 1024))       // стало

mdr32f9qx_dma.h 457
Код:
#define IS_DMA_SOURCE_PROT(STATE)           ((STATE & (~(0x7 << 18))) == 0)      // Было
#define IS_DMA_SOURCE_PROT(STATE)           (((STATE) & (~(0x7 << 18))) == 0)    // стало

mdr32f9qx_dma.h 469
Код:
#define IS_DMA_DEST_PROT(STATE)             ((STATE & (~(0x7 << 21))) == 0)        // Было
#define IS_DMA_DEST_PROT(STATE)             (((STATE) & (~(0x7 << 21))) == 0)      // стало

mdr32f9qx_dma.h 481
Код:
#define IS_DMA_AHB_PROT(STATE)            ((STATE & (~(0x7 << 5))) == 0)           // Было
#define IS_DMA_AHB_PROT(STATE)            (((STATE) & (~(0x7 << 5))) == 0)         // стало

mdr32f9qx_rst_clk.h 158
Код:
#define IS_RST_CLK_CPU_PLL_MUL(SRC)             ((SRC>=0) && (SRC<16))             // Было
#define IS_RST_CLK_CPU_PLL_MUL(SRC)             (((SRC)>=0) && ((SRC)<16))         // стало

mdr32f9qx_rst_clk.h 208
Код:
#define IS_RST_CLK_USB_PLL_MUL(SRC)             ((SRC>=0) && (SRC<16))              // Было
#define IS_RST_CLK_USB_PLL_MUL(SRC)             (((SRC)>=0) && ((SRC)<16))          // стало

mdr32f9qx_rst_clk.h 653
Код:
// Было
#define IS_DSP_C1_CLOCK(CLOCK)            ((CLOCK == DSP_C1_CLOCK_HSI)  ||\
                                  (CLOCK == DSP_C1_CLOCK_HSI2) ||\
                                  (CLOCK == DSP_C1_CLOCK_HSE)  ||\
                                  (CLOCK == DSP_C1_CLOCK_HSE2))
// Стало
#define IS_DSP_C1_CLOCK(CLOCK)            (((CLOCK) == DSP_C1_CLOCK_HSI)  ||\
                                  ((CLOCK) == DSP_C1_CLOCK_HSI2) ||\
                                  ((CLOCK) == DSP_C1_CLOCK_HSE)  ||\
                                  ((CLOCK) == DSP_C1_CLOCK_HSE2))

mdr32f9qx_rst_clk.h 681
Код:
// Было
#define   IS_DSP_PLL_MULL(PLL_MUL)         ((PLL_MUL >= DSP_PLL_MUL1) &&\
                                  (PLL_MUL <= DSP_PLL_MUL15))
// Стало
#define   IS_DSP_PLL_MULL(PLL_MUL)         (((PLL_MUL) >= DSP_PLL_MUL1 &&\
                                  ((PLL_MUL) <= DSP_PLL_MUL15)

mdr32f9qx_rst_clk.h 693
Код:
// Было
#define IS_DSP_PRESCALER(PRESCALER)         ((PRESCALER == DSP_PRESCALER1) ||\
                                  (PRESCALER == DSP_PRESCALER2))
// Стало
#define IS_DSP_PRESCALER(PRESCALER)         (((PRESCALER) == DSP_PRESCALER1) ||\
                                  ((PRESCALER) == DSP_PRESCALER2))

mdr32f9qx_uart.h 152
Код:
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)       ((CONTROL&(~(UART_HARDWARE_FLOW_CONTROL_MASK))) == 0)          // Было
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)       (((CONTROL) & (~(UART_HARDWARE_FLOW_CONTROL_MASK))) == 0)      // стало

mdr32f9qx_uart.h 263
Код:
// Было
#define UART_Data(DATA)                     ((uint8_t)DATA)
#define UART_Flags(DATA)                    ((uint8_t)(DATA >> 8))
#define UART_CheckDataStatus(DATA, BIT)     ((((uint32_t)DATA) << (31 - BIT)) >> 31)
// Стало
#define UART_Data(DATA)                     ((uint8_t)(DATA))
#define UART_Flags(DATA)                    ((uint8_t)((DATA) >> 8)
#define UART_CheckDataStatus(DATA, BIT)     ((((uint32_t)(DATA)) << (31 - (BIT))) >> 31)

mdr32f9qx_can.h 399
Код:
#define IS_CAN_ITConfig(IT)       ((IT & (~CAN_IT_MASK)) == 0)           // Было
#define IS_CAN_ITConfig(IT)       (((IT) & (~CAN_IT_MASK)) == 0)         // стало

mdr32f9qx_bkp.h 119
Код:
#define IS_RTC_CALIBRATION(CAL) ((CAL>=0) && (CAL<=255))            // Было
#define IS_RTC_CALIBRATION(CAL) (((CAL)>=0) && ((CAL)<=255))        // стало

mdr32f9qx_power.h 176
Код:
// Было
#define IS_POWER_TRIM(TRIM)               ((TRIM == POWER_TRIM_1_4_V) ||\
                                  (TRIM == POWER_TRIM_1_6_V) ||\
                                  (TRIM == POWER_TRIM_1_8_V))
// Стало
#define IS_POWER_TRIM(TRIM)               (((TRIM) == POWER_TRIM_1_4_V) ||\
                                  ((TRIM) == POWER_TRIM_1_6_V) ||\
                                  ((TRIM) == POWER_TRIM_1_8_V))

mdr32f9qx_eeprom.c 35
Код:
// Было
#define IS_TWO_BYTE_ALLIGNED(ADDR)      ((ADDR & 1) == 0)
#define IS_FOUR_BYTE_ALLIGNED(ADDR)     ((ADDR & 3) == 0)
// Стало
#define IS_TWO_BYTE_ALLIGNED(ADDR)      (((ADDR) & 1) == 0)
#define IS_FOUR_BYTE_ALLIGNED(ADDR)     (((ADDR) & 3) == 0)
Закрыть

_________________
cdeblog.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-23 13:49 
Не в сети
Аватара пользователя

Зарегистрирован: 2016-июн-15 13:22
Сообщения: 43
Еще замечание/вопрос.

mdr32f9qx_dma.c 515
Код:
    case DMA_FLAG_CHNL_ALT:
      return (FlagStatus)((MDR_DMA->CHNL_PRI_ALT_SET & (1 << DMA_Channel)) != 0);
    case DMA_FLAG_CHNL_PRIORITY:
      return (FlagStatus)((MDR_DMA->CHNL_PRIORITY_SET & (1 << DMA_Channel) != 0));

Нет ли здесь чего-нибудь странного, например неправильно стоящей скобки в последней строке? :)
Предлагаю поправить
Код:
    case DMA_FLAG_CHNL_PRIORITY:
      return (FlagStatus)((MDR_DMA->CHNL_PRIORITY_SET & (1 << DMA_Channel)) != 0);

Иначе при проверке DMA_FLAG_CHNL_PRIORITY результат будет не тем какой ожидали.

_________________
cdeblog.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-23 14:00 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 201
Откуда: ПКК "Миландр"
Полагаю, что разработчики библиотеки не рассчитывали, что макросами захочет пользоваться кто-то еще. Иначе сложно объяснить отсутствие скобок. В библиотеке же макросы используются только для проверки значений входных параметров функций и побочных эффектов из-за отсутствия скобок не имеют.

По умолчанию assert_params() выключены и наличие/отсутствие скобок никак не сказывается на сборке библиотеки:

Код:
файл MDR32F9Qx_config.h

#define USE_ASSERT_INFO    0
/* #define USE_ASSERT_INFO    1 */
/* #define USE_ASSERT_INFO    2 */


Если же проверку параметров включить - то вывалится достаточно других предупреждений. Например, не прокатит без ворнингов ни старый, ни новый вариант:

Цитата:
mdr32f9qx_rst_clk.h 158
Код:
#define IS_RST_CLK_CPU_PLL_MUL(SRC)             ((SRC>=0) && (SRC<16))             // Было
#define IS_RST_CLK_CPU_PLL_MUL(SRC)             (((SRC)>=0) && ((SRC)<16))         // стало



Будете дорабатывать?

По вопросу с CHNL_PRIORITY_SET принимается, без вопросов. :)

По итогу внесения исправлений, скиньте пожалуйста получившийся архив. Передадим программистам для внесения правок.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-авг-23 15:25 
Не в сети
Аватара пользователя

Зарегистрирован: 2016-июн-15 13:22
Сообщения: 43
Vasiliy писал(а):
По итогу внесения исправлений, скиньте пожалуйста получившийся архив. Передадим программистам для внесения правок.

Vasiliy, если это обращение ко мне, то через пару дней сброшу

_________________
cdeblog.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-сен-29 20:34 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 22
Раз уж файлы *.svd входят в состав SPL и в *.pack для Кейла, то поправьте и их.
В файле MDR1986VE1T.svd в раздел регистров портов добавьте описание регистров SETTX, CLRTX, RDTX. Также исправьте значение параметра device->cpu->nvicPrioBits с 3 на 2 (битов приоритета прерываний в этом контроллере 2, а не 3).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-ноя-23 02:01 
Не в сети

Зарегистрирован: 2014-авг-11 19:26
Сообщения: 123
У кого-нибудь наблюдались проблемы с PLL на 1986ВЕ4 ?
Использую кварц на 8 МГц, настраиваю тактирование:
Код:
   // Включаем тактирование HSE
   RST_CLK_DeInit();
   RST_CLK_CPU_PLLcmd(DISABLE);
   RST_CLK_HSEconfig(RST_CLK_HSE_ON);
   while (RST_CLK_HSEstatus() != SUCCESS) ;

   // Переключаем тактирование MCU от PLL ((8 / 1) * 1 = 8 МГц)
   RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul1);
   RST_CLK_CPU_PLLcmd(ENABLE);
   while (RST_CLK_CPU_PLLstatus() != SUCCESS) ;

   RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
   RST_CLK_CPU_PLLuse(ENABLE);
   RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
   SystemCoreClockUpdate();

   // Включаем тактирование на всех портах
   RST_CLK_PCLKcmd((RST_CLK_PCLK_PORTA | RST_CLK_PCLK_PORTB | RST_CLK_PCLK_PORTC), ENABLE);
   RST_CLK_PCLKcmd(RST_CLK_PCLK_SSP1, ENABLE);
   RST_CLK_PCLKcmd(RST_CLK_PCLK_UART1, ENABLE);

И собственно тот же UART при 8 \1 * 1 = 8МГц работает на заданной скорости, SystemCoreClock = 8мгц, а вот если к примеру сделать 8 \1 * 2 = 16МГц, то UART скорость уходит (ниже заданной), а SystemCoreClock = 16мгц, более того, работа SPI не изменяется! (т.е. системная частота как была 8мгц, так и осталась!! только расчеты в UART испортились)
Ощущение, что умножение в PLL не работает, а деление на 2 - включается.
GCC, SPL с гитхаба.

_________________
https://adelectronics.ru
Заходи, не стесняйся! ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-ноя-23 09:28 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 201
Откуда: ПКК "Миландр"
Посмотрите схему тактирования в спецификации стр. 109 (13 Сигналы тактовой частоты). В 1986ВЕ4 частоты UART и SPI формируются НЕ от частоты частоты HCLK (которая равна CPU_Clk).

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-ноя-23 12:58 
Не в сети

Зарегистрирован: 2014-авг-11 19:26
Сообщения: 123
Проглядел... мой косяк, в SPL тогда получается есть ошибка с расчетами скорости UART как минимум, ибо берётся значение частоты не HSE, а после PLL, хотя по факту периферия тактируется от HSE.

Глянул, на той же блок схеме можно увидеть, что на MUX для периферии есть вход от PLL:
Вложение:
pll.PNG
pll.PNG [ 71.65 КБ | Просмотров: 340 ]

т.е. таки можно затактировать от pll (ниже так же есть описание CPU_CLOCK с этим селектором) или это ошибка?
-------------
В общем верно - можно и периферию затактировать.
Код:
RST_CLK_PCLKPer1_C1_CLKSelection(0x8);

согласно странице 114 ставим биты 3,2 регистра PER1_CLOCK
а так же в SPL не забываем поменять
Код:
#define RST_CLK_PER1_CLOCK_C1_SEL_Msk                      ((uint32_t)0x0000000f)//0x00000003

_________________
https://adelectronics.ru
Заходи, не стесняйся! ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-ноя-26 13:55 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 201
Откуда: ПКК "Миландр"
Маску в библиотеке менять все-таки не стоит, для PER1_C2 есть своя маска

Код:
#define RST_CLK_PER1_CLOCK_C1_SEL_Msk                      ((uint32_t)0x00000003)
#define RST_CLK_PER1_CLOCK_C2_SEL_Msk                      ((uint32_t)0x0000000C)


Если ошибка в функции, лучше поправить саму функцию.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC
СообщениеДобавлено: 2018-ноя-26 14:31 
Не в сети

Зарегистрирован: 2014-авг-11 19:26
Сообщения: 123
Понял, это для теста быстро опробовал и описал тут же в порыве )

Еще вопрос, а разве нельзя вывести на вывод VR_1V внутреннее опорное напряжение?

в файле MDR1986BE4.h добавил:
Код:
/* MDR_ADCIU_TypeDef structure */
typedef struct {
   __IO uint32_t   CTRL1;                  /*!< */
   __IO uint32_t   ANGAIN;                 /*!< */
   __IO uint32_t   DIGGAIN;                /*!< */
   __IO uint32_t   DMAEN;                  /*!< */
   __IO uint32_t   CTRL2;                  /*!< */
   __IO uint32_t   INTEN;                  /*!< */
   __IO uint32_t   STAT;                   /*!< */
   __IO uint32_t   F_DAT[8];               /*!< */
   __IO uint32_t   RESERVED1;            /* добавлено согласно даташиту для TST*/
   __IO uint32_t   RESERVED2;
   __IO uint32_t   RESERVED3;
   __IO uint32_t   TST;
}MDR_ADCIU_TypeDef;


Пишу в него:
Код:
MDR_ADCIU->TST      = 0x01; // TST2

Для доступа к регистру TST, в нём устанавливаю бит TST2 = 1 и на пине VR_1V ничего не появляется... включено внутреннее опорное, буфер выключен и ацп работает, но вот вывести опорное наружу не получается...
Вложение:
adc.PNG
adc.PNG [ 68.48 КБ | Просмотров: 310 ]

но насколько можно судить из блок-схемы - вроде бы такое возможно. Ревизия 1742, т.е. подходит вроде как.

Еще странность заметил, что если включить Ext Ref - то ничего не меняется как будто, даже в отсутствие внешнего опорного значения с канала ацп аналогичны, как с внутренним, а если к Ext Ref еще и включить буферизацию, то с ацп считываться постоянно будет 0х80_0000 - типа переполнения...
Такой вопрос, можно ли перегреть мк при пайке так,что вроде всё и работает (spi, pll и т.д.), а вот в плане ацп бяка такая? или это просто я что то не так делаю в плане программном?

_________________
https://adelectronics.ru
Заходи, не стесняйся! ;)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 308 ]  На страницу Пред.  1 ... 17, 18, 19, 20, 21  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB