Easyelectronics.ru

Электроника для всех
Текущее время: 24 окт 2020, 20:26

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: (РЕШЕНО) подстава с приоритетами прерываний (в назидание)
СообщениеДобавлено: 21 сен 2012, 23:59 
Старожил

Зарегистрирован: 14 мар 2012, 13:58
Сообщения: 1727
Ситуация:

- имеется рабочая инициализация, чтобы писать на карточку
Код:
if((Status = SD_Init()) == SD_OK)
{
   for(i = 0; i < 200; i++)
   {
       STM_EVAL_LEDToggle(LED4);

     Fill_Buffer(Buffer_MultiBlock_Tx, MULTI_BUFFER_SIZE, i);

       Status = SD_WriteMultiBlocks(Buffer_MultiBlock_Tx, FileFirstByte + (i * 0xC800), SD_BLOCK_SIZE, 100);
       Status = SD_WaitWriteOperation();
       while(SD_GetStatus() != SD_TRANSFER_OK);
   }
}


- имеется подпрограмма обработки прерывания от DCMI по окончанию кадра
Код:
void DCMI_IRQHandler(void)
{
   STM_EVAL_LEDToggle(LED3);

   DCMI_ClearFlag(DCMI_FLAG_FRAMERI);

   GC309_DMA_ReInit();

   DMA_Cmd(DMA2_Stream1, ENABLE);
   DCMI_CaptureCmd(ENABLE);            
}


По отдельности всё работает. И то, и другое использует DMA.

По логике захотелось вставить запись на карточку в прерывание после полученной картинки. Но получается жестокий зависон. Не только на пишет на карточку, как положено (96 блоков, вместо 100, оставаясь в лупе, ожидая подтверждения завершения), но и прекращает работу прерывание Systicks.

(...)

Опаньки, ребятки, пока писал, пришла на ум интересная мысль. Я ведь сижу в обработчике прерывания (DCMI_IRQHandler). У этого прерывания определённый приоритет. А это значит, что всем другим с равным приоритетом и ниже надо ждать, когда этот обработчик закончит работу.

Я ещё отпушись. Сначала думал, что баг вроде описанного здесь:
http://blog.frankvh.com/


Последний раз редактировалось dima2611 24 сен 2012, 15:50, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: лулзы с прерываниями (в назидание)
СообщениеДобавлено: 22 сен 2012, 02:33 
Старожил

Зарегистрирован: 14 мар 2012, 13:58
Сообщения: 1727
Предъявляю пруф, что виновны были проритеты прерываний. Я из обработчика с более высоким приоритетом стартовал процесс, требовавший чистую обработку прерываний, но имевших тот же приоритет. Сидел в первом обработчике, ждал завершения. Понятно, тому процессу не обломилось ни одного.

У меня теперча с камеры во внешнее ОЗУ, а оттуда на карточку. Хе-хе :) Выходные спасены!

на картинку не жмите, она больше не станет


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


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


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

Сейчас этот форум просматривают: rigor_mortis, truppik


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB