Авторизация


...

Кто на сайте?

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

  • thamohmedsaman

Статистика

-Посетители : 28065
-Материалы : 210

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

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

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

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

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

 

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

 

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

Управление ИК 5 каналов.

03-01-2012 Tamerlan

Управление ИК 5 каналов.

PIC12F675 Передатчик и приёмник ИК канал код RC5. Одно нажатие кнопки включает выход, второе нажатие выключает. По деталям транзистор можно использовать кт3102 ( я нашёл смд неизвестного происхождения работает), фотоприёмник какой был в магазине, он идёт со встроенным усилителем.В прошивке...

Двоичная арифметика.

19-04-2012 Super User

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

CLRF

02-02-2012 Super User

CLRF Очистка регистра f Синтаксис: [label] CLRF f,a Операнды: 0 <= f <= 255 a Е [0,1] Операция: 00h->f 1-> Z Изменяет флаги: Z Код: 0110 101a ffff ffff Описание: Команда обнуляет содержимое выбранного регистра. Значение бита доступа к памяти a обрабатывается стандартным образом (по умолчанию a=1) Слов: 1 Циклов: 1 Пример: ...

Монитор электросети.

29-10-2014 Kapiton

Монитор электросети.

Статья предоставлена для публикации автором под псевдонимом «Kapiton». В данной статье автор рассказывает о своем устройстве контроля и регистрации различных показаний электросети 220 вольт, что позволяет оценить качество подаваемого питания электроснабжающей организацией…            


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

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