Перейти к содержанию
    

не понятно как поступать в такой ситуации:

есть несколько процессов

2 из них должны изменять значение сигнала

например, UART TX:

один процесс записывает значения в регистр сдвига по внешнему сигналу

второй по клоку сдвигает этот регистр

 

если первый процесс записал 00001111, то при сдвиге второй процесс будет записывать в регистр значение х0000111, т.е. получится, что в текущий момент времени один процесс обнуляет бит №3, а второй устанавливает в единицу этот бит. :(

что же делать в этом случае?

--------

PS вообще-то идея есть, но хотелось бы иметь варианты решения

 

 

В случае уарта не понятно зачем 2 процесса... По тому что пишите, по тому процессу и сдвигайте. а когда байт наберете генерите строб и забирайте целиком... Если вы хотите развязать момент помещения данных в регистр и передачу, то правильнее всего чтобы первый процесс клал данные в регистр и генерил строб что есть новые данные, а второй как увидит этот строб забирал бы данные в свой сдвиговый регистр а потом потихоньку их выдавливал наружу, а выдавив останавливался... И рассинхрона не будет, и одновременной записи в 1 бит тоже... так кстати и в процах УАРТ сделан, всегда есть 2 регистра, один на отправку куда пихаете данные параллельно, а второй сдвиговый который как раз отправляет, и в него данные копируются как только посылаются предыдущие или как появляются новые данные в первом...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В случае уарта не понятно зачем 2 процесса... По тому что пишите, по тому процессу и сдвигайте. а когда байт наберете генерите строб и забирайте целиком... Если вы хотите развязать момент помещения данных в регистр и передачу, то правильнее всего чтобы первый процесс клал данные в регистр и генерил строб что есть новые данные, а второй как увидит этот строб забирал бы данные в свой сдвиговый регистр а потом потихоньку их выдавливал наружу, а выдавив останавливался... И рассинхрона не будет, и одновременной записи в 1 бит тоже... так кстати и в процах УАРТ сделан, всегда есть 2 регистра, один на отправку куда пихаете данные параллельно, а второй сдвиговый который как раз отправляет, и в него данные копируются как только посылаются предыдущие или как появляются новые данные в первом...

 

Да, я так и сделал-по аналогии с уартами процов. В симуляторе, вроде работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...