реклама на сайте
подробности

 
 
> Как организовать передачу одного байта по SPI
Scorpline
сообщение Oct 30 2007, 16:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 25-10-07
Пользователь №: 31 737



Допустим в R1 лежит переменная... Как организовать ее передачу по SPI на ассемблере.
Может с кодом кто поможет....?
(изучаю асм... для 8051 ...много вопросов)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Oct 30 2007, 17:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Scorpline @ Oct 30 2007, 21:59) *
Как организовать ее передачу по SPI

Побитно. SPI это синхронный последовательный интерфейс. Каждый бит должен сопровождаться синхроимпульсом. А каждый фрейм/кадр (последовательность несокольких байт) еще и сигналом выборки CS. Если реализуете SPI программно, то алгоритм примерно такой (для SPI mode 3).
Допустим имеем переменные:
SPIDataOutput - байт данных для передачи по SPI
SPIDataInput - байт данных в который поместим результат приема с SPI
SPIBitCntr - счетчик бит
SPIMask - маска для передачи/приема
Инициализируем переменные:
SPIDataInput=0
SPIBitCntr=0
SPIMask=0x80
1) Сбросили пин, назначенный сигналом CS.
2) Сбросили пин, назначенный SCLK.
3) Наложили маску по AND на байт данных, предназначеный для передачи SPIDataOutput & SPIMask. Если результат = 0, то сбросили пин, назначенный как MOSI (Master Output Slave Input), в противном случае установили MOSI.
4) Подождали некоторое время, соответствующее длительности полупериода SCLK для выбранной частоты тактирования.
5) Установили SCLK.
6) Подождали некоторое время, соответствующее длительности SCLK для выбранной частоты тактирования.
7) Считали состояние пина, назначенного как MISO (Master Input Slave Output). Если состояние MISO = 1, то установили бит в переменной SPIDataInput, наложив по OR маску SPIMask. SPIDataInput=SPIDataInput | SPIMask.
Сделали сдвиг маски SPIMask= SPIMask >> 1.
Увеличили счетчик бит SPIBitCntr=SPIBitCntr+1
8) Если счетчик бит SPIBitCntr меньше 8, то переход на шаг 2. Если больше или равно 8, то установим CS.
Все! В результате будет передан по SPI один байт, значение которого было в SPIDataOutput и принят байт, значение которого лежит в SPIDataInput.
Обращаю внимание, что SPI это интерфейс для обмена данными. Чтобы что-то принять по SPI нужно что-то передать по SPI!
Цитата(Scorpline @ Oct 30 2007, 21:59) *
Может с кодом кто поможет....?
(изучаю асм... для 8051 ...много вопросов)

Увы, не сведущ в 51 и тем более в асм. sad.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 01:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016