Миландр

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

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




Начать новую тему  Ответить на тему  [ 16 сообщений ]  На страницу 1 2 »
Автор Сообщение
 Заголовок сообщения: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-12 16:39 
Не в сети

Зарегистрирован: 2015-авг-13 16:17
Сообщения: 10
Собственное есть где-нибудь нормальное описание DMA на CMSIS для ВЕ9х?
В опубликованной библиотеке есть только MDR_DMA_BASE. Управления каналов нет. В спецификации тоже адресов этих регистров не увидел.
Возможно есть рабочий проект/библиотеки.
C SPL не хочу работать, нужен быстрый доступ/настройка.


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-13 19:01 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 274
Вот самая полная ветка viewtopic.php?f=33&t=234

_________________
Hack the Planet!


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-14 09:01 
Не в сети

Зарегистрирован: 2015-авг-13 16:17
Сообщения: 10
Спасибо, почитал. Только вопрос остался, не поделитесь описанием вот этой структуры, читаю примеры и библиотеки - в упор не вижу:

__align(DMA_CH_CFG_ALIGN) DMA_CH_CFG_TypeDef PriDMA_ChCfg[DMA_CH_TABLE_SIZE];


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-14 09:40 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Нет у нас такой структуры. Таблица каналов заводится в MDR32F9Qx_dma.c
DMA_CtrlDataTypeDef DMA_ControlTable[DMA_Channels_Number * (1 + DMA_AlternateData)];
Выложите пожалуйста ссылку на описание драйвера CMSIS DMA. Я такого не встречал, только эти -
http://www.keil.com/pack/doc/CMSIS/Driv ... index.html


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-14 09:56 
Не в сети

Зарегистрирован: 2015-авг-13 16:17
Сообщения: 10
Спасибо разобрался. Но все таки хотелось бы (на будущее), чтобы эта структура была описана и объявлена в MDR32Fx.h и добавлена в периферию. Потому как без неё (SPLовской библиотеки) DMA в принципе не запустишь.

Для будущих поколений:
1. Нужно включить драйвер DMA либо добавить MDR32F9Qx_dma.c и MDR32F9Qx_dma.h.
2. Объявить
extern DMA_CtrlDataTypeDef DMA_ControlTable[DMA_Channels_Number * (1 + DMA_AlternateData)];
//Объявление канала DMA второго таймера
DMA_CtrlDataTypeDef* DMA_TIM2=&DMA_ControlTable[DMA_Channel_TIM2];
3. Обращаться к этому таймеру в обычном для CMSIS виде
DMA_TIM2->DMA_Control=...;


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-14 10:41 
Не в сети

Зарегистрирован: 2015-авг-13 16:17
Сообщения: 10
Vasiliy писал(а):
Выложите пожалуйста ссылку на описание драйвера CMSIS DMA. Я такого не встречал, только эти -
http://www.keil.com/pack/doc/CMSIS/Driv ... index.html
В общем нужно так, чтобы можно было работать без дополнительных библиотек.
А то MDR_DMA у вас описаны, а каналы нет, что не очень логично.
В даташите тоже как-то не понятно, как работать с каналами. В тексте вроде написано, а по факту ничего конкретного.
У STMа описано так:
/**
  * @brief DMA Controller
  */

typedef struct
{
  __IO uint32_t CCR;         /*!< DMA channel x configuration register        */
  __IO uint32_t CNDTR;       /*!< DMA channel x number of data register       */
  __IO uint32_t CPAR;        /*!< DMA channel x peripheral address register   */
  __IO uint32_t CMAR;        /*!< DMA channel x memory address register       */
} DMA_Channel_TypeDef;

typedef struct
{
  __IO uint32_t ISR;         /*!< DMA interrupt status register,                 Address offset: 0x00 */
  __IO uint32_t IFCR;        /*!< DMA interrupt flag clear register,             Address offset: 0x04 */
} DMA_TypeDef;

typedef struct
{
  __IO uint32_t CSELR;       /*!< DMA channel selection register              */
} DMA_Request_TypeDef;

#define DMA1_Channel1_BASE    (DMA1_BASE + 0x0008UL)
#define DMA1_Channel2_BASE    (DMA1_BASE + 0x001CUL)
#define DMA1_Channel3_BASE    (DMA1_BASE + 0x0030UL)
#define DMA1_Channel4_BASE    (DMA1_BASE + 0x0044UL)
#define DMA1_Channel5_BASE    (DMA1_BASE + 0x0058UL)
#define DMA1_Channel6_BASE    (DMA1_BASE + 0x006CUL)
#define DMA1_Channel7_BASE    (DMA1_BASE + 0x0080UL)
#define DMA1_CSELR_BASE       (DMA1_BASE + 0x00A8UL)

#define DMA1_Channel1       ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE)
#define DMA1_Channel2       ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE)
#define DMA1_Channel3       ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE)
#define DMA1_Channel4       ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE)
#define DMA1_Channel5       ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE)
#define DMA1_Channel6       ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE)
#define DMA1_Channel7       ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE)
#define DMA1_CSELR          ((DMA_Request_TypeDef *) DMA1_CSELR_BASE)


#define DMA2_Channel1       ((DMA_Channel_TypeDef *) DMA2_Channel1_BASE)
#define DMA2_Channel2       ((DMA_Channel_TypeDef *) DMA2_Channel2_BASE)
#define DMA2_Channel3       ((DMA_Channel_TypeDef *) DMA2_Channel3_BASE)
#define DMA2_Channel4       ((DMA_Channel_TypeDef *) DMA2_Channel4_BASE)
#define DMA2_Channel5       ((DMA_Channel_TypeDef *) DMA2_Channel5_BASE)
#define DMA2_Channel6       ((DMA_Channel_TypeDef *) DMA2_Channel6_BASE)
#define DMA2_Channel7       ((DMA_Channel_TypeDef *) DMA2_Channel7_BASE)
#define DMA2_CSELR          ((DMA_Request_TypeDef *) DMA2_CSELR_BASE)


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-14 11:21 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Мысль понятна, и логична, спасибо.
Но эту библиотеку вряд-ли будем переделывать.


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-14 12:33 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1423
Откуда: Тула
kmrost писал(а):
В общем нужно так, чтобы можно было работать без дополнительных библиотек.
А то MDR_DMA у вас описаны, а каналы нет, что не очень логично.
В даташите тоже как-то не понятно, как работать с каналами. В тексте вроде написано, а по факту ничего конкретного.
У STMа описано так: ...
Лично я не совсем понял суть Вашй проблемы, но контроллер ДМА стандартный лицензированный ARM'овский. Так что всё, что под него подходит - подойдёт и для Миландра, поправить нужно только базовые адреса. Не настаиваю, но думаю так.

Если функциональность и удобность SPL от Миландра Вас устраивает, так творческим копипастом позаимствуйте оттуда всё необходимое.

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-15 19:50 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 274
kmrost писал(а):
Спасибо, почитал. Только вопрос остался, не поделитесь описанием вот этой структуры, читаю примеры и библиотеки - в упор не вижу:

__align(DMA_CH_CFG_ALIGN) DMA_CH_CFG_TypeDef PriDMA_ChCfg[DMA_CH_TABLE_SIZE];
...единственно запись в регистры DMA только 32-разрядами, битовые поля там не работают, так что мой код в той ветке НЕПРАВИЛЬНЫЙ!! - надо писать в таком стиле
MDR_DMA->CHNL_REQ_MASK_CLR = DMA_CH_SSP2_TX | DMA_CH_SSP2_RX | DMA_CH_ADC1_EC;	
MDR_DMA->ERR_CLR = DMA_ERR_CLR;

MDR_DMA->CHNL_USEBURST_SET = DMA_CH_ADC1_EC;
и править надо не MDR32Fx.h файл, а так называемый .svd-файл http://www.keil.com/pack/doc/CMSIS/SVD/html/index.html, из него генерируется .h-файл регистров и .sfr-файл для отладки с помощью утилиты http://www.keil.com/pack/doc/CMSIS/SVD/ ... nv_pg.html

Кстати неплохо было бы для Keil дописывать такие атрибуты в хидере (при наличии регионов bit-band), чтобы компилятор сам раскладывал обращение к битовым полям на соответствующие ассемблерные инструкции:
/* Bit-band structure */
typedef struct
{
	__IO	uint32_t	SSP1_BRG		:	8;
	__IO	uint32_t	SSP2_BRG		:	8;
				uint32_t							:	8;
	__IO	uint32_t	SSP1_CLK_EN	:	1;
	__IO	uint32_t	SSP2_CLK_EN	:	1;
} MDR_RST_CLK_SSP_CLOCK_BB __attribute__((bitband));

union
	{
		__IO	uint32_t	SSP_CLOCK;
		MDR_RST_CLK_SSP_CLOCK_BB	SSP_CLOCK_b;
	};
} MDR_RST_CLK_TypeDef;


Вложения:
MDR32Fx.rar [2.49 МБ]
69 скачиваний

_________________
Hack the Planet!
Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-16 12:17 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1423
Откуда: Тула
R Max писал(а):
Кстати неплохо было бы для Keil дописывать такие атрибуты в хидере (при наличии регионов bit-band), чтобы компилятор сам раскладывал обращение к битовым полям на соответствующие ассемблерные инструкции
Очень интересно, спасибо.
А вот два вопроса:
1. На сколько это эффективнее, чем обычные битовые операции (AND/OR/TST)?
2. На сколько это корректно? Чтение вроде более-менее безопасно, а вот с записью могут быть проблемы. Ведь работа периферией часто имеет всяческие ограничения, типа записи строго словами.

Во что выродится запись в SSP_CLOCK_b.SSP2_BRG ? В запись в слово по выровненному адресу (т.к. объявлен как uint32_t) или в запись конкретного байта?
Как отнесётся к этому блок RST_CLK (а то обновит весь регистр, в остальные байты мусором)?

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-16 16:44 
Не в сети
Аватара пользователя

Зарегистрирован: 2019-янв-15 10:14
Сообщения: 35
Организация: ООО "НПП "АСТРОН ЭЛЕКТРОНИКА"
Откуда: г. Орел
Регистры периферии М3 вроде как не имеют побитового доступа... Могу ошибаться...
Если эта структура это битовые поля компилятор сделает тоже самое что и с битовыми операциями.
Просто удобнее и глаза меньше краснеют.


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-16 17:41 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1423
Откуда: Тула
Shrek писал(а):
Регистры периферии М3 вроде как не имеют побитового доступа... Могу ошибаться...
таки имет.
Shrek писал(а):
Если эта структура это битовые поля компилятор сделает тоже самое что и с битовыми операциями.
Просто удобнее и глаза меньше краснеют.
Если поле шириной в один бит - с ним можно работать через bit bang region. Многобитовые - явно удобнее через RMW (хотя хз что решит компилятор).

НО вопрос был в другом - корректно ли так работать с периферией. Не окажется ли слишком много исключений или неприятных сюрпризов при смене версии или опций компилятора?..

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-16 18:20 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Встречал у ARM рекомендации о том что чтение-запись регистров должна быть только 32-разрядная. Поэтому необходимо чтобы компилятор работал с битовыми полями через STR/LDR.

Если записи будут байтными, то будут проблемы. Видел подобное тут - https://github.com/StartMilandr/MDR_Pack_v6/wiki
Но здесь еще наложилось, что битовые поля вместо uint32_t были определены ENUM-ами. С одной стороны удобно работать предопределенными значениями, но не факт что всякий компилятор такое переварит.

Бит-банд это тоже чтение-модификация-запись, только ядро не отпускает шину пока это все не закончит. Типа есть некоторая атомарность операции.


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-16 23:00 
Не в сети
Аватара пользователя

Зарегистрирован: 2019-янв-15 10:14
Сообщения: 35
Организация: ООО "НПП "АСТРОН ЭЛЕКТРОНИКА"
Откуда: г. Орел
prostoRoman писал(а):
Shrek писал(а):
Регистры периферии М3 вроде как не имеют побитового доступа... Могу ошибаться...
таки имет.
Shrek писал(а):
Если эта структура это битовые поля компилятор сделает тоже самое что и с битовыми операциями.
Просто удобнее и глаза меньше краснеют.
Если поле шириной в один бит - с ним можно работать через bit bang region. Многобитовые - явно удобнее через RMW (хотя хз что решит компилятор).

НО вопрос был в другом - корректно ли так работать с периферией. Не окажется ли слишком много исключений или неприятных сюрпризов при смене версии или опций компилятора?..
Под побитовым доступом имел в виду что каждый бит определенного регистра дополнительно отображен по определенному смещению от базового адреса.
Компиляторы, по крайней мере gnu'ый это кунфу не умеет.


Вернуться к началу
 Заголовок сообщения: Re: DMA, CMSIS, ВЕ9x
СообщениеДобавлено: 2019-окт-22 20:42 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 274
prostoRoman писал(а):
1. На сколько это эффективнее, чем обычные битовые операции (AND/OR/TST)?
Во что выродится запись в SSP_CLOCK_b.SSP2_BRG ? В запись в слово по выровненному адресу (т.к. объявлен как uint32_t) или в запись конкретного байта?
Как отнесётся к этому блок RST_CLK (а то обновит весь регистр, в остальные байты мусором)?
Код с bit-band занимает в целом меньше инструкций - на одном из файлов выиграл байт 500 помнится при переходе к bit-band...

Пока проблем с RST_CLK не наблюдал - ни с обращением по bit-band (LDR/STR в bit-band адрес), ни c обращением битовым полем (LDR/STR + BIC)...
Открыть
;;;47     	MDR_RST_CLK->SSP_CLOCK_b.SSP1_CLK_EN = true;
00006a  2001              MOVS     r0,#1
00006c  4926              LDR      r1,|L1.264|
00006e  6008              STR      r0,[r1,#0]
;;;48     		
;;;49     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_BRG = 0;
000070  4823              LDR      r0,|L1.256|
000072  6ac0              LDR      r0,[r0,#0x2c]
000074  f420407f          BIC      r0,r0,#0xff00
000078  4921              LDR      r1,|L1.256|
00007a  62c8              STR      r0,[r1,#0x2c]
;;;50     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_BRG = 1;
00007c  4608              MOV      r0,r1
00007e  6ac0              LDR      r0,[r0,#0x2c]
000080  f420407f          BIC      r0,r0,#0xff00
000084  f5007080          ADD      r0,r0,#0x100
000088  62c8              STR      r0,[r1,#0x2c]
;;;51     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_BRG = 2;
00008a  4608              MOV      r0,r1
00008c  6ac0              LDR      r0,[r0,#0x2c]
00008e  f420407f          BIC      r0,r0,#0xff00
000092  f5007000          ADD      r0,r0,#0x200
000096  62c8              STR      r0,[r1,#0x2c]
;;;52     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_BRG = 3;
000098  4608              MOV      r0,r1
00009a  6ac0              LDR      r0,[r0,#0x2c]
00009c  f420407f          BIC      r0,r0,#0xff00
0000a0  f5007040          ADD      r0,r0,#0x300
0000a4  62c8              STR      r0,[r1,#0x2c]
;;;53     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_BRG = 4;
0000a6  4608              MOV      r0,r1
0000a8  6ac0              LDR      r0,[r0,#0x2c]
0000aa  f420407f          BIC      r0,r0,#0xff00
0000ae  f5006080          ADD      r0,r0,#0x400
0000b2  62c8              STR      r0,[r1,#0x2c]
;;;54     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_BRG = 5;
0000b4  4608              MOV      r0,r1
0000b6  6ac0              LDR      r0,[r0,#0x2c]
0000b8  f420407f          BIC      r0,r0,#0xff00
0000bc  f50060a0          ADD      r0,r0,#0x500
0000c0  62c8              STR      r0,[r1,#0x2c]
;;;55     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_BRG = 6;
0000c2  4608              MOV      r0,r1
0000c4  6ac0              LDR      r0,[r0,#0x2c]
0000c6  f420407f          BIC      r0,r0,#0xff00
0000ca  f50060c0          ADD      r0,r0,#0x600
0000ce  62c8              STR      r0,[r1,#0x2c]
;;;56     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_BRG = 7;
0000d0  4608              MOV      r0,r1
0000d2  6ac0              LDR      r0,[r0,#0x2c]
0000d4  f420407f          BIC      r0,r0,#0xff00
0000d8  f50060e0          ADD      r0,r0,#0x700
0000dc  62c8              STR      r0,[r1,#0x2c]
;;;57     	
;;;58     	MDR_RST_CLK->SSP_CLOCK_b.SSP2_CLK_EN = false;
0000de  2000              MOVS     r0,#0
0000e0  4909              LDR      r1,|L1.264|
0000e2  1d09              ADDS     r1,r1,#4
0000e4  6008              STR      r0,[r1,#0]
;;;59     	
;;;60     	MDR_RST_CLK->SSP_CLOCK_b.SSP1_BRG = 4;
0000e6  4806              LDR      r0,|L1.256|
0000e8  6ac0              LDR      r0,[r0,#0x2c]
0000ea  f02000ff          BIC      r0,r0,#0xff
0000ee  1d00              ADDS     r0,r0,#4
0000f0  4903              LDR      r1,|L1.256|
0000f2  62c8              STR      r0,[r1,#0x2c]

                  |L1.256|
                          DCD      0x40020000

                  |L1.264|
                          DCD      0x424005e0
Закрыть
Сравнивал, кстати работу компилятора на примере работы с АЦП, получается одинаково
Открыть
if (MDR_ADC->ADC2_STATUS_b.FLG_REG_EOCIF)
000054  4844              LDR      r0,|L1.360|
000056  3080              ADDS     r0,r0,#0x80
000058  6800              LDR      r0,[r0,#0]
00005a  b188              CBZ      r0,|L1.128|
;;;34     	{
;;;35     		ADC2_Buf += MDR_ADC->ADC2_RESULT_b.RESULT;
00005c  4843              LDR      r0,|L1.364|
00005e  69c0              LDR      r0,[r0,#0x1c]
000060  f3c0000b          UBFX     r0,r0,#0,#12
000064  4946              LDR      r1,|L1.384|
000066  6809              LDR      r1,[r1,#0]  ; ADC2_Buf
000068  4408              ADD      r0,r0,r1
00006a  4945              LDR      r1,|L1.384|
00006c  6008              STR      r0,[r1,#0]  ; ADC2_Buf
Закрыть
, что самому накладывать маску и сдвигать, что просто читать с битового поля - результат в ассемблере одинаковый - использование инструкций для работы с битовыми полями (UBFX, BFI... ), причём компилятор чует знаковые битовые поля как на чтение, так и на запись (в том числе, если структура расположена в bit-band регионе ОЗУ). В случае, если есть выровненный байтовый доступ, компилятор может использовать усечённые инструкции (байт, полуслово, в том числе со знаками), вроде как-то так. Проблема обычно только одна, при таких структурах требуется ключевое слово __packed
Открыть
typedef __packed struct
{
  unsigned short a;
  unsigned int b;
} tVar;

typedef __packed struct
{
  unsigned char a;
  unsigned int b;
} tVar;

typedef __packed struct
{
  unsigned char a;
  unsigned short b;
} tVar;
Закрыть
P.S. Оптимизация -O0, компилятор 5 версии от Keil ARM.
Shrek писал(а):
Под побитовым доступом имел в виду что каждый бит определенного регистра дополнительно отображен по определенному смещению от базового адреса.
Компиляторы, по крайней мере gnu'ый это кунфу не умеет.
Не умеет, для gcc-проекта, работающего в Keil, в хидере регистров для 1986ВЕ9х я удалял атрибуты bit-band, gcc, который я использовал, работал только с битовыми полями... Также пробовал писать под ARM Cortex A9 - так у него в принципе bit-band нет, только инструкции битовых полей...
Открыть
 10:Source/main.c **** 	MDR_RST_CLK->PER_CLOCK_b.RST_CLK = true;
  32              		.loc 1 10 0
  33 0000 144B     		ldr	r3, .L6
  34 0002 DA69     		ldr	r2, [r3, #28]
  35 0004 42F01002 		orr	r2, r2, #16
  36 0008 DA61     		str	r2, [r3, #28]
32:Source/main.c **** 	MDR_RST_CLK->PLL_CONTROL_b.PLL_CPU_ON = true;
  54              		.loc 1 32 0
  55 0026 9A88     		ldrh	r2, [r3, #4]
  56 0028 42F00402 		orr	r2, r2, #4
  57 002c 9A80     		strh	r2, [r3, #4]	@ movhi
  33:Source/main.c **** 	
  34:Source/main.c **** 	MDR_RST_CLK->PLL_CONTROL_b.PLL_CPU_PLD = true;
  58              		.loc 1 34 0
  59 002e 9A88     		ldrh	r2, [r3, #4]
  60 0030 42F00802 		orr	r2, r2, #8
  61 0034 9A80     		strh	r2, [r3, #4]	@ movhi
  35:Source/main.c **** 	MDR_RST_CLK->PLL_CONTROL_b.PLL_CPU_PLD = false;
  62              		.loc 1 35 0
  63 0036 9A88     		ldrh	r2, [r3, #4]
  64 0038 6FF3C302 		bfc	r2, #3, #1
  65 003c 9A80     		strh	r2, [r3, #4]	@ movhi
  36:Source/main.c **** 	
  37:Source/main.c **** 	while (MDR_RST_CLK->CLOCK_STATUS_b.PLL_CPU_RDY == false);
  66              		.loc 1 37 0
  67 003e 1A46     		mov	r2, r3
  68              	.L3:
  69              		.loc 1 37 0 is_stmt 0 discriminator 1
  70 0040 1368     		ldr	r3, [r2]
  71 0042 13F0020F 		tst	r3, #2
  72 0046 FBD0     		beq	.L3
Закрыть
Кстати при включенной опции использования bit-band (страница 25 https://static.docs.arm.com/101483/0000 ... _00_en.pdf) в ARM Cortex M3 + AXI GPIO (https://www.xilinx.com/support/document ... i-gpio.pdf) + AXI Quad SPI (https://www.xilinx.com/support/document ... ad-spi.pdf) в ПЛИС Xilinx код с bit-band периферией работал нормально, причём вроде там обращения на шине AXI всё равно идут 32-разрядные, просто их может быть несколько, как-то так...идеология там использована та же
Открыть
/* Bit-band structure */
typedef struct
{
	__IO	uint32_t	PIN_0		:	1;
	__IO	uint32_t	PIN_1		:	1;
	__IO	uint32_t	PIN_2		:	1;
	__IO	uint32_t	PIN_3		:	1;
	__IO	uint32_t	PIN_4		:	1;
	__IO	uint32_t	PIN_5		:	1;
	__IO	uint32_t	PIN_6		:	1;
	__IO	uint32_t	PIN_7		:	1;
	__IO	uint32_t	PIN_8		:	1;
	__IO	uint32_t	PIN_9		:	1;
	__IO	uint32_t	PIN_10	:	1;
	__IO	uint32_t	PIN_11	:	1;
	__IO	uint32_t	PIN_12	:	1;
	__IO	uint32_t	PIN_13	:	1;
	__IO	uint32_t	PIN_14	:	1;
	__IO	uint32_t	PIN_15	:	1;
	__IO	uint32_t	PIN_16	:	1;
	__IO	uint32_t	PIN_17	:	1;
	__IO	uint32_t	PIN_18	:	1;
	__IO	uint32_t	PIN_19	:	1;
	__IO	uint32_t	PIN_20	:	1;
	__IO	uint32_t	PIN_21	:	1;
	__IO	uint32_t	PIN_22	:	1;
	__IO	uint32_t	PIN_23	:	1;
	__IO	uint32_t	PIN_24	:	1;
	__IO	uint32_t	PIN_25	:	1;
	__IO	uint32_t	PIN_26	:	1;
	__IO	uint32_t	PIN_27	:	1;
	__IO	uint32_t	PIN_28	:	1;
	__IO	uint32_t	PIN_29	:	1;
	__IO	uint32_t	PIN_30	:	1;
	__IO	uint32_t	PIN_31	:	1;
} ARTY_GPIO_PINS_BB __attribute__((bitband));

/* ARTY_GPIO_TypeDef structure */
typedef struct
{
	union
	{
		__IO uint32_t					GPIO_DATA;
		ARTY_GPIO_PINS_BB			GPIO_DATA_b;
	};
	
	union
	{
		__IO uint32_t					GPIO_TRI;
		ARTY_GPIO_PINS_BB			GPIO_TRI_b;
	};
	
	union
	{
		__IO uint32_t					GPIO2_DATA;
		ARTY_GPIO_PINS_BB			GPIO2_DATA_b;
	};
	
	union
	{
		__IO uint32_t					GPIO2_TRI;
		ARTY_GPIO_PINS_BB			GPIO2_TRI_b;
	};
	
	uint32_t								RESERVED0[68];
	
	union
	{
		__IO uint32_t					GIER;
		ARTY_GPIO_GIER_BB			GIER_b;
	};
	
	union
	{
		__IO uint32_t					IP_ISR;
		ARTY_GPIO_IP_ISR_BB		IP_ISR_b;
	};
	
	uint32_t								RESERVED1;
	
	union
	{
		__IO uint32_t					IP_IER;
		ARTY_GPIO_IP_IER_BB		IP_IER_b;
	};
} ARTY_GPIO_TypeDef;

#define ARTY_GPIO_0           ((ARTY_GPIO_TypeDef *) (XPAR_GPIO_0_BASEADDR))
Закрыть
Открыть
Вложение:
[ attachment ]
Arch.jpg [ 287.91 КБ | 703 просмотра ]
Вложение:
[ attachment ]
Sim.jpg [ 288.68 КБ | 703 просмотра ]
Закрыть

_________________
Hack the Planet!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 16 сообщений ]  На страницу 1 2 »

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


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

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


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

Перейти: 

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