2014-10-07 4 views
0

Я действительно новичок в встроенном программировании, но мне была задана задача написать код C для программирования устройства, которое я могу отправлять командам (16-разрядные слова). В спецификации, которая была предоставлена ​​мне, есть раздел с определенными «минимальными таймингами» устройства, например «Enable to First Clock Setup Time = 150ns». Существуют другие тайминги, такие как «Ширина часов = 50 нс» и т. Д.Как использовать минимальные тайминги при программировании устройства?

Устройство имеет три основных контакта: EN, CLK и DATA. Первоначально устройство отключено, и я подумываю использовать государственные машины для отправки команды, но я смущен о минимальных таймингах.

Так что мои вопросы:

-Как я включаю/компенсацию указанных минимальных таймингов, указанных на листе.

-Как смоделировать задержку в C?

+0

Вы управляете всеми тремя контактами? У вас есть какой-то таймер в процессоре? Если у вас есть * no * timer, есть ли какие-либо инструкции, которые занимают точное количество тактовых циклов? Знаете ли вы время одного такта? –

+0

Предполагая, что часы составляют приблизительно 10 МГц, я думаю, это означает, что каждый такт составляет около 100 нс. Я считаю, что у меня есть контроль над булавками (пока). –

+0

Как вы заявляете, каждый такт составляет ~ 100 нс, а время, необходимое для программирования, меньше 100 нс. Поэтому вы, вероятно, можете игнорировать эти минимальные тайминги. Однако устройство, вероятно, имеет индикацию состояния, которая может быть прочитана из кода C. Поэтому прочитайте состояние, чтобы определить, готово ли устройство для следующей команды. – user3629249

ответ

2

Это минимальные тайминги - самый простой способ гарантировать, что вы находитесь в пределах спецификации. до превышать их! Это всего лишь занимает больше времени, чем минимум - это легко; было бы сложно, если бы они были максимум таймингов.

Если интерфейс реализован в программном обеспечении, то в большинстве случаев превышение этих таймингов будет простым, и процессор GPIO не только будет иметь пределы частоты, которые могут сделать тайминги ниже, чем это маловероятно, время цикла процессора и количество инструкций необходимые для генерации сигналов, скорее всего, не позволят вам приблизиться к этим минимальным таймингам.

При использовании интерфейса аппаратных средств связи, таких как SPI для генерации необходимых сигналов, то вы имеете гораздо более точный контроль, и это просто случай настройка интерфейса регистров для создания желаемого в пределах спецификации времени - шансы вы можете их игнорировать; вам может потребоваться добавить задержку, если ваш процессор и GPIO очень быстро; но я был бы очень удивлен, если бы вам нужно было предпринять какое-либо конкретное действие для заданных таймингов. Задержки новых десятков наносекунд лучше всего применять, добавляя инструкции NOP, более длительные задержки, возможно, цикл занятости, опрос таймера, или для более длительных задержек, которые все еще ждут прерывания таймера, делая что-то полезное.

Критически не нужен, чтобы достичь этих минимальных таймингов - просто не генерировать сигналы, которые за пределами спецификации производителей.