Миландр

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

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




Начать новую тему  Ответить на тему  [ 26 сообщений ]  На страницу « 1 2
Автор Сообщение
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2016-авг-22 15:26 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
MWaso писал(а):
Вот еще несколько непонятных моментов, непонятных из документации: dma_req[C] - это, как я понимаю, внутренний (невидимый пользователю) регистр запросов по каналам. Правильно? А dma_sreq[C] чем отличается? И есть ли он вообще в 1986ВЕ9х?
dma_req[C] - запрос на блочную транзакцию dma (то есть от периферии приходит запрос dma_req, контроллер DMA выполняет R_power передач (поле регистра channel_cfg управляющих данных канала), далее контроллер DMA ожидает новый запрос dma_req от периферии).

dma_sreq[C] - запрос на одиночный цикл dma (то есть от периферии приходит запрос dma_sreq, контроллер DMA выполняет 1 передачу (поле регистра channel_cfg управляющих данных канала), далее контроллер DMA ожидает новый запрос dma_sreq от периферии).


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2016-авг-22 16:02 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1454
Откуда: Тула
Petr писал(а):
dma_sreq[C] - запрос на одиночный цикл dma (то есть от периферии приходит запрос dma_sreq, контроллер DMA выполняет 1 передачу (поле регистра channel_cfg управляющих данных канала), далее контроллер DMA ожидает новый запрос dma_sreq от периферии).
Какое поле? R_POWER долженб быть равен 0 в случае sreq?

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


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2016-авг-23 15:37 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
prostoRoman писал(а):
Какое поле? R_POWER долженб быть равен 0 в случае sreq?
Не обязательно. Но в случае sreq, если R_POWER не равно 0, то пока не произойдут 2^R DMA транзакций, то не будет осуществлен новый арбитраж. (Правила обмена данными 16 и 17 в разделе описания DMA в спецификации)
На этот момент необходимо обратить внимание при использовании DMA для обслуживания нескольких каналов (для того что бы не заблокировать обслуживание остальных каналов, пока выполняется 2^R DMA транзакций одного из каналов по dma_sreq запросам).


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2016-авг-23 15:45 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
Да, стоило бы написать так:
Petr писал(а):
dma_req[C] - запрос на блочную транзакцию dma (то есть от периферии приходит запрос dma_req, контроллер DMA выполняет R_power или n_minus_1 передач (поля регистра channel_cfg управляющих данных канала), далее контроллер DMA ожидает новый запрос dma_req или dma_sreq от периферии). Стоит обратить внимание на сноски после таблицы с правилами обмена данными с использованием DMA.

dma_sreq[C] - запрос на одиночный цикл dma (то есть от периферии приходит запрос dma_sreq, контроллер DMA выполняет 1 передачу, далее контроллер DMA ожидает новый запрос dma_sreq от периферии).


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2016-авг-24 05:01 
Не в сети

Зарегистрирован: 2016-фев-26 09:54
Сообщения: 24
Организация: АО НИИПП г.Томск
Спасибо. А по битам HPROT разъясните? Если это глупый вопрос - пожалуйста дайте ссылку где посмотреть.


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2017-янв-19 22:25 
Не в сети

Зарегистрирован: 2016-янв-22 15:45
Сообщения: 21
У меня такой вопрос:
В режиме Пинг-Понг после того, как канал DMA выполнит задачу, его нужно снова запускать?
Мне нужно, чтобы я запустил канал DMA и он работал непрерывно, без прерываний.


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2017-июн-13 15:53 
Не в сети

Зарегистрирован: 2010-июн-09 19:35
Сообщения: 38
MWaso писал(а):
Спасибо. А по битам HPROT разъясните? Если это глупый вопрос - пожалуйста дайте ссылку где посмотреть.
Да все просто. Сроки сдачи ОКР поджимали и нужно было выпускать документацию. Поэтому мы просто отдали документацию на prime cell dma переводчику и тупо вставили в doc-файл. Времени и желания на адаптацию документации к особенностям нашего процессора не было. К тому же документацией занимается один человек, а не целый отдел. Тут вам не Калифорния. Уже после сдачи ОКР вы, программисты, стали ныть и волей-неволей пришлось слегка разгрести эту мусорку. Да, дело до конца не доведено, но это инициативная работа - государство на нее денег не выделило. Однако, все вышесказанное не снимает с вас ответственности за внимательное прочтение документации. И ради бога не умничайте. Вам данные нужно передавать, а не изучать внутреннее устройство шин процессора.


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2017-июл-20 10:03 
Не в сети

Зарегистрирован: 2013-фев-16 18:20
Сообщения: 57
Откуда: РФ, г. Курск
Денис писал(а):
Уже после сдачи ОКР вы, программисты, стали ныть и волей-неволей пришлось слегка разгрести эту мусорку. Да, дело до конца не доведено, но это инициативная работа - государство на нее денег не выделило
Вот поэтому россия никогда не догонит (и даже не приблизится) западных разработчиков электронных компонентов. Я программист со стажем и мне порой проще читать английские даташиты и референс мануалы, чем родные ту и спецификации. И только нытье разработчика толкает производителя корректировать документацию чтобы ее хоть как-то можно было изучать.
Денис писал(а):
И ради бога не умничайте. Вам данные нужно передавать, а не изучать внутреннее устройство шин процессора.
А это вообще хохма

_________________
"Грабить один банк три раза подряд - я восхищаюсь твоим стилем, Роберто!"


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2017-июл-20 14:46 
Не в сети

Зарегистрирован: 2010-июн-09 19:35
Сообщения: 38
brutal_codemaker писал(а):
Вот поэтому россия никогда не догонит (и даже не приблизится) западных разработчиков электронных компонентов. Я программист со стажем и мне порой проще читать английские даташиты и референс мануалы, чем родные ту и спецификации. И только нытье разработчика толкает производителя корректировать документацию чтобы ее хоть как-то можно было изучать.
Да я такой же программист как и вы. В "Миландре" не работаю. Просто жизнь заставила перечитать тему и на предыдущей странице увидел сообщение от Petr, что нужно внимательно читать документацию. Я считаю, что разработчики "Миландра" не имеют морального права тыкать нас носом в свое же дерьмо и выразил протест в сатирической форме. Впрочем, я на 100% уверен, что написанное мной чистая правда.


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2017-июл-20 14:59 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1454
Откуда: Тула
В Вашей сатире лишь доля шутки...

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


Вернуться к началу
 Заголовок сообщения: Re: Вопрос о прерывании по DMA
СообщениеДобавлено: 2020-фев-06 11:25 
Не в сети

Зарегистрирован: 2019-дек-17 10:07
Сообщения: 16
Организация: ИРТ
Добрый день! Не мог представить, что простая задача пересылки память-память при использовании DMA вызовет столько сложностей. С настройкой вроде бы разобрался, а вот прерывания ни в какую не хотят запускаться. Проблему с постоянным выпадением в обработчик решил советами с форума. Но проблема в том, что он в него не заходит после выполнения передачи. Нужно каким-нибудь отдельным образом в настройках DMA указывать, чтобы по завершению передачи он выходил в прерывания?
       /* контроллер 1986ВЕ1Т */
       /* включаю тактирование SPI1-SPI3 */

	NVIC->ICPR[0] = 0xffffffff;
	NVIC->ICER[0] = 0xffffffff;
        NVIC_EnableIRQ(DMA_IRQn);

  DMAInitMem2Mem(array, (uint32_t)0x60000000, 20, 2, 1);
  DmaTransfer(31);


/*модифицированная инициализации из примера с форума */
void DMAInitMem2Mem(uint32_t *src_buf, uint32_t *dest_buf, uint16_t size_buf, uint8_t size_data, uint8_t dma_type)
{
	//u8 DMAInitStatus = PASSED;
	
	DMA_PrimaryControlData.PRIMARY_CH0_SOURCE_END_POINTER = 0;
	DMA_PrimaryControlData.PRIMARY_CH0_DEST_END_POINTER   = 0;
	DMA_PrimaryControlData.PRIMARY_CH0_CONTROL = 0;
	
	DMA_PrimaryControlData.PRIMARY_CH0_SOURCE_END_POINTER = (uint32_t)(src_buf  + size_buf - 1);
	DMA_PrimaryControlData.PRIMARY_CH0_DEST_END_POINTER   = (uint32_t)(dest_buf + size_buf - 1);
	DMA_PrimaryControlData.PRIMARY_CH0_CONTROL |= 
		(size_data<<30 | size_data<<28 | size_data<<26 | size_data<<24 | DMA_RPOWER(size_buf) | DMA_TRANSFERS(size_buf) | dma_type);

	MDR_DMA->CFG   |= 0x00000001;

	MDR_DMA->CHNL_REQ_MASK_SET = 0xFFFFFFFF;   
	MDR_DMA->CHNL_ENABLE_CLR   = 0xFFFFFFFF;   
        MDR_DMA->ERR_CLR           = 0x00000001;   

  /* DMA1 channel configuration */
	MDR_DMA->CTRL_BASE_PTR = (uint32_t)&DMA_PrimaryControlData; 
}

void DmaTransfer(uint32_t channel)
{
  
	MDR_DMA -> CHNL_PRI_ALT_CLR        = DMA_SELECT(channel);
	MDR_DMA -> CHNL_REQ_MASK_CLR  = DMA_SELECT(channel);
	MDR_DMA -> CHNL_USEBURST_CLR  = DMA_SELECT(channel);
	MDR_DMA -> CHNL_PRIORITY_SET     = DMA_SELECT(channel);
	MDR_DMA -> CHNL_ENABLE_SET        = DMA_SELECT(channel);
	MDR_DMA -> CHNL_SW_REQUEST      = DMA_SELECT(channel);

}

#define DMA_SELECT(CHANNEL)	(0x00000001<<(CHANNEL))

это выдержки из общего кода.


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

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


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

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


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

Перейти: 

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