Миландр

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

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




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

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 16
Нашел ошибки в библиотечных файлах 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
Сообщения: 173
Откуда: ПКК "Миландр"
Цитата:
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
Сообщения: 173
Откуда: ПКК "Миландр"
Цитата:
На демоплате перепаяли процессоры 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
Сообщения: 173
Откуда: ПКК "Миландр"
Полагаю, что разработчики библиотеки не рассчитывали, что макросами захочет пользоваться кто-то еще. Иначе сложно объяснить отсутствие скобок. В библиотеке же макросы используются только для проверки значений входных параметров функций и побочных эффектов из-за отсутствия скобок не имеют.

По умолчанию 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
Сообщения: 16
Раз уж файлы *.svd входят в состав SPL и в *.pack для Кейла, то поправьте и их.
В файле MDR1986VE1T.svd в раздел регистров портов добавьте описание регистров SETTX, CLRTX, RDTX. Также исправьте значение параметра device->cpu->nvicPrioBits с 3 на 2 (битов приоритета прерываний в этом контроллере 2, а не 3).


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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 3


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

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