.
Реализация работы с регистрами на ассемблере.
Для этого предусмотрено семь инструкций состоящей из 3-битового opcode и 5-битового аргумента (1 байт),opcod - команда , аргумент - при работе с регистрами содержит адрес регистра.
Рассмотрим все инструкции и реализуем в ПП на асемблере:
Для того что бы прочитать регистр управления ,к примеру ERDPTL(0Х00),нужно передать по SPI команду "000000000", для прочтения ECON1 (0X1F) передать "00011111" и получить значение данного регистра , за исключением регистров MAC и MII , для получения правильных значений нужно считывать второй байт .Не забывая конечно в каком банке находится необходимый нам регистр, кроме последних 5 регистров в каждом банке , которые присутствуют во всех банках и переключать банки соответственно нет необходимости. Ну и конечно регистры PHY , к которым прямого доступа нет и для работы с ними нужно обращаться к "посреднику" регистрам управления MII .Как это делать было рассмотрено выше. Для индификации регистров MAC и MII добавим в ПП флаг. Хотя по большому счету они нам нужны только при начальной конфигурации enc28J60.
В микроконтроллере PIC18F46k20 есть модуль SPI , который мы и задействуем. Настроим его для правильной работа с enc28j60 (CPOL=0, CPHA=0) . Модуль находится в PortC , задействуем для сигнала CS и REZET свободные ножки 0,1.
Если будут задействованы другие "ножки" , то соответственно нужно внести изменения в ПП.Для микроконтроллера не имеющего данного модуля можно реализовать его программно.
Для чтения и записи байта данных по SPI напишем следующую ПП:
Как видите она проста , в регистр TXdata должен быть предварительно записан байт для передачи (при передачи).Прочитать полученное значение нужно из регистра RXdata.
С SPI все, перейдем к чтению регистра управления:
Первоначально мы проверяем банк в каком находится данный регистр , это нужно для того что бы не переключать каждый раз банк , а для начало проверить , может он уже в этом банке . Хотя можно и отказаться от этой ПП и устанавливать каждый раз банк , когда нужно обратиться к регистру . Подпрограмма проверки банку будет ниже . Затем мы выбираем МК сбросом ножки CS . Записываем адрес регистра (ADRreg) в регистр TXdata для передачи . Сама команда чтения регистра имеет значение 000ХХХХХ , по этому в ПП команда не указывается , а учитывается в адресе регистра 000 и адрес регистра . Далее передаем значение в enc28J60 и при следующей передаче получаем значение данного регистра управления. Если это регистр MAC или MII то при проверке флага в регистре ( Flag,0) мы прочитаем еще раз исключив тем самым не правильное значение . Устанавливаем ножку CS. Результат получим в регистре RXdata.
В тестовой программе , для того что бы прочитать все регистры управления , я поступил проще , я их все прочитал по два раза без проверки флага и получил правильные значения.
Запись регистра управления:
В этой ПП практически так же , как и при чтении , только к адресу регистра добавляется команда записи регистра 010ХХХХХ , вторым байтом передается байт данных , заранее записанного в регистр "TXper".
Чтение буфера:
Отдельной ПП чтения буфера (как и записи ) нет .Чтение буфера реализована в -ПП "RW_PAKET" . Для чтения буфера необходимо сбросить CS , передать команду чтения буфера 0Х3А ,прочитать необходимое количество байт и поднять CS.
Запись буфера:
Для записи в буфер необходимо сбросить CS , передать команду записи в буфер 0Х7А , передать необходимое количество байт и поднять CS.
Установка бита по маске:
Предварительно необходимо указать адрес регистра (ADRreg),банк (Prov_banka) и байт данных (SetBitReg).
Сброс бита по маске:
Предварительно необходимо указать адрес регистра (ADRreg),банк (Prov_banka) и байт данных (ClearBitReg).
Мягкий сброс enc28j60:
Процедура сброса софта заключается подачей команды 0хFF и паузой в 1 мс.
Инструкции разобрали. Для удобства проверки выбранного банка применим эту ПП.
В результате , если при проверке банк окажется тот же , то процедуры смены банка не будет.
На этом вроде как и закончили с ПП и переходим к формированию нашей программы . Начнем с инициализации enc28j60 :
Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2021 © ChipMK.ru
![]() |
|