Авторизация


...

Кто на сайте?

Сейчас 233 гостей и один зарегистрированный пользователь на сайте

  • heydeeste

Статистика

-Посетители : 22989
-Материалы : 209

Пользователь сайта продает...

  Плата питания

Пользователь сайта покупает...

Подключение ENC28J60 + PIC к локальной сети .

Автор: Николай Викторов Просмотров: 14349

 

Реализация работы с регистрами на ассемблере.

 

Для этого предусмотрено семь инструкций  состоящей из 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 :

Случайные статьи....

Prev Next

Каталог сайтов.

04-10-2014 Super User

Каталог сайтов.

RadioMaster - Сайт для начинающих радиолюбителей. Большой каталог схем, программы для моделирования схем. Проектирование роботов, и многое другое!       РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум.       Сайт радиолюбителей radiofanatic.ru. Схемы различных радиоустройств,...

1-Wire эмулятор

04-05-2012 Sergey Roslik

1-Wire эмулятор

     Уникальность микросхем Dallas с интерфейсом 1-Wire заключается в необходимости использования для связи с ними только одной сигнальной линии и общего проводника. Питание и связь могут осуществляться через одно соединение. Режим связи – асинхронный, полудуплексный, который строго следует схеме...

Быстрая настройка MPLAB IDE

24-04-2012 Super User

MPLAB IDE, как и упоминалось выше - это пакет программ, включающий в себя , редактор текстов,  симулятор, ассемблер и многое другое. В конечном итоге программист получит на "выходе" файл с расширением "HEX".  В этой главе мы кратко рассмотрим быструю настройку...

Сравнения двух беззнаковых 16-разрядных чисел

21-09-2011 Александр Милевский

Простое сравнения двух беззнаковых 16-разрядных чисел  X и Y. старший байт H, младший байт L   movf    HX,W subwf   HY,W btfss   STATUS,C goto    Xbol     ; результат: X > Y btfss...


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru