Авторизация


...

Кто на сайте?

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

  • inmiernikwesto

Статистика

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

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

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

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

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

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

 

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

 

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

ПП инициализация LCD в 4-х битном режиме.

01-06-2012 Super User

  В данном примере для работы с LCD задействован порт "С" и два бита порта "B" (6,7). Для удобства при инициализации микроконтроллера  порт "С" настроен; 4 младших бита на выход; старшие 4 бита на вход.  

ПП стат. индикации 7-сиг. индикатора (1 порт, 2 знака).

06-06-2012 Super User

В этой подпрограмме показан один из способов статического подключения к микроконтроллеру  двух семисегментных индикаторов на один порт. В ПП не задействовано прерывание. Индикаторы применены с дешифратором  4 -7 (в семисегметный код).

ПП для работы с EEPROM

12-03-2011 Alex

Накатал я тут библиотечку для работы с EEPROM, вдруг кому пригодиться.И так, сам код:  

Автоматический переключатель телевизионного сигнала

16-06-2011 Николай Викторов

Автоматический переключатель телевизионного сигнала

В своей практике очень часто сталкивался с необходимостью резервирования телевизионного сигнала (видео и аудио). Для этих целей есть профессиональные переключатели , правда  стоят «квадратных» денег, и при этом в большинстве конструкций  в качестве исполнительного устройства применяется реле, а все остальное...


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

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