Предыдущая Следующая

Чтение байта данных в I2C EEPROM по произвольному адресу осуществляется путем вызова функции rd_byte24LC64(addr_I2C). В отличие от предыдущего случая, эта функция возвращает управление только после окончания чтения, детектируя это событие по текущему значению переменной endjrd (признак окончания чтения), которую она сбрасывает перед началом чтения, а затем ожидает ее установки. Признак окончания чтения endjrd устанавливается функцией I2CInterrupt() после передачи логической схемой интерфейса 12С LPC2129 условия STOP 12С.

33.9. Интерфейс обмена с внешним устройством через SPI

Модуль последовательного периферийного интерфейса SPI микроконтроллера LPC2000 в предлагаемом ниже проекте используется для обмена данными с внешним устройством, в качестве которого выступает микросхема AD7705 производства фирмы «Analog Devices* [14]. Микросхема AD7705 представляет собой 2-канальное сигма-дельта-АЦП с встроенными модулями SPI, входного аналогового буфера, программируемого усилителя, тактового генератора и регистрового банка контроля и управления.

Взаимодействие микроконтроллера LPC2000 с AD7705 через SPI иллюстрируется проектом, все файлы которого находятся в каталоге SPI. Функции и заголовки, относящиеся к модулю SPIO LPC2129, содержатся в файлах spi.c и spi.h. Функции и заголовки, относящиеся к организации обмена через SPI с AD7705 и к функционированию самой этой микросхемы, содержатся в файлах AD7705.C и AD7705M. Основная программа, реализующая проект, содержится в файле main.c. Все перечисленные файлы приведены ниже в этом разделе.

Файл spi.c

//------------------------------------------------------------------------

//ПО обслуживания модуля SPIO

//------------------------------------------------------------------------

tinclude "hardware.h" //подключение специальных заголовков и определений

tinclude "spi.h" //подключение специальных заголовков и определений

volatile U8 rx_byte; //принятый через SPIO байт

//Функция инициализации модуля SPIO

void SPlOinitO

{

PINSELO_bit.Р0_4 = 0x01; //линию Р0.4 сделать выходом SCK SPI0 PINSEL0_bit.Р0_5 = 0x01; //линию РО.5 сделать входом MISO SPIO PINSEL0_bit.P0_6 = 0x01; //линию Р0.6 сделать выходом MOSI SPIO PINSEL0_bit.P0_7 = 0x01; //линию Р0.7 сделать входом SSEL SPIO SOSPCCR_bit.COUNTER = 40; //задание длительности цикла SPI в циклах PCLK

S0SPCR_bit.CPHA S0SPCR_bit.CPOL S0SPCR_bit.MSTR S0SPCR_bit.LSBF S0SPCR_bit.SPIE

1 1

1 0 0

//58.9824 МГц/4/40 = 0.36864 МГц //СРНА = 1 //CPOL = 1

//режим SPIO - мастер

//первым передается MSB (старший значащий бит) //прерывания от SPI0 запрещены

//Функция передачи байта и приема байта через SPI0 U8 SPl0rx_tx_byte(U8 tx_byte)

while (S0SPSR_bit.SPIF rx_byte = SOSPDR; return rx_byte;

0);

//

Файл spi.h

//----------------------------------------•-------------------------------


Предыдущая Следующая



НА ГЛАВНУЮ | ЧТО ТАКОЕ PIC ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz