Миландр

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

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 377 сообщений ]  На страницу « 122 23 24 25 26 »
Автор Сообщение
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-09 09:58 
Не в сети

Зарегистрирован: 2018-мар-18 15:49
Сообщения: 267
Организация: StartMilandr.ru
Professor Chaos писал(а): *
StartMilandr писал(а): *
SVD для отображения надо убрать регистры DR блоков SSP, UART - это мешает отладке, потому что Keil их постоянно вычитывает.
Может присвоить им атрибут read-only и оставить?
Вы наверное имели ввиду Write-Only, чтобы из отладчика записать в регистр было можно, но чтобы Кейл сам FIFO не вычитывал.
А так, да, надо пробовать.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-09 18:02 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 344
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
StartMilandr писал(а): *
Вы наверное имели ввиду Write-Only, чтобы из отладчика записать в регистр было можно, но чтобы Кейл сам FIFO не вычитывал.
А так, да, надо пробовать.
Да, именно это.
Описка вышла :D


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-авг-06 11:32 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 344
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
В файлах system_MDRххх.h используется тип uint32_t, однако заголовок stdint.h с его объявлением не подключен. В результате компиляция С-файлов, включающих в себя заголовок system_MDRххх.h будет зависеть от места включения в них этого заголовка. Если сделать его включение первым - будут ошибки.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-авг-14 08:17 
Не в сети
Support

Зарегистрирован: 2017-июл-14 15:02
Сообщения: 72
Организация: АО "ПКК Миландр"
Откуда: АО "ПКК Миландр"
Professor Chaos писал(а): *
В файлах system_MDRххх.h используется тип uint32_t, однако заголовок stdint.h с его объявлением не подключен. В результате компиляция С-файлов, включающих в себя заголовок system_MDRххх.h будет зависеть от места включения в них этого заголовка. Если сделать его включение первым - будут ошибки.
Добрый день!

Спасибо за замечание, внесём исправление в следующей версии SPL.

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


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-авг-17 21:56 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 293
Насчёт SVD, xml и прочего =) Большая просьба к разработчикам по поводу спецификаций микроконтроллеров, нельзя ли сделать таблицы с регистрами в едином стиле (с типами доступа, значениями по умолчанию после сброса), как у STMicroelectronics + полную регистровую карту каждого периферийного блока.
Открыть
Вложение:
[ attachment ]
1.jpg [ 329.52 КБ | 4965 просмотров ]
Вложение:
[ attachment ]
2.jpg [ 326.64 КБ | 4965 просмотров ]
Вложение:
[ attachment ]
3.jpg [ 405.14 КБ | 4965 просмотров ]
Вложение:
[ attachment ]
4.jpg [ 420.47 КБ | 4965 просмотров ]
Вложение:
[ attachment ]
5.jpg [ 376.18 КБ | 4965 просмотров ]
Закрыть
А ещё лучше добавить вместе со спецификациями отдельно эти таблицы в файле Excel.

P.S. Данные таблицы необходимы для совместного использования с CMSIS-SVD XML-схемой https://arm-software.github.io/CMSIS_5/ ... _2_gr.html в программах Oxygen XML Editor или Excel, чтобы получить файл .svd.
Открыть
Вложение:
[ attachment ]
000.jpg [ 316.2 КБ | 4831 просмотр ]
Вложение:
[ attachment ]
555.jpg [ 374.23 КБ | 4831 просмотр ]
Вложение:
[ attachment ]
777.jpg [ 344.67 КБ | 4831 просмотр ]
Вложение:
[ attachment ]
888.jpg [ 292.16 КБ | 4831 просмотр ]
Закрыть

_________________
Hack the Planet!


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

Зарегистрирован: 2018-фев-11 17:46
Сообщения: 57
Организация: ФГБУ «ИПГ»
R Max писал(а): *
Насчёт SVD, xml и прочего =) Большая просьба к разработчикам по поводу спецификаций микроконтроллеров, нельзя ли сделать таблицы с регистрами в едином стиле (с типами доступа, значениями по умолчанию после сброса), как у STMicroelectronics + полную регистровую карту каждого периферийного блока.
Есть такой человек Liviu Ionescu он же https://gnu-mcu-eclipse.github.io/
Так он отказался от поддержки SVD. Там оказались проблемы юридического плана.


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

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 293
Piton писал(а): *
R Max писал(а): *
Насчёт SVD, xml и прочего =) Большая просьба к разработчикам по поводу спецификаций микроконтроллеров, нельзя ли сделать таблицы с регистрами в едином стиле (с типами доступа, значениями по умолчанию после сброса), как у STMicroelectronics + полную регистровую карту каждого периферийного блока.
Есть такой человек Liviu Ionescu он же https://gnu-mcu-eclipse.github.io/
Так он отказался от поддержки SVD. Там оказались проблемы юридического плана.
Какие могут быть проблемы юридического плана у стандарта для текстового файла, разработанного ARM для процессоров ARM, ядра которых ARM продаёт silicon vendor-ам ? Или вопрос про саму утилиту ??

...кстати, как пишут тут https://www.keil.com/pack/doc/CMSIS/SVD ... at_pg.html
Цитата:
The CMSIS-SVD format is based on XML and was influenced by IP-XACT. Due to the much wider scope and complexity of IP-XACT, it was decided to specify a separate format focused and tailored towards the description of the programmer's view of a device.
....если имеется IP-корка конкретного микроконтроллера, наверное среда проектирования этой корки позволяет генерить описание регистров и прочего, можно на крайний случай и утилиту генерации написать (через те же tcl-скрипты)....http://idoka.ru/howto-ipxact-by-using-kactus2/

_________________
Hack the Planet!


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-ноя-18 17:16 
Не в сети

Зарегистрирован: 2016-окт-14 19:39
Сообщения: 93
Организация: АО "РИРВ"
Откуда: СПБ
В MDR1986VE3.h похоже, ошибка
вместо
/* Configuration of the Cortex-M3 Processor and Core Peripherals */
#define __CM1_REV              0x0102   /*!< Cortex-M3 Core Revision                      */
#define __MPU_PRESENT             1     /*!< MPU present or not                           */
#define __NVIC_PRIO_BITS          3     /*!< Number of Bits used for Priority Levels      */
#define __Vendor_SysTickConfig    0     /*!< Set to 1 if different SysTick Config is used */
надо
/* Configuration of the Cortex-M1 Processor and Core Peripherals */
#define __CM1_REV              0x0102   /*!< Cortex-M1 Core Revision                      */
#define __MPU_PRESENT             0     /*!< MPU present or not                           */
#define __NVIC_PRIO_BITS          2     /*!< Number of Bits used for Priority Levels      */
#define __Vendor_SysTickConfig    0     /*!< Set to 1 if different SysTick Config is used */
Влияет на установку приоритетов прерываний


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-ноя-19 13:55 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 448
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
azimuth писал(а): *
В MDR1986VE3.h похоже, ошибка
вместо
/* Configuration of the Cortex-M3 Processor and Core Peripherals */
#define __CM1_REV              0x0102   /*!< Cortex-M3 Core Revision                      */
#define __MPU_PRESENT             1     /*!< MPU present or not                           */
#define __NVIC_PRIO_BITS          3     /*!< Number of Bits used for Priority Levels      */
#define __Vendor_SysTickConfig    0     /*!< Set to 1 if different SysTick Config is used */
надо
/* Configuration of the Cortex-M1 Processor and Core Peripherals */
#define __CM1_REV              0x0102   /*!< Cortex-M1 Core Revision                      */
#define __MPU_PRESENT             0     /*!< MPU present or not                           */
#define __NVIC_PRIO_BITS          2     /*!< Number of Bits used for Priority Levels      */
#define __Vendor_SysTickConfig    0     /*!< Set to 1 if different SysTick Config is used */
Влияет на установку приоритетов прерываний
Здравствуйте!

Большое спасибо за найденную неточность. Ошибка будет исправлена при следующем плановом обновлении пака для IDE Keil.

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


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-ноя-19 19:50 
Не в сети

Зарегистрирован: 2016-окт-14 19:39
Сообщения: 93
Организация: АО "РИРВ"
Откуда: СПБ
Lampadov писал(а): *
Большое спасибо за найденную неточность. Ошибка будет исправлена при следующем плановом обновлении пака для IDE Keil.
Неплохо было бы синхронизировать заголовочные файлы для 1986ВЕ1Т и 1986ВЕ3 в части общей периферии, а то 1986ВЕ3 сильно отстает.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-ноя-23 09:12 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 448
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
azimuth писал(а): *
Lampadov писал(а): *
Большое спасибо за найденную неточность. Ошибка будет исправлена при следующем плановом обновлении пака для IDE Keil.
Неплохо было бы синхронизировать заголовочные файлы для 1986ВЕ1Т и 1986ВЕ3 в части общей периферии, а то 1986ВЕ3 сильно отстает.
Здравствуйте!

Уточните, пожалуйста, в чём именно проявляется отставание микроконтроллера 1986ВЕ3Т от 1986ВЕ1Т по части библиотечных файлов? Пожелание на разработку так или иначе передано, но, вероятнее всего, разделение заголовочных файлов попросту упрощает разработку, поскольку это облегчает внедрение любых исправлений по каким-либо неточностям работы микроконтроллера или его особенностям. Связь двух файлов может выливаться в паразитные зависимости: что будет верно для одного микроконтроллера, может быть крайне противоречиво для другого.

Тем не менее, мы оперативно следим за всеми каналами связи, чтобы вести поддержку паков для сред (не только IDE Keil) в полном объеме.

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


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-ноя-23 17:07 
Не в сети

Зарегистрирован: 2016-окт-14 19:39
Сообщения: 93
Организация: АО "РИРВ"
Откуда: СПБ
Lampadov писал(а): *
Уточните, пожалуйста, в чём именно проявляется отставание микроконтроллера 1986ВЕ3Т от 1986ВЕ1Т по части библиотечных файлов?
Из того, что попадалось, таймеры. MDR1986VE3.h
/*-- TIMER_CH_CNTRL2: Timer Channel Control2 Register --------------*/
/* Bit field positions: */
#define TIMER_CH_CNTRL2_CHSEL1_Pos              0
#define TIMER_CH_CNTRL2_CCR1_EN_Pos             2
#define TIMER_CH_CNTRL2_CCRRLD_Pos              3

/* Bit field masks: */
#define TIMER_CH_CNTRL2_CHSEL1_Msk              ((uint32_t)0x00000003)
#define TIMER_CH_CNTRL2_CCR1_EN                 ((uint32_t)0x00000004)
#define TIMER_CH_CNTRL2_CCRRLD                  ((uint32_t)0x00000008)

/** @} */ /* End of group TIMER_CH_CNTRL2 */
В ВЕ1 дополнительно дефайны для поля CHSEL1
/*-- TIMER_CH_CNTRL2: Timer Channel Control2 Register --------------*/
/* Bit field positions: */
#define TIMER_CH_CNTRL2_CHSEL1_Pos              0
#define TIMER_CH_CNTRL2_CCR1_EN_Pos             2
#define TIMER_CH_CNTRL2_CCRRLD_Pos              3

/* Bit field masks: */
#define TIMER_CH_CNTRL2_CHSEL1_Msk              ((uint32_t)0x00000003)
#define TIMER_CH_CNTRL2_CCR1_EN                 ((uint32_t)0x00000004)
#define TIMER_CH_CNTRL2_CCRRLD                  ((uint32_t)0x00000008)

/* CHSEL1 Modes */
#define TIMER_CH_CNTRL2_CHSEL1_POS_EDGE                   0x00
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE                   0x01
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH1_FROM_CH2      0x02
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH2_FROM_CH3      0x02
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH3_FROM_CH4      0x02
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH4_FROM_CH1      0x02
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH1_FROM_CH3      0x03
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH2_FROM_CH4      0x03
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH3_FROM_CH1      0x03
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH4_FROM_CH2      0x03

/** @} */ /* End of group TIMER_CH_CNTRL2 */
По МКИО. Версии МКИО сравнялись и появились новые фичи. В своем проекте я подправил SPL, возможно, мои дополнения окажутся полезными (старый код не удалял, только закомментировал). Актульно для 6 ревизии ВЕ1Т и 3 ревизии ВЕ3, предыдущие не поддерживаются.
/** @defgroup __VE3_Periph_MIL_STD_1553_Defines Defines
  * @{
  */
/** @defgroup __VE3_Periph_MIL_STD_1553_CONTROL	MIL STD 1553 CONTROL
  * @{
  */ 

/*-- MIL_STD_1553_CONTROL: MIL_STD_1553 Control Register -----*/
/* Bit field positions: */
#define MIL_STD_1553_CONTROL_MR_Pos				0
#define MIL_STD_1553_CONTROL_BCSTART_Pos	1
//#define MIL_STD_1553_CONTROL_BCMODE_Pos	2
//#define MIL_STD_1553_CONTROL_RTMODE_Pos	3

#define MIL_STD_1553_CONTROL_MODE_Pos			2

#define MIL_STD_1553_CONTROL_TRA_Pos			4
#define MIL_STD_1553_CONTROL_TRB_Pos			5
#define MIL_STD_1553_CONTROL_RTA_Pos			6
#define MIL_STD_1553_CONTROL_DIV_Pos			11
#define MIL_STD_1553_CONTROL_RERR_Pos			18

#define MIL_STD_1553_CONTROL_INVTR_Pos		19

//#define MIL_STD_1553_CONTROL_ENFILTER_Pos	20
#define MIL_STD_1553_CONTROL_EN_FLT_Pos		20

//#define MIL_STD_1553_CONTROL_AUTOTUNE_Pos	21
#define MIL_STD_1553_CONTROL_DIV7_Pos			21
#define MIL_STD_1553_CONTROL_INPINV_Pos		22
#define MIL_STD_1553_CONTROL_RT_HW_Pos		23


/* Bit field masks: */
#define MIL_STD_1553_CONTROL_MR					((uint32_t)0x00000001)
#define MIL_STD_1553_CONTROL_BCSTART		((uint32_t)0x00000002)
#define MIL_STD_1553_CONTROL_BCMODE			((uint32_t)0x00000004)
#define MIL_STD_1553_CONTROL_RTMODE			((uint32_t)0x00000008)

#define MIL_STD_1553_CONTROL_MONMODE		((uint32_t)0x0000000C)
#define MIL_STD_1553_CONTROL_MODE_Msk		((uint32_t)0x0000000C)

#define MIL_STD_1553_CONTROL_TRA				((uint32_t)0x00000010)
#define MIL_STD_1553_CONTROL_TRB				((uint32_t)0x00000020)
#define MIL_STD_1553_CONTROL_RTA_Msk		((uint32_t)0x000007C0)
#define MIL_STD_1553_CONTROL_DIV_Msk		((uint32_t)0x0003F800)
#define MIL_STD_1553_CONTROL_RERR				((uint32_t)0x00040000)

#define MIL_STD_1553_CONTROL_INVTR			((uint32_t)0x00080000)
//#define MIL_STD_1553_CONTROL_ENFILTER		((uint32_t)0x00100000)
#define MIL_STD_1553_CONTROL_EN_FLT			((uint32_t)0x00100000)
//#define MIL_STD_1553_CONTROL_AUTOTUNE		((uint32_t)0x00200000)
#define MIL_STD_1553_CONTROL_DIV7				((uint32_t)0x00200000)

#define MIL_STD_1553_CONTROL_INPINV			((uint32_t)0x00400000)
#define MIL_STD_1553_CONTROL_RT_HW			((uint32_t)0x00800000)


/** @} */ /* End of group MIL_STD_1553_CONTROL */

/** @defgroup __VE3_Periph_MIL_STD_1553_STATUS	MIL STD 1553 STATUS
  * @{
  */ 

/*-- MIL_STD_1553_STATUS: MIL_STD_1553 Status Register -----*/
/* Bit field positions: */
#define MIL_STD_1553_STATUS_IDLE_Pos					0
#define MIL_STD_1553_STATUS_RFLAGN_Pos				1
#define MIL_STD_1553_STATUS_VALMESS_Pos				2
#define MIL_STD_1553_STATUS_ERR_Pos						3
#define MIL_STD_1553_STATUS_RCVA_Pos					4
#define MIL_STD_1553_STATUS_RCVB_Pos					5

#define MIL_STD_1553_STATUS_RFLAGN_STICK_Pos	6
#define MIL_STD_1553_STATUS_VALMESS_STICK_Pos	7
#define MIL_STD_1553_STATUS_ERR_STICK_Pos			8
#define MIL_STD_1553_STATUS_RCVA_STICK_Pos		9
#define MIL_STD_1553_STATUS_RCVB_STICK_Pos		10

/* Bit field masks: */
#define MIL_STD_1553_STATUS_IDLE						((uint32_t)0x00000001)
#define MIL_STD_1553_STATUS_RFLAGN					((uint32_t)0x00000002)
#define MIL_STD_1553_STATUS_VALMESS					((uint32_t)0x00000004)
#define MIL_STD_1553_STATUS_ERR							((uint32_t)0x00000008)
#define MIL_STD_1553_STATUS_RCVA						((uint32_t)0x00000010)
#define MIL_STD_1553_STATUS_RCVB						((uint32_t)0x00000020)

#define MIL_STD_1553_STATUS_RFLAGN_STICK		((uint32_t)0x00000040)
#define MIL_STD_1553_STATUS_VALMESS_STICK		((uint32_t)0x00000080)
#define MIL_STD_1553_STATUS_ERR_STICK				((uint32_t)0x00000100)
#define MIL_STD_1553_STATUS_RCVA_STICK			((uint32_t)0x00000200)
#define MIL_STD_1553_STATUS_RCVB_STICK			((uint32_t)0x00000400)

/** @} */ /* End of group MIL_STD_1553_STATUS */

/** @defgroup __VE3_Periph_MIL_STD_1553_ERROR	MIL STD 1553 ERROR
  * @{
  */ 

/*-- MIL_STD_1553_ERROR: MIL_STD_1553 ERROR Register -----*/
/* Bit field positions: */
#define MIL_STD_1553_ERROR_NORCV_Pos		0
#define MIL_STD_1553_ERROR_MANERR_Pos		1

#define MIL_STD_1553_ERROR_SYNCERR_Pos	2
#define MIL_STD_1553_ERROR_DSYCERR_Pos	2

#define MIL_STD_1553_ERROR_SEQERR_Pos		3
#define MIL_STD_1553_ERROR_CSYCERR_Pos	3

#define MIL_STD_1553_ERROR_GAPERR_Pos		4
#define MIL_STD_1553_ERROR_CONERR_Pos		5
#define MIL_STD_1553_ERROR_PROERR_Pos		6

/* Bit field masks: */
#define MIL_STD_1553_ERROR_NORCV				((uint32_t)0x00000001)
#define MIL_STD_1553_ERROR_MANERR				((uint32_t)0x00000002)

#define MIL_STD_1553_ERROR_SYNCERR			((uint32_t)0x00000004)
#define MIL_STD_1553_ERROR_DSYCERR			((uint32_t)0x00000004)

#define MIL_STD_1553_ERROR_SEQERR				((uint32_t)0x00000008)
#define MIL_STD_1553_ERROR_CSYCERR			((uint32_t)0x00000008)

#define MIL_STD_1553_ERROR_GAPERR				((uint32_t)0x00000010)
#define MIL_STD_1553_ERROR_CONERR				((uint32_t)0x00000020)
#define MIL_STD_1553_ERROR_PROERR				((uint32_t)0x00000040)

/** @} */ /* End of group MIL_STD_1553_ERROR */
/**
  * @brief	MIL_STD_1553 Init Structure definition
  */

typedef struct {
	uint32_t MIL_STD_1553_Mode; 					/*!< This member configures the MIL_STD_1553 mode.
										 	 	 	 	 This parameter is one of @ref MIL_STD_1553_Mode values. */
	/*uint32_t*/ FunctionalState MIL_STD_1553_RERR;						/*!< This member configures the resetting of errors in TD mode.
	 	 	 	 	 	 	 	 	     	 	 	 	 This parameter can be: ENABLE or DISABLE. */
	uint32_t MIL_STD_1553_DIV;						/*!< This member configures the MIL_STD_1553 clock divider.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter is number from 0 to 127.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 If MAN_CLK not a multiple of 8 then DIV[6:3]=(MAN_CLK/8)+1, DIV[2:0]=0,
	 	 	 	 	 	 	 	 	 	 	 	 	 	 but the stability of reception is not guaranteed.*/
	uint32_t MIL_STD_1553_RTA; 						/*!< This member configures the address of the terminal device.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter is value from 0 to 0x1E */
	/*uint32_t*/ FunctionalState MIL_STD_1553_TRB;						/*!< This member configures the Transmission block the backup channel.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter can be: ENABLE or DISABLE. */
	/*uint32_t*/ FunctionalState MIL_STD_1553_TRA;						/*!< This member configures the Transmission block the main channel.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter can be: ENABLE or DISABLE. */
//#if defined (USE_MDR1986VE1T)
	/**
	 * @note This member may be used only for MDR1986VE1T microcontroller the third revision.
	 */
	FunctionalState	MIL_STD_1553_Inversion_Signals;		/*!< This member enables or disables the inversion signals
														 	 PRD_PRMA, PRD_PRMB, PRD_PRMC, PRD_PRMD.
														 	 This parameter can be: ENABLE or DISABLE. */
	FunctionalState MIL_STD_1553_Filtration_Flow;		/*!< This option enables or disables the filtering flow NRZ, in the case
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 of drivers with nekkorektno duty cycle and pulse width of NRZ code.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter can be: ENABLE or DISABLE. */
	/*FunctionalState MIL_STD_1553_Automatic_Adjustment;*/	/*!< This member enables or disables the automatic adjustment of the mid bit intervals.
														 	 This parameter can be: ENABLE or DISABLE. */
	FunctionalState	MIL_STD_1553_Inversion_Receiver; /* Бит инверсии входов приёмника PRMx+ и PRMx- (с ревизии 3)
						ENABLE – инверсия разрешена
						DISABLE – инверсия запрещена
						Вход PRMx+ инвертируется и коммутируется на отрицательный вход декодера манчестерского кода.
						Вход PRMx- инвертируется и коммутируется на положительны вход декодера манчестерского кода.
						Применение этого бита актуально для приёмопередатчиков с принудительной установкой выхода приемника в состояние логическая «1», например, 5559ИН74Т (HI1574)*/
	FunctionalState	MIL_STD_1553_HW_Support; /* Бит аппаратной поддержки ГОСТ 51765-2001 для режима ОУ (с ревизии 3)
						ENABLE – аппаратная поддержка разрешена
						DISABLE – аппаратная поддержка запрещена
						При установке этого бита достаточно программной реализации циклического подадреса,
						установки и сброса признаков абонент занят, неисправность абонента, неисправность ОУ,
						запрос на обслуживание, а также задание адреса ОУ и бита паритета посредством внешнего соединения */

//#endif /* #if defined (USE_MDR1986VE1T) */
} MIL_STD_1553_InitTypeDef;
/**
  * @version	0.1
  * @date	27.10.2020
  * @brief	Initializes the MIL_STD_1553x peripheral according to the specified
  *         sparameters in the MIL_STD_1553_InitStruct.
  * @param	MIL_STD_1553x: Select the MIL_STD_1553 peripheral.
  *         This parameter can be one of the following values:
  *         MIL_STD_15531, MIL_STD_15532.
  * @param	MIL_STD_1553_InitStruct: pointer to a MIL_STD_1553_InitTypeDef structure
  *         that contains the configuration information for the specified MIL_STD_1553 peripheral.
  * @retval None
  */
void MIL_STD_1553_Init(MDR_MIL_STD_1553_TypeDef * MIL_STD_1553x, MIL_STD_1553_InitTypeDef * MIL_STD_1553_InitStruct)
{
	uint32_t tmpreg;

	/* Check the parameters */
	assert_param(IS_MIL_STD_1553_ALL_PERIPH(MIL_STD_1553x));
	assert_param(IS_MIL_STD_1553_MODE(MIL_STD_1553_InitStruct->MIL_STD_1553_Mode));
	assert_param(IS_MIL_STD_1553_DEVIDER(MIL_STD_1553_InitStruct->MIL_STD_1553_DIV));
	assert_param(IS_MIL_STD_1553_RTA(MIL_STD_1553_InitStruct->MIL_STD_1553_RTA));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_RERR));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_TRA));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_TRB));
//#if defined (USE_MDR1986VE1T)
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Signals));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_Filtration_Flow));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_Automatic_Adjustment));
//#endif /* #if defined (USE_MDR1986VE1T) */

	/* MIL_STD_1553x CONTROL Configuration */
/*
	tmpreg = (MIL_STD_1553_InitStruct->MIL_STD_1553_RERR << MIL_STD_1553_CONTROL_RERR_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_Mode << MIL_STD_1553_CONTROL_BCMODE_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_DIV << MIL_STD_1553_CONTROL_DIV_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_RTA << MIL_STD_1553_CONTROL_RTA_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_TRA << MIL_STD_1553_CONTROL_TRA_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_TRB << MIL_STD_1553_CONTROL_TRB_Pos);
*/
	tmpreg = (MIL_STD_1553_InitStruct->MIL_STD_1553_Mode << MIL_STD_1553_CONTROL_MODE_Pos) & MIL_STD_1553_CONTROL_MODE_Msk;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_RERR != DISABLE)? MIL_STD_1553_CONTROL_RERR: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_TRA != DISABLE)? MIL_STD_1553_CONTROL_TRA: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_TRB != DISABLE)? MIL_STD_1553_CONTROL_TRB: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_DIV << MIL_STD_1553_CONTROL_DIV_Pos) & MIL_STD_1553_CONTROL_DIV_Msk;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_DIV << (MIL_STD_1553_CONTROL_DIV7_Pos - 7)) & MIL_STD_1553_CONTROL_DIV7;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_RTA << MIL_STD_1553_CONTROL_RTA_Pos) & MIL_STD_1553_CONTROL_RTA_Msk;

//#if defined (USE_MDR1986VE1T)
/*
	tmpreg |= MIL_STD_1553_InitStruct->MIL_STD_1553_Automatic_Adjustment << MIL_STD_1553_CONTROL_AUTOTUNE_Pos
		   |  MIL_STD_1553_InitStruct->MIL_STD_1553_Filtration_Flow << MIL_STD_1553_CONTROL_ENFILTER_Pos
		   |  MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Signals << MIL_STD_1553_CONTROL_INVTR_Pos;
*/
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Signals != DISABLE)? MIL_STD_1553_CONTROL_INVTR: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_Filtration_Flow != DISABLE)? MIL_STD_1553_CONTROL_EN_FLT: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Receiver != DISABLE)? MIL_STD_1553_CONTROL_INPINV: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_HW_Support != DISABLE)? MIL_STD_1553_CONTROL_RT_HW: 0;
//#endif /* #if defined (USE_MDR1986VE1T) */

	tmpreg |= MIL_STD_1553_CONTROL_MR;

	MIL_STD_1553x->CONTROL = tmpreg;
	
	return;
}

/**
  * @version	0.1
  * @date	27.10.2020
  * @brief	Fills each MIL_STD_1553_InitStruct member with its default value.
  * @param	MIL_STD_1553_InitStruct: pointer to a MIL_STD_1553_InitTypeDef structure
  *         that is to be initialized.
  * @retval	None
  */
void MIL_STD_1553xStructInit(MIL_STD_1553_InitTypeDef * MIL_STD_1553_InitStruct)
{
	/* MIL_STD_1553_InitStruct members default value */
	/* Initialize the MIL_STD_1553_DIV member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_DIV = 0;
	/* Initialize the MIL_STD_1553_Mode member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_Mode = MIL_STD_1553_ModeTerminal;
	/* Initialize the MIL_STD_1553_RERR member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_RERR = DISABLE;
	/* Initialize the MIL_STD_1553_RTA member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_RTA = 0;
	/* Initialize the MIL_STD_1553_TRA member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_TRA = DISABLE;
	/* Initialize the MIL_STD_1553_TRB member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_TRB = DISABLE;
//#if defined (USE_MDR1986VE1T)
	/* Initialize the MIL_STD_1553_Inversion_Signals member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Signals = DISABLE;
	/* Initialize the MIL_STD_1553_Filtration_Flow member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_Filtration_Flow = DISABLE;
	
	/* Initialize the MIL_STD_1553_Automatic_Adjustment member */
	//MIL_STD_1553_InitStruct->MIL_STD_1553_Automatic_Adjustment = DISABLE;
	MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Receiver =  DISABLE;
	MIL_STD_1553_InitStruct->MIL_STD_1553_HW_Support =  DISABLE;
//#endif /* #if defined (USE_MDR1986VE1T) */

	return;
}
В общем-то, у себя еще сделал "обертки" простых операций с регистрами inline, по подобию библиотек LL известного заграничного конкурента.
Lampadov писал(а): *
Тем не менее, мы оперативно следим за всеми каналами связи, чтобы вести поддержку паков для сред (не только IDE Keil) в полном объеме.
Так претензии нет :)
Lampadov писал(а): *
разделение заголовочных файлов попросту упрощает разработку
Согласен. Я говорил лишь про актуальность и совместимость (где она возможна без особых проблем).


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-дек-02 15:37 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 448
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
Здравствуйте!

До недавнего времени корректно использовать RTOS2 от Keil на микроконтроллерах 1986ВЕ1Т и 1986ВЕ3Т из-за особенности работы системного таймера на частотах работы микроконтроллера выше 25 МГц не представлялось возможным - система по умолчанию привязывает отсчёты к системному таймеру и перевод счёта на таймер периферийный, в отличии от легкой настройки во FreeRTOS, доступен только с применением отдельного инструментария OS Tick API. Описание работы с этим инструментарием осуществил в общей статье информационного портала отдела технической поддержки компании Миландр: https://support.milandr.ru/base/primene ... how/24210/

Может быть полезно разработчикам встраиваемых систем не только на базе микроконтроллеров 1Т/3Т, но и на базе контроллеров с высокопроизводительными ядрами, например, Cortex-A, где системного таймера попросту нет, и требуется переопределение.

Спасибо.

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


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-дек-02 17:15 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 448
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
azimuth писал(а): *
Lampadov писал(а): *
Уточните, пожалуйста, в чём именно проявляется отставание микроконтроллера 1986ВЕ3Т от 1986ВЕ1Т по части библиотечных файлов?
Из того, что попадалось, таймеры. MDR1986VE3.h
/*-- TIMER_CH_CNTRL2: Timer Channel Control2 Register --------------*/
/* Bit field positions: */
#define TIMER_CH_CNTRL2_CHSEL1_Pos              0
#define TIMER_CH_CNTRL2_CCR1_EN_Pos             2
#define TIMER_CH_CNTRL2_CCRRLD_Pos              3

/* Bit field masks: */
#define TIMER_CH_CNTRL2_CHSEL1_Msk              ((uint32_t)0x00000003)
#define TIMER_CH_CNTRL2_CCR1_EN                 ((uint32_t)0x00000004)
#define TIMER_CH_CNTRL2_CCRRLD                  ((uint32_t)0x00000008)

/** @} */ /* End of group TIMER_CH_CNTRL2 */
В ВЕ1 дополнительно дефайны для поля CHSEL1
/*-- TIMER_CH_CNTRL2: Timer Channel Control2 Register --------------*/
/* Bit field positions: */
#define TIMER_CH_CNTRL2_CHSEL1_Pos              0
#define TIMER_CH_CNTRL2_CCR1_EN_Pos             2
#define TIMER_CH_CNTRL2_CCRRLD_Pos              3

/* Bit field masks: */
#define TIMER_CH_CNTRL2_CHSEL1_Msk              ((uint32_t)0x00000003)
#define TIMER_CH_CNTRL2_CCR1_EN                 ((uint32_t)0x00000004)
#define TIMER_CH_CNTRL2_CCRRLD                  ((uint32_t)0x00000008)

/* CHSEL1 Modes */
#define TIMER_CH_CNTRL2_CHSEL1_POS_EDGE                   0x00
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE                   0x01
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH1_FROM_CH2      0x02
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH2_FROM_CH3      0x02
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH3_FROM_CH4      0x02
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH4_FROM_CH1      0x02
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH1_FROM_CH3      0x03
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH2_FROM_CH4      0x03
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH3_FROM_CH1      0x03
#define TIMER_CH_CNTRL2_CHSEL1_NEG_EDGE_CH4_FROM_CH2      0x03

/** @} */ /* End of group TIMER_CH_CNTRL2 */
По МКИО. Версии МКИО сравнялись и появились новые фичи. В своем проекте я подправил SPL, возможно, мои дополнения окажутся полезными (старый код не удалял, только закомментировал). Актульно для 6 ревизии ВЕ1Т и 3 ревизии ВЕ3, предыдущие не поддерживаются.
/** @defgroup __VE3_Periph_MIL_STD_1553_Defines Defines
  * @{
  */
/** @defgroup __VE3_Periph_MIL_STD_1553_CONTROL	MIL STD 1553 CONTROL
  * @{
  */ 

/*-- MIL_STD_1553_CONTROL: MIL_STD_1553 Control Register -----*/
/* Bit field positions: */
#define MIL_STD_1553_CONTROL_MR_Pos				0
#define MIL_STD_1553_CONTROL_BCSTART_Pos	1
//#define MIL_STD_1553_CONTROL_BCMODE_Pos	2
//#define MIL_STD_1553_CONTROL_RTMODE_Pos	3

#define MIL_STD_1553_CONTROL_MODE_Pos			2

#define MIL_STD_1553_CONTROL_TRA_Pos			4
#define MIL_STD_1553_CONTROL_TRB_Pos			5
#define MIL_STD_1553_CONTROL_RTA_Pos			6
#define MIL_STD_1553_CONTROL_DIV_Pos			11
#define MIL_STD_1553_CONTROL_RERR_Pos			18

#define MIL_STD_1553_CONTROL_INVTR_Pos		19

//#define MIL_STD_1553_CONTROL_ENFILTER_Pos	20
#define MIL_STD_1553_CONTROL_EN_FLT_Pos		20

//#define MIL_STD_1553_CONTROL_AUTOTUNE_Pos	21
#define MIL_STD_1553_CONTROL_DIV7_Pos			21
#define MIL_STD_1553_CONTROL_INPINV_Pos		22
#define MIL_STD_1553_CONTROL_RT_HW_Pos		23


/* Bit field masks: */
#define MIL_STD_1553_CONTROL_MR					((uint32_t)0x00000001)
#define MIL_STD_1553_CONTROL_BCSTART		((uint32_t)0x00000002)
#define MIL_STD_1553_CONTROL_BCMODE			((uint32_t)0x00000004)
#define MIL_STD_1553_CONTROL_RTMODE			((uint32_t)0x00000008)

#define MIL_STD_1553_CONTROL_MONMODE		((uint32_t)0x0000000C)
#define MIL_STD_1553_CONTROL_MODE_Msk		((uint32_t)0x0000000C)

#define MIL_STD_1553_CONTROL_TRA				((uint32_t)0x00000010)
#define MIL_STD_1553_CONTROL_TRB				((uint32_t)0x00000020)
#define MIL_STD_1553_CONTROL_RTA_Msk		((uint32_t)0x000007C0)
#define MIL_STD_1553_CONTROL_DIV_Msk		((uint32_t)0x0003F800)
#define MIL_STD_1553_CONTROL_RERR				((uint32_t)0x00040000)

#define MIL_STD_1553_CONTROL_INVTR			((uint32_t)0x00080000)
//#define MIL_STD_1553_CONTROL_ENFILTER		((uint32_t)0x00100000)
#define MIL_STD_1553_CONTROL_EN_FLT			((uint32_t)0x00100000)
//#define MIL_STD_1553_CONTROL_AUTOTUNE		((uint32_t)0x00200000)
#define MIL_STD_1553_CONTROL_DIV7				((uint32_t)0x00200000)

#define MIL_STD_1553_CONTROL_INPINV			((uint32_t)0x00400000)
#define MIL_STD_1553_CONTROL_RT_HW			((uint32_t)0x00800000)


/** @} */ /* End of group MIL_STD_1553_CONTROL */

/** @defgroup __VE3_Periph_MIL_STD_1553_STATUS	MIL STD 1553 STATUS
  * @{
  */ 

/*-- MIL_STD_1553_STATUS: MIL_STD_1553 Status Register -----*/
/* Bit field positions: */
#define MIL_STD_1553_STATUS_IDLE_Pos					0
#define MIL_STD_1553_STATUS_RFLAGN_Pos				1
#define MIL_STD_1553_STATUS_VALMESS_Pos				2
#define MIL_STD_1553_STATUS_ERR_Pos						3
#define MIL_STD_1553_STATUS_RCVA_Pos					4
#define MIL_STD_1553_STATUS_RCVB_Pos					5

#define MIL_STD_1553_STATUS_RFLAGN_STICK_Pos	6
#define MIL_STD_1553_STATUS_VALMESS_STICK_Pos	7
#define MIL_STD_1553_STATUS_ERR_STICK_Pos			8
#define MIL_STD_1553_STATUS_RCVA_STICK_Pos		9
#define MIL_STD_1553_STATUS_RCVB_STICK_Pos		10

/* Bit field masks: */
#define MIL_STD_1553_STATUS_IDLE						((uint32_t)0x00000001)
#define MIL_STD_1553_STATUS_RFLAGN					((uint32_t)0x00000002)
#define MIL_STD_1553_STATUS_VALMESS					((uint32_t)0x00000004)
#define MIL_STD_1553_STATUS_ERR							((uint32_t)0x00000008)
#define MIL_STD_1553_STATUS_RCVA						((uint32_t)0x00000010)
#define MIL_STD_1553_STATUS_RCVB						((uint32_t)0x00000020)

#define MIL_STD_1553_STATUS_RFLAGN_STICK		((uint32_t)0x00000040)
#define MIL_STD_1553_STATUS_VALMESS_STICK		((uint32_t)0x00000080)
#define MIL_STD_1553_STATUS_ERR_STICK				((uint32_t)0x00000100)
#define MIL_STD_1553_STATUS_RCVA_STICK			((uint32_t)0x00000200)
#define MIL_STD_1553_STATUS_RCVB_STICK			((uint32_t)0x00000400)

/** @} */ /* End of group MIL_STD_1553_STATUS */

/** @defgroup __VE3_Periph_MIL_STD_1553_ERROR	MIL STD 1553 ERROR
  * @{
  */ 

/*-- MIL_STD_1553_ERROR: MIL_STD_1553 ERROR Register -----*/
/* Bit field positions: */
#define MIL_STD_1553_ERROR_NORCV_Pos		0
#define MIL_STD_1553_ERROR_MANERR_Pos		1

#define MIL_STD_1553_ERROR_SYNCERR_Pos	2
#define MIL_STD_1553_ERROR_DSYCERR_Pos	2

#define MIL_STD_1553_ERROR_SEQERR_Pos		3
#define MIL_STD_1553_ERROR_CSYCERR_Pos	3

#define MIL_STD_1553_ERROR_GAPERR_Pos		4
#define MIL_STD_1553_ERROR_CONERR_Pos		5
#define MIL_STD_1553_ERROR_PROERR_Pos		6

/* Bit field masks: */
#define MIL_STD_1553_ERROR_NORCV				((uint32_t)0x00000001)
#define MIL_STD_1553_ERROR_MANERR				((uint32_t)0x00000002)

#define MIL_STD_1553_ERROR_SYNCERR			((uint32_t)0x00000004)
#define MIL_STD_1553_ERROR_DSYCERR			((uint32_t)0x00000004)

#define MIL_STD_1553_ERROR_SEQERR				((uint32_t)0x00000008)
#define MIL_STD_1553_ERROR_CSYCERR			((uint32_t)0x00000008)

#define MIL_STD_1553_ERROR_GAPERR				((uint32_t)0x00000010)
#define MIL_STD_1553_ERROR_CONERR				((uint32_t)0x00000020)
#define MIL_STD_1553_ERROR_PROERR				((uint32_t)0x00000040)

/** @} */ /* End of group MIL_STD_1553_ERROR */
/**
  * @brief	MIL_STD_1553 Init Structure definition
  */

typedef struct {
	uint32_t MIL_STD_1553_Mode; 					/*!< This member configures the MIL_STD_1553 mode.
										 	 	 	 	 This parameter is one of @ref MIL_STD_1553_Mode values. */
	/*uint32_t*/ FunctionalState MIL_STD_1553_RERR;						/*!< This member configures the resetting of errors in TD mode.
	 	 	 	 	 	 	 	 	     	 	 	 	 This parameter can be: ENABLE or DISABLE. */
	uint32_t MIL_STD_1553_DIV;						/*!< This member configures the MIL_STD_1553 clock divider.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter is number from 0 to 127.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 If MAN_CLK not a multiple of 8 then DIV[6:3]=(MAN_CLK/8)+1, DIV[2:0]=0,
	 	 	 	 	 	 	 	 	 	 	 	 	 	 but the stability of reception is not guaranteed.*/
	uint32_t MIL_STD_1553_RTA; 						/*!< This member configures the address of the terminal device.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter is value from 0 to 0x1E */
	/*uint32_t*/ FunctionalState MIL_STD_1553_TRB;						/*!< This member configures the Transmission block the backup channel.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter can be: ENABLE or DISABLE. */
	/*uint32_t*/ FunctionalState MIL_STD_1553_TRA;						/*!< This member configures the Transmission block the main channel.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter can be: ENABLE or DISABLE. */
//#if defined (USE_MDR1986VE1T)
	/**
	 * @note This member may be used only for MDR1986VE1T microcontroller the third revision.
	 */
	FunctionalState	MIL_STD_1553_Inversion_Signals;		/*!< This member enables or disables the inversion signals
														 	 PRD_PRMA, PRD_PRMB, PRD_PRMC, PRD_PRMD.
														 	 This parameter can be: ENABLE or DISABLE. */
	FunctionalState MIL_STD_1553_Filtration_Flow;		/*!< This option enables or disables the filtering flow NRZ, in the case
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 of drivers with nekkorektno duty cycle and pulse width of NRZ code.
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 This parameter can be: ENABLE or DISABLE. */
	/*FunctionalState MIL_STD_1553_Automatic_Adjustment;*/	/*!< This member enables or disables the automatic adjustment of the mid bit intervals.
														 	 This parameter can be: ENABLE or DISABLE. */
	FunctionalState	MIL_STD_1553_Inversion_Receiver; /* Бит инверсии входов приёмника PRMx+ и PRMx- (с ревизии 3)
						ENABLE – инверсия разрешена
						DISABLE – инверсия запрещена
						Вход PRMx+ инвертируется и коммутируется на отрицательный вход декодера манчестерского кода.
						Вход PRMx- инвертируется и коммутируется на положительны вход декодера манчестерского кода.
						Применение этого бита актуально для приёмопередатчиков с принудительной установкой выхода приемника в состояние логическая «1», например, 5559ИН74Т (HI1574)*/
	FunctionalState	MIL_STD_1553_HW_Support; /* Бит аппаратной поддержки ГОСТ 51765-2001 для режима ОУ (с ревизии 3)
						ENABLE – аппаратная поддержка разрешена
						DISABLE – аппаратная поддержка запрещена
						При установке этого бита достаточно программной реализации циклического подадреса,
						установки и сброса признаков абонент занят, неисправность абонента, неисправность ОУ,
						запрос на обслуживание, а также задание адреса ОУ и бита паритета посредством внешнего соединения */

//#endif /* #if defined (USE_MDR1986VE1T) */
} MIL_STD_1553_InitTypeDef;
/**
  * @version	0.1
  * @date	27.10.2020
  * @brief	Initializes the MIL_STD_1553x peripheral according to the specified
  *         sparameters in the MIL_STD_1553_InitStruct.
  * @param	MIL_STD_1553x: Select the MIL_STD_1553 peripheral.
  *         This parameter can be one of the following values:
  *         MIL_STD_15531, MIL_STD_15532.
  * @param	MIL_STD_1553_InitStruct: pointer to a MIL_STD_1553_InitTypeDef structure
  *         that contains the configuration information for the specified MIL_STD_1553 peripheral.
  * @retval None
  */
void MIL_STD_1553_Init(MDR_MIL_STD_1553_TypeDef * MIL_STD_1553x, MIL_STD_1553_InitTypeDef * MIL_STD_1553_InitStruct)
{
	uint32_t tmpreg;

	/* Check the parameters */
	assert_param(IS_MIL_STD_1553_ALL_PERIPH(MIL_STD_1553x));
	assert_param(IS_MIL_STD_1553_MODE(MIL_STD_1553_InitStruct->MIL_STD_1553_Mode));
	assert_param(IS_MIL_STD_1553_DEVIDER(MIL_STD_1553_InitStruct->MIL_STD_1553_DIV));
	assert_param(IS_MIL_STD_1553_RTA(MIL_STD_1553_InitStruct->MIL_STD_1553_RTA));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_RERR));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_TRA));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_TRB));
//#if defined (USE_MDR1986VE1T)
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Signals));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_Filtration_Flow));
	assert_param(IS_FUNCTIONAL_STATE(MIL_STD_1553_InitStruct->MIL_STD_1553_Automatic_Adjustment));
//#endif /* #if defined (USE_MDR1986VE1T) */

	/* MIL_STD_1553x CONTROL Configuration */
/*
	tmpreg = (MIL_STD_1553_InitStruct->MIL_STD_1553_RERR << MIL_STD_1553_CONTROL_RERR_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_Mode << MIL_STD_1553_CONTROL_BCMODE_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_DIV << MIL_STD_1553_CONTROL_DIV_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_RTA << MIL_STD_1553_CONTROL_RTA_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_TRA << MIL_STD_1553_CONTROL_TRA_Pos)
		   | (MIL_STD_1553_InitStruct->MIL_STD_1553_TRB << MIL_STD_1553_CONTROL_TRB_Pos);
*/
	tmpreg = (MIL_STD_1553_InitStruct->MIL_STD_1553_Mode << MIL_STD_1553_CONTROL_MODE_Pos) & MIL_STD_1553_CONTROL_MODE_Msk;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_RERR != DISABLE)? MIL_STD_1553_CONTROL_RERR: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_TRA != DISABLE)? MIL_STD_1553_CONTROL_TRA: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_TRB != DISABLE)? MIL_STD_1553_CONTROL_TRB: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_DIV << MIL_STD_1553_CONTROL_DIV_Pos) & MIL_STD_1553_CONTROL_DIV_Msk;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_DIV << (MIL_STD_1553_CONTROL_DIV7_Pos - 7)) & MIL_STD_1553_CONTROL_DIV7;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_RTA << MIL_STD_1553_CONTROL_RTA_Pos) & MIL_STD_1553_CONTROL_RTA_Msk;

//#if defined (USE_MDR1986VE1T)
/*
	tmpreg |= MIL_STD_1553_InitStruct->MIL_STD_1553_Automatic_Adjustment << MIL_STD_1553_CONTROL_AUTOTUNE_Pos
		   |  MIL_STD_1553_InitStruct->MIL_STD_1553_Filtration_Flow << MIL_STD_1553_CONTROL_ENFILTER_Pos
		   |  MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Signals << MIL_STD_1553_CONTROL_INVTR_Pos;
*/
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Signals != DISABLE)? MIL_STD_1553_CONTROL_INVTR: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_Filtration_Flow != DISABLE)? MIL_STD_1553_CONTROL_EN_FLT: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Receiver != DISABLE)? MIL_STD_1553_CONTROL_INPINV: 0;
	tmpreg |= (MIL_STD_1553_InitStruct->MIL_STD_1553_HW_Support != DISABLE)? MIL_STD_1553_CONTROL_RT_HW: 0;
//#endif /* #if defined (USE_MDR1986VE1T) */

	tmpreg |= MIL_STD_1553_CONTROL_MR;

	MIL_STD_1553x->CONTROL = tmpreg;
	
	return;
}

/**
  * @version	0.1
  * @date	27.10.2020
  * @brief	Fills each MIL_STD_1553_InitStruct member with its default value.
  * @param	MIL_STD_1553_InitStruct: pointer to a MIL_STD_1553_InitTypeDef structure
  *         that is to be initialized.
  * @retval	None
  */
void MIL_STD_1553xStructInit(MIL_STD_1553_InitTypeDef * MIL_STD_1553_InitStruct)
{
	/* MIL_STD_1553_InitStruct members default value */
	/* Initialize the MIL_STD_1553_DIV member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_DIV = 0;
	/* Initialize the MIL_STD_1553_Mode member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_Mode = MIL_STD_1553_ModeTerminal;
	/* Initialize the MIL_STD_1553_RERR member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_RERR = DISABLE;
	/* Initialize the MIL_STD_1553_RTA member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_RTA = 0;
	/* Initialize the MIL_STD_1553_TRA member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_TRA = DISABLE;
	/* Initialize the MIL_STD_1553_TRB member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_TRB = DISABLE;
//#if defined (USE_MDR1986VE1T)
	/* Initialize the MIL_STD_1553_Inversion_Signals member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Signals = DISABLE;
	/* Initialize the MIL_STD_1553_Filtration_Flow member */
	MIL_STD_1553_InitStruct->MIL_STD_1553_Filtration_Flow = DISABLE;
	
	/* Initialize the MIL_STD_1553_Automatic_Adjustment member */
	//MIL_STD_1553_InitStruct->MIL_STD_1553_Automatic_Adjustment = DISABLE;
	MIL_STD_1553_InitStruct->MIL_STD_1553_Inversion_Receiver =  DISABLE;
	MIL_STD_1553_InitStruct->MIL_STD_1553_HW_Support =  DISABLE;
//#endif /* #if defined (USE_MDR1986VE1T) */

	return;
}
В общем-то, у себя еще сделал "обертки" простых операций с регистрами inline, по подобию библиотек LL известного заграничного конкурента.
Lampadov писал(а): *
Тем не менее, мы оперативно следим за всеми каналами связи, чтобы вести поддержку паков для сред (не только IDE Keil) в полном объеме.
Так претензии нет :)
Lampadov писал(а): *
разделение заголовочных файлов попросту упрощает разработку
Согласен. Я говорил лишь про актуальность и совместимость (где она возможна без особых проблем).
Здравствуйте!

Большое спасибо за пост! Сформировал заявку на доработку заголовочных файлов в структуре пака.

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


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2021-фев-15 14:52 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 448
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
Всех приветствую!

Во вложении к посту архив с BSDL-файлами для микроконтроллеров 1986ВЕ92У(92У1), К1986ВЕ92QI и 1986ВЕ93У - на данный момент по линейке 1986ВЕ9х на официальном сайте компании для загрузки доступен только BSDL-файл для микроконтроллера 1986ВЕ91Т(94Т) (также приложен в архиве), но в ближайшее время на сайте, на соответствующих страницах, будут опубликованы и эти BSDL.

Стоит отметить следующее:

При работе с текущими BSDL-файлами стоит отметить особенность микроконтроллеров 1986ВЕ92У, 1986ВЕ93У и К1986ВЕ92QI: для доступа к отладочному TAP-контроллеру в 1986ВЕ9х необходимо подтянуть JTAG_EN к питанию, но в этих микроконтроллерах данный вывод в корпусах не разварен (в 1986ВЕ91Т и 1986ВЕ94Т разварен), поэтому переключение необходимо производить либо программным путём (выставить в полях JTAG_A и JTAG_B регистра REG_0E логическую единицу), либо выбором режима MODE[2:0] = "111" - вариант с режимом MODE[2:0] неактуален для микроконтроллера 1986ВЕ93У, поскольку в нём третий вывод, ответственный за выбор режима MODE, не разварен. Эта особенность отражена как в файлах BSDL (атрибут COMPLIANCE_PATTERNS не вызывается), так и в текстовых файлах к поставляемым файлам BSDL.

Если будут вопросы или пожелания, то пишите, пожалуйста. Спасибо.


Вложения:
BSDL.zip [13.1 КБ]
56 скачиваний

_________________
Отдел технической поддержки support@milandr.ru
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 377 сообщений ]  На страницу « 122 23 24 25 26 »

Часовой пояс: UTC+03:00


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

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


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

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB