Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

Когда модуль MSSP работает в качестве ведомого, тактовый сигнал на него поступает от внешнего устройства. Как и прежде, любые данные, предварительно загруженные в регистр SSPBUF, будут в начале каждой фазы тактового сигнала выставляться на вывод SDO. При этом биты СКЕ и СКР все равно необходимо устанавливать в зависимости от того, по какому фронту тактового сигнала удаленный передатчик выставляет свои данные и какой фронт для удаленного приемника является активным. Установки указанных битов зависят также от того, когда ведущий выставляет первый бит своих данных Dn — до первого тактового импульса или после. В любом случае модуль MSSP, сконфигурированный как ведомый, должен считывать значения этих битов со своего вывода SDI в конце каждой фазы, т. е. бит SMP должен быть сброшен в 0. Чтобы посмотреть подробные временные диаграммы, советую вам обратиться к фирменной документации на используемый микроконтроллер.

Когда микроконтроллер PIC работает в качестве ведомого SPI-устройства, то для его выбора удаленным ведущим используется вывод выбора ведомого . При появлении на выводе  напряжения ВЫСОКОГО уровня, даже в середине транзакции, внутренний счетчик битов сбрасывается в 0. Кроме того, вывод SDO переключается в режим выхода с открытым стоком, чтобы дать возможность другому устройству захватить линию.

∙ BF, SSPIF

После считывания микроконтроллером полного фрейма из восьми битов и пересылки его в буферный регистр SSPBUF бит BF устанавливается в 1, извещая о приеме нового байта. При этом также устанавливается флаг прерывания SSPIF в регистре PIR1 (см. Рис. 7.6 на стр. 224), и, если установлен соответствующий бит маски прерывания SSPIE в регистре PIE1, генерируется прерывание. Если модуль MSSP работает в качестве ведомого, а микроконтроллер находится в «спящем» режиме, то данное прерывание можно использовать для «пробуждения» микроконтроллера. Это возможно благодаря тому, что тактовые импульсы на выводе SCK формируются внешним ведущим устройством, и поэтому микроконтроллеру не обязательно находиться в активном режиме, т. е. системный генератор может быть выключен.

При считывании нового байта из регистра SSPBUF бит BF автоматически сбрасывается. Если же новое значение своевременно не считать, то принятый байт будет потерян и, сигнализируя об этом, будет установлен флаг SSPOV. Флаг прерывания SSPIF необходимо сбрасывать самостоятельно в процедуре обработки прерывания.

Вооружившись информацией, приведенной на Рис. 12.8 и Рис. 12.9, мы теперь легко можем перечислить операции, которые необходимо выполнить для осуществления передачи байта и/или приема нового байта:

1. Сконфигурировать модуль SSP;

• Сделать SCK, RC5/SDO выходами, a RC4/SDI и, при необходимости, RA5/ — входами.

• Выбрать режим работы модуля (ведущий/ведомый) и источник тактового сигнала.

• Задать активные фронты с помощью битов СКР, СКЕ и SMP.

• Разрешить работу модуля SSP установкой бита SSPEN.

2. Загрузить байт в регистр SSPBUF для инициирования передачи.

3. Если бит WCOL = 1, то сбросить его и перейти к п. 2.

4. Ждать установки бита BF.

5. Скопировать полученный байт данных из SSPBUF, при этом бит BF будет сброшен автоматически.

Для иллюстрации описанного процесса рассмотрим подпрограмму SPI_IN_OUT, которая объединяет в себе функции SPI_READ и SPI_WRITE, т. е. передает содержимое регистра DATA_OUT и возвращает полученный байт в регистре DATA_IN. Предполагается, что сдвиговые регистры удаленного устройства «защелкиваются» по нарастающему фронту, т. е. используется режим SPI 0,0.

Реализация этой подпрограммы зависит от установок модуля MSSP, заданных во время инициализации основной программы. В следующем фрагменте кода мы переводим модуль MSSP в режим ведущего и задаем тактовую частоту шины SPI равной fOSC/4:

     include "p16f877.inc’

MAIN bsf STATUS,RP0; Переключаемся в 1-й банк

         movlw b’11010111’; RC5/SD0 и RC3/SCK — выходы

         movwf TRISC; RC4/SDI — вход

         movwf b’11000000’; Устанавливаем биты SMP и СКЕ

         movwf SSPSTAT;

... ...

         bcf STATUS,RP0; Возвращаемся в 0-й банк

         movlw b’00100000’; Включаем SSP, пассивный уровень — НИЗКИЙ

         movwf SSPCON; Режим ведущего SPI, Fosc/4

Перейти на страницу:

Все книги серии Программируемые системы

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки