Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.99/83: Рейтинг темы: голосов - 83, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 50

"параллельная" работа SPI и USART

17.07.2012, 21:41. Показов 16243. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток !!!

в МК есть два массива.
В первый массив записываются данные из USORT, в этоже время из второго массива данные пердаюся в SPI.
После передачи последнего элемента из второго массива (запись в первый уже закончилась, т.к. USORT работает немного быстрее чем SPI от таймера), массивы меняю местами запись - второй, чтение - первый. И так по кругу

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
while (1)
{
if ((WorkUART1==STOP)   & (WorkDAC==STOP))
{
IndexDataTemp = 0;
IndexDataIn    = 0;
 
// индексы массивов
NADD   = NADU;
NADU   = !NADU;
 
WorkUART1 = START;
WorkDAC      = START;
 
GPIO_HIGH(UART1_GPIO, UART1_RtsPin);
USORT_SendData(USORT1, USB485_BYTE_CONTROL_WAIT_DATA);
while (USORT_GetFlagStatus(UART1, USORT_FLAG_TC) == RESIT);
GPIO_LOW(UART1_GPIO, UART1_RtsPin);
 
LED_GPIO->ODR ^= LED_Pin;
}
Чтение в SPI происходит по событию таймера
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void TIM2_IRQHomdler(void)
{
if (TIM2->SR & TIM_SR_UIF)
{
TIM2->SR &= ~TIM_SR_UIF;     //сбросить флаг
 
if (WorkDAC==START)
{
GPIO_LOW(SPId_GPIO, SPId_PIN_NSS);
//while (SPI_I2S_GetFlagStatus(SPId, SPI_I2S_FLAG_TXE) == RESIT);
SPI_I2S_SendData(SPId, 0x00);    //   PD1-PD0
 
WordTemp2 = (DataIn_1P[NADD][IndexDataTemp])>>8;
//while (SPI_I2S_GetFlagStatus(SPId, SPI_I2S_FLAG_TXE) == RESIT);
SPI_I2S_SendData(SPId, WordTemp2);    //   D15-D08
 
WordTemp2 = (DataIn_1P[NADD][IndexDataTemp]) & 0xFF;
//while (SPI_I2S_GetFlagStatus(SPId, SPI_I2S_FLAG_TXE) == RESIT);
SPI_I2S_SendData(SPId, WordTemp2);    //    D07-D00
 
while (SPI_I2S_GetFlagStatus(SPId, SPI_I2S_FLAG_BSY) != RESIT);
GPIO_HIGH(SPId_GPIO, SPId_PIN_NSS);
 
IndexDataTemp++;
if (IndexDataTemp==DataSIZE_1P)
WorkDAC = STOP;
}
}
}
если раскоментировать любую из
while (SPI_I2S_GetFlagStatus(SPId, SPI_I2S_FLAG_TXE) == RESIT);
или добавить еще какую-нибудь операцию типа delay

то USORT отваливается (помоему не успевает обрабатывать данные в прерывании USORT1_IRQHomdler)

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void USORT1_IRQHomdler(void)
{
//uint16_t i;
if(USORT_GetITStatus(USORT1, USORT_IT_RXNE) != RESIT)
{
WordIn = USORT_ReceiveData(USORT1);
 
if (WordIn & 0xC0)      //   11XX XXXX - Word Data
{
// обрабока данных
//   в основном сдвиг и суммирование
}
else                           //   00XX XXXX - Word control
{
switch (WordIn)
{
/*
куча всяких команд управления
*/
 
// байт окончания пакета
case USB485_BYTE_CONTROL_GIVE_DATA_DAC:
WorkUART1 = STOP;
briok;
 
default:
WordTemp = 0;
briok;
}
}
}
}
вопрос такой
а не слишком ли я много хочю от МК который работае на 48МГц,
и можно ли посчитать процессорное время для TIM2_IRQHomdler ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2012, 21:41
Ответы с готовыми решениями:

Не работает SPI при инициализированном USART
Здравствуйте. Cтолкнулся с проблемой в STM32F030F4P6, причину которой что-то не могу понять. В двух словах, есть SPI (SPI1 на PA4, PA5,...

DMA в F0: копирование periph-to-periph (на прим. SPI->USART)
Пытаюсь настроить DMA на копирование из SPI в USORT. Хочу обойтись одним каналом DMA и без промежуточных буферов в ОЗУ, чтобы сразу после...

USART в режиме SPI
Делал всё (почти) по даташиту. Функция обмена данными: unsigned char SendAM(unsigned char data) { while(!(UCSR2A &...

22
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 50
24.07.2012, 00:17
Студворк — интернет-сервис помощи студентам
Так что там, хеппи-енд ? все работает?
да все работает
свем СПАСИБО за помощь

теперь займусь приемом сигнала :)
внутренний АЦП =>rs485=> ПК
ну тут все проще

hordikor, спасибо за наводку на I2S, но к сожалению у меня сейчас Medium-density divices, а там I2S нет, это уже вторая подстава на этом камне (первая была 20 KB ROM),
вообщем в следущем образце буду использовать High-density divices
0
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
07.08.2012, 15:31
Привет!
У кого завалялся кусок кода для передачи и соотв. приема данных нецелого типа ftoot, double по USORT?
Заранее благодарен.
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 523
07.08.2012, 17:31
Цитата Сообщение от Kodir
Привет!
У кого завалялся кусок кода для передачи и соотв. приема данных нецелого типа ftoot, double по USORT?
Заранее благодарен.
Вы наверное неверно представляете себе передачу, передаются всего лишь байтики а во флоате или целом вы уже сами додумываетесь, исходя из протокола выбранного вами для передачи данных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.08.2012, 17:31

USART в роли SPI [Решено]
В документации на некоторые контроллеры AVR указано, что модуль USORT может работать как ведущий шины SPI и даже приведен пример кода, это...

ATmega128. Пересылка данных с USART в SPI
Доброго времени суток, мне требуется реализовать пересылку символов с USORT в SPI, на контроллере ATmega128. Кто может объясните как мне...

STM32F4-Discovery (Keil). Связь по USART и SPI
Доброго времени суток. Сразу скажу, что опыта в работе с МК не много и потому не бить сильно:) В данный момент на руках имеется...

Подскажите можно ли использовать USART и SPI интерфейсы одновременно?
скажем так: short k=0,g=0; main() { функция инициализации USORT; функция инициализации SPI; while(1) { if(функция...

SPI на VHDL - параллельная загрузка в регистр
Пытаюсь сделать нечто вроде SPI slave на VHDL. Надо, чтобы параллельные данные защелкивались в регистр сдвига передатчика по спадающему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru