Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Проектирование МП систем (ч 2).doc
Скачиваний:
96
Добавлен:
08.03.2015
Размер:
2.59 Mб
Скачать

41

Рис. 6.37. Алгоритм программы для ввода данных в ОЗУ

(одноуровневое представление)

Рис. 6.38. Алгоритм программы для ввода данных в ОЗУ

(двухуровневое представление)

Ошибки по ШД проявляются в том, что из ОЗУ считываются данные, отличающиеся от тех, которые в него записывались МП. Эти ошибки возникают вследствие неисправностей в линиях ШД (обрывы, замыкания), а также в аппаратных средствах ОЗУ с этой стороны.

Для выявления подобных ошибок необходимо попытаться записать в каждую ячейку ОЗУ два взаимнообратных решетчатых кода 5555h и AAAAh. Если это удается для всех ячеек, то ОЗУ работоспособно. В противном случае ОЗУ неисправно, и необходимо зафиксировать ошибку.

Эта идея реализована ГСА модуля DTstContr, приведенной на рис.6.39. Для сохранения информации в тестируемом ОЗУ содержимое каждой ячейки сохраняется перед ее контролем, а затем восстанавливается.

Для удобства разработки алгоритма на этом же рисунке приведена выкопировка из макроуровня программы (см. рис.6.37), относящаяся к этому модулю. Она наглядно представляет обрабатываемые модулем входные и выходные данные, не позволяя забыть ни об одном из них.

2. Модуль "Тестовый контроль озу по ша" (aTstContr)

Этот модуль предназначен для реализации тестового контроля ОЗУ по ША (см. рис. 6.37).

Ошибки по ША проявляются в том, что некоторые данные записываются не в те ячейки, которые адресуются МП. Эти ошибки возникают вследствие неисправностей в линиях ША (обрывы, замыкания), а также в аппаратных средствах ОЗУ с этой стороны. Они приводят к совмещению нескольких ячеек памяти и, следовательно, к уничтожению ранее записанных данных (по одному адресу) путем записи новых данных (по другому адресу).

Для выявления подобных ошибок необходимо во все ячейки ОЗУ сначала записать некоторый закономерно изменяющийся код (как правило, адрес той же ячейки), а затем проанализировать записанные числа. При исправности ОЗУ наложение ячеек отсутствует, и считанное содержимое каждой из них будет равно ее адресу. В противном случае ячейки памяти накладываются друг на друга, что приведет к замене ранее записанного числа другим (позже записываемым) числом. В результате считанное содержимое некоторых ячеек не будет совпадать с их адресом. При обнаружении этого факта необходимо зафиксировать ошибку.

Эта идея реализована ГСА модуля ATstCotr, приведенной на рис. 6.40. Для уменьшения времени выполнения модуля тестируются не все ячейки ОЗУ, а лишь так называемые ячейки влияния. К ним относится ячейка по нулевому адресу, а также 16 ячеек, в адресе которых имеется единственный единичный бит (А0, А1, А2, . . ., А15). Для сохранения информации в ячейках влияния их содержимое сохраняется перед тестированием и восстанавливается после него.

Рис. 6.39. Алгоритм модуля "Тестовый контроль ОЗУ по ШД"

Рис. 6.40. Алгоритм модуля "Тестовый контроль ОЗУ по ША"

3. Модуль "Вывод сообщений об ошибках" (ErMesOut)

Задачей этого модуля является вывод на знакосинтезирующие дисплеи сообщений о соответствующих ошибках на основании анализа признаков ошибок ввода с клавиатуры и тестового контроля (см. рис. 6.37).

ГСА модуля ErMesOut приведена на рис. 6.41. При одновременном наличии обеих ошибок тестового контроля ОЗУ на дисплей будет выведено сообщение об отказе ОЗУ по шине данных. Такое решение обусловлено тем, что при неисправной шине данных тест шины адреса гарантированно зафиксирует ошибку даже при отсутствии неисправности в ней.

Рис. 6.41. Алгоритм модуля "Вывод сообщений об ошибках"

4. Модуль "Ввод режимов" (ModeInput)

Этот модуль обеспечивает ввод информации о состоянии управляющих переключателей: "Режим" ("Ввод"/"Просмотр"), "Тип ввода" ("Адрес"/"Данные")и "Адрес" ("+1"/"1"), определяющих порядок функционирования устройства.

Для уменьшения аппаратных затрат эта информация должна вводиться через один порт в упакованной форме. Для удобства ее использования упакованный формат должен распаковываться, и состояние каждого переключателя представляться отдельным флаговым байтом (см. рис. 6.37). Эта идея реализована в ГСА модуля ModeInput, приведенной на рис. 6.42,а.

Управляющие переключатели являются электромеханическими переключателями (кнопками и тумблером). При переключении всем им присуще явление дребезга (вибрации) контактов. Это явление заключается в том, что электрически переключение фиксируется не одновременно с механическим переключением, а после некоторого колебательного процесса, обусловленного упругостью контакта. На рис. 6.42,б приведена временная диаграмма установления электрического выходного сигнала при механическом переключении кнопки.

Эффект дребезга контактов очень вреден, так как он вызывает формирование неопределенного множества активных выходных уровней при однократном включении кнопки. В случаях, когда это приводит к неправильной работе системы, дребезг контактов необходимо гасить. Эти случаи имеют место при реализации накапливающих функций, задаваемых кнопками ( подсчет количества включений кнопки, сдвиг числа по сигналу с кнопки и т.п.). При реализации установочных функций дребезг контактов можно игнорировать. Однако, при этом необходимо учитывать то, что цикличность программы, часто имеющая место, придает практически всем программнореализуемым функциям накапливающий характер. Это обусловлено тем, что при переходе от цикла к циклу изменяются адреса памяти, числовые маски и т.п., а длительность программного цикла часто много меньше, чем время дребезга контактов (как правило, примерно 10 миллисекунд).

Для гашения дребезга контактов могут использоваться аппаратные средства. Однако, в МПС это целесообразно делать программным путем. Суть программного гашения дребезга состоит в обнаружении факта многократного считывания одного и того же значения входного кода. На практике считают, что, если 50 раз подряд считывается один и тот же входной код, то дребезг контактов закончился, и выходной сигнал переключателя несет достоверную информацию. Гашение дребезга контактов необходимо и при включении, и при выключении кнопки, а выход из программного модуля считывания информации с переключателей при отсутствии особых требований должен осуществляться лишь после действительного механического освобождения кнопки.

Рис. 6.42. Алгоритм модуля "Ввод режимов":

а) общий алгоритм; б) эффект дребезга контактов;

в) алгоритм гашения дребезга контактов

Исходя из этого, в представленном алгоритме ввода режимов (см. рис. 6.42,а) осуществляется гашение дребезга контактов. Так как среди управляющих переключателей имеется тумблер, то гашение дребезга выполняется при любом обращении к ним. ГСА подпрограммы гашения дребезга контактов VibrDestr, реализующая изложенную идею, приведена на рис. 6.42,в.

В ней выполняется многократное сравнение запомненного исходного состояния переключателей с текущим состоянием, получаемым в результате циклического считывания. При каждом совпадении этих состояний инкрементируется счетчик повторений, а при несовпадении процесс начинается сначала. В случае, если в счетчике повторений накапливается число, равное установленному порогу, то фиксируется конец дребезга контактов.

Для упрощения реализации модуля ModeInput флаговые байты режимов Mode, AddrInc и AddrDec сначала устанавливаются в некоторое значение, которое затем при необходимости корректируется. Флаг типа ввода InType в режиме "Ввод" изменяет свое значение только по сигналам с кнопок "Тип ввода" ("Адрес"/"Данные"). При отсутствии этих сигналов тип ввода не изменяется.

В режиме "Просмотр" с клавиатуры может вводиться только адрес. Поэтому в нем флаг типа ввода InType принудительно устанавливается в положение "Адрес" независимо от состояния переключателей "Тип ввода".

Далее анализируются значения переключателей модификации адреса на значения "+1", "1" и устанавливаются соответствующие флаговые байты. После этого осуществляется выход из модуля.

Очевидно, что при таком построении алгоритма возможен выход из модуля до механического отпускания кнопок. В связи с этим за счет цикличности программы при однократном включении некоторой кнопки будет многократно обнаружено ее активное значение. Без принятия дополнительных мер это вызовет многократную модификацию адреса, что недопустимо. Для исключения подобного явления флаги модификации адреса AddrInc и AddrDec устанавливаются лишь при первом появлении, то есть по переднему фронту (ПФ) сигналов "+1", "1".