Главная » Bascom-8051, Basic, Железо » Программирование устройств с шиной Microwire

0

В новой версии компилятора Bascom (начиная с 1.20) добавлены операторы для работы с микросхемами, имеющими последовательный интерфейс Microwire. Интерфейс Microwire внешне во многом похож на SPI – те же четыре линии (DI – прием данных, DO – выдача данных, CS – выбор кристалла, Clk – синхронизация). Однако, отличие от SPI существенно – число посылаемых бит не кратно восьми. Таким образом, полноценная реализация интерфейса Microwire имеющимися операторами SPI или аппаратным SPI затруднительна. Основное применение интерфейса  Microwire   связано  с  микросхемами  энергонезависимой  памяти  серии  93С06  –  93С57,  главное достоинство которых связано с высокой надежностью хранения данных и с очень высокой скоростью считывания. Современные  микросхемы  с  интерфейсом  Microwire  (серия  45Сххх)   имеют  наибольшую  емкость  из  всех микросхем с последовательным доступом.

Микросхемы с шиной Microwire могут работать с 8-ми и 16-разрядными данными. Выбор  длины слова производится подключение вывода “ORG” шине питания (16 разрядов) или к  общему проводу (8 разрядов). Соответственно этому изменяется длина адреса. Компилятор  «узнает» о способе подключения микросхемы с помощью опции AL (длина адреса)  оператора конфигурации Config Microwire (см главу 4). Там же описывается подключение линий шины к микроконтроллеру.

Для работы с шиной Microwire предусмотрено четыре оператора:

а) оператор MWINIT – устанавливает выводы, предназначенные для интерфейса  Microwire, в исходное состояние. Применяется в начале программы, после сброса процессора;

б)  оператор  MWREAD  –  считывает  значение  в  переменную  из  интерфейса  Microwire.  Применяется столько раз, сколько нужно произвести операций считывания данных. В  зависимости от длины слова данных

работает с одно или двух байтными переменными. Адрес может быть задан в непосредственном  виде или с

помощью одно- или  двухбайтной переменной;

в) оператор MWWRITE – записывает значение переменной в интерфейс Microwire. Записывает одно или двухбайтные  данные.  Адрес  также  может  быть  задан  в  непосредственном  виде  или  с  помощью  одно-  или двухбайтной переменной. После этого оператора необходимо применять оператор временной задержки на 2-10 мс (см. описание применяемой микросхемы), т.к.  опрос готовности устройства, в которое производится запись, не выполняется;

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

Set Cs : Bitwait Dout Set : Reset Cs

Ниже  приведена  таблица,  содержащая изображения  временных  диаграмм, формируемых  описанными

операторами с 16-битном и 8-битном режимах.

Далее предлагается пример тестовой программы с использованием шины Microwire. В  этой программе создается и записывается в микросхему EEPROM массив двухбайтовых чисел, а затем он считывается обратно. Для  усложнения  задачи  и  демонстрации  возможностей  Bascom  микросхема  93С46  включена  в  8-разрядном режиме, а двухбайтовые значения записываются и  считываются в два приема. Такое решение наиболее часто применяется практически, когда приходится сохранять значения переменных различной длины. В этом примере применена   дополнительная  программа  (Mwrdyw),  написанная  на  ассемблере  и  обеспечивающая   ожидание появления  сигнала готовности микросхемы, в которую произведена запись.  Особенность этой подпрограммы заключается   в   том,   что   ожидание   готовности   производится   только   10   мс,   благодаря   чему   становится невозможным «зависание» процессора при  неисправности микросхемы EEPROM, а при исправной микросхеме скорость работы программы увеличивается.

Оператор

Временная диаграмма

16-битный режим

Mwwopcode &B100110000 , 9

Генерировать команду разрешения записи и стирания (для 93С46 вывод “ORG”=1)

                                                                       

|                                     |   CS

_  _  _  _  _  _  _  _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |    Clk

      

   |  |     |      |                    DI

SB OP1 OP2 1  1  0  0  0  0

Mwwopcode &B100000000 , 9

Генерировать команду запрещения записи и стирания (для 93С46 вывод “ORG”=1)

                                                                       

|                                     |   CS

_  _  _  _  _  _  _  _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |    Clk

      

   |  |                                    DI

SB OP1 OP2 0  0  0  0  0  0

Mwread X , &B110 , 0 , 2

Считать значение из ячейки по адресу 0 в переменную X (два байта)

(для 93С46 вывод “ORG”=1)

                                                                                                _           

|                                                              |   CS

_  _  _  _  _  _  _  _  _  _  _   _        _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ _   | |_| |    Clk

|      |  X  X  X  X  X  X  \            _               DI SB OP1 OP2 A5 A4 A3 A2 A1 A0

0  0  0  0  0  0

         _ _        

————————————- X  X  X  X _ _X   X  X   DO

0 D15 D14 D13      D1  D0

Mwwrite X , &B101 , 0 , 2

Записать значение переменной X (два байта) в ячейку с адресом 0

(для 93С46 вывод “ORG”=1)

                                                                                                _           

|                                                              |   CS

_  _  _  _  _  _  _  _  _  _  _   _        _  _

    | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ _   | |_| |    Clk

         _ _        

|  |  |  X  X  X  X  X  X  X  X  X  X _ _X  X  X   DI SB OP1 OP2 A5 A4 A3 A2 A1 A0 D15 D14 D13     D1 D0

0  0  0  0  0  0

8-битный режим

Mwwopcode &B1001100000,10

Генерировать команду разрешения записи и стирания (для 93С46 вывод “ORG”=0)

                                                                             

|                                        |   CS

_  _  _  _  _  _  _  _  _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |_| |    Clk

      

   |  |     |      |                        DI

SB OP1 OP2 1  1  0  0  0  0  0

Mwwopcode &B1000000000,10

Генерировать команду запрещения записи и стирания (для 93С46 вывод “ORG”=0)

                                                                             

|                                        |   CS

_  _  _  _  _  _  _  _  _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |_| |    Clk

      

   |  |                                        DI

SB OP1 OP2 0  0  0  0  0  0  0

Mwread Y , &B110 , 0 , 1

Считать значение из ячейки по адресу 0 в переменную Y

(1 байт)

(для 93С46 вывод “ORG”=0)

                                                                                                _           

|                                                              |   CS

_  _  _  _  _  _  _  _  _  _  _   _        _  _

    | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ _   | |_| |    Clk

|      |  X  X  X  X  X  X  X  \         _              DI SB OP1 OP2 A6 A5 A4 A3 A2 A1  A0

0  0  0  0  0  0  0

         _ _        

—————————————– /  X  X _ _X   X  X   DO

0 D7  D6      D1  D0

Mwwrite Y , &B101 , 0 , 1

Записать значение переменной Y ( 1 байт) в ячейку с адресом 0

(для 93С46 вывод “ORG”=0)

                                                                                                _           

|                                                              |   CS

_  _  _  _  _  _  _  _  _  _  _   _        _  _

    | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ _   | |_| |    Clk

         _ _        

|  |  |  X  X  X  X  X  X  X  X  X  X _ _X  X  X   DI SB OP1 OP2 A6 A5 A4 A3 A2 A1  A0 D7 D6      D1 D0

0  0  0  0  0  0  0

‘————————————————————- ‘         тестирование устройства на шине Microwire

‘————————————————————- Dim Tmp1 As Byte , Tmp2 As Byte

Dim Tmp3 As Byte , Tmp4 As Byte , Tmpw As Word Dim Tmp(20) As Word

‘——————————–

‘применим в 93C46 8-битном режиме

Config Microwire = Pin , Cs = P1.0 , Din = P1.1 , Dout = P1.2 , _ Clock = P1.3 , Al = 7

Mw_cs Alias P1.0 : Mw_dout Alias P1.2 ‘определим имена портов линий Cs и Dout ‘——————————–

Mwinit

Mwwopcode &B1001100000 , 10 ‘разрешим запись и стирание Mwwopcode &B1001000000 , 10 ‘проведем общее стирание Gosub Mwrdyw                ‘подождем стирания

For Tmp1 = 1 To 20              ‘заполним массив

Tmpw = Tmp1 : Tmpw = Tmpw * Tmpw   ‘квадратом индекса

Tmp(tmp1) = Tmpw

Next                            ‘следующее значение

‘——————————–

Tmp2 = 0                    ‘установим начальный адрес EEPROM

For Tmp1 = 1 To 20              ‘запомним массив

Tmpw = Tmp(tmp1)            ‘в EEPROM

Mwwrite Low(tmpw) , &B101 , Tmp2 , 1 : Incr Tmp2 : Gosub Mwrdyw Mwwrite High(tmpw) , &B101 , Tmp2 , 1 : Incr Tmp2 : Gosub Mwrdyw

Next                            ‘следующее значение

‘——————————–

For Tmp1 = 1 To 20              ‘очистим массив

Tmp(tmp1) = 0

Next

‘——————————–

Tmp2 = 0                    ‘установим начальный адрес EEPROM

For Tmp1 = 1 To 20              ‘считаем массив по одному байту

Mwread Tmp3 , &B110 , Tmp2 , 1 : Incr Tmp2      ‘считаем по одному байту

Mwread Tmp4 , &B110 , Tmp2 , 1 : Incr Tmp2

Tmpw = Makeint(tmp4 , Tmp3) : Tmp(tmp1) = Tmpw  ‘соберем из двух байт

Next                            ‘следующее значение

Mwwopcode &B1000000000 , 10 ‘запретим запись и стирание

‘——————————–

‘п/п ожидания готовности устройства на шине Microwire после операции записи

Mwrdyw:

$asm

Setb {mw_cs}                ;выберем микросхему

Mov A , #100                ;сможем ждать 10 мс

Mwrw1:

Mov B , #50                 ;подцикл 100 мкс

Mwrw2:

Djnz B , Mwrw2

Jb {mw_dout} , Mwrw3        ;проверим наличие бита готовности

Djnz A , Mwrw1              ;если он не появился ждем готовности 10 мс

Mwrw3:

Clr {mw_cs}                 ;снимем сигнал выборки

$end Asm Return End

Источник: М.Л.Кулиш, СПРАВОЧНИК ПО ПРОГРАММИРОВАНИЮ BASCOM-8051, Краснодар 2001

По теме:

  • Комментарии