Что такое прерывание SPI (SPIE) в регистре управления SPI?

Я пытался понять прерывание SPI, т.е. что оно делает и почему оно используется? Чтение об этом в Интернете не помогло мне. Может ли кто-нибудь объяснить это простыми словами?

вы указываете как stm32, так и arduino. Это довольно разные платформы, и в некоторой степени поведение, о котором вы спрашиваете, будет зависеть от платформы.

Ответы (3)

SPIE или «SPI Interrupt Enable» используется для разрешения прерывания.

(Предполагая, что вы находитесь в режиме Master) Существует два способа передачи данных с использованием SPI:

1. Опрос: здесь вы записываете данные в регистр данных SPI (SPDR), а затем опрашиваете флаг завершения передачи SPI (SPIF).

2. На основе прерывания: в этом случае, когда вы включаете прерывание для SPI, вы записываете данные в SPDR. Контроллер передаст данные и вызовет прерывание, когда передача будет завершена.

Может возникнуть вопрос, почему есть прерывание на передачу, а не на прием, так и хочется ответить, но лучше бы вы с этим разобрались! :-)

Спасибо за ваш ответ, несколько дополнительных вопросов: 1. Каждый ли микроконтроллер допускает 2 способа передачи данных? 2. Что произойдет, если прерывание не разрешено (приводит ли это к ошибкам)? 3. Почему прерывание для режима передачи, а не для приема?
@ user44776 Я бы посоветовал вам прочитать о SPI в Википедии и на некоторых других сайтах.

Предполагая, что вы говорите о AVR, бит SPIE (SPI Interrupt Enable) предназначен для включения прерываний, связанных с SPI.

Количество прерываний, которые может иметь периферийное устройство SPI, зависит от устройства, но если мы возьмем в качестве примера Atmega8L , у него будет только одно прерывание.

Глядя на таблицу данных о том, что делает SPIE, говорится следующее:

• Бит 7 – SPIE: Разрешение прерывания SPI Этот бит вызывает выполнение прерывания SPI, если установлен бит SPIF в регистре SPSR и если установлен бит разрешения глобального прерывания в SREG.

В основном, когда SPIE AND SPIF AND глобальный бит разрешения прерывания установлен, вы получите прерывание.

Что за прерывание? Давайте посмотрим, что делает SPIF. В даташите написано следующее:

• Бит 7 – SPIF: Флаг прерывания SPI Когда последовательная передача завершена, устанавливается флаг SPIF. Прерывание генерируется, если SPIE в SPCR установлен и разрешены глобальные прерывания. Если SS является входом и имеет низкий уровень, когда SPI находится в режиме Master, это также установит флаг SPIF. SPIF очищается аппаратно при выполнении соответствующего вектора обработки прерывания. В качестве альтернативы, бит SPIF очищается, сначала читая регистр состояния SPI с установленным SPIF, а затем обращаясь к регистру данных SPI (SPDR).

Текст здесь (я думаю) довольно понятен, поэтому я не буду его повторять.

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

В типичном приложении, использующем SPI-связь, микроконтроллеру в какой-то момент необходимо получить данные. Чтобы получить данные, микроконтроллер должен считывать и записывать сигналы SPI определенным образом, как того требует протокол.

Теперь, поскольку микроконтроллер не может быть постоянно занят этим, микроконтроллеры иногда оснащаются аппаратным модулем, отвечающим исключительно за связь SPI. Это позволяет микроконтроллеру работать с другими вещами вместо обработки SPI.

Прерывание вызывается модулем SPI и используется для уведомления микроконтроллера о том, что байт (или больше) получен и готов к обработке.

Спасибо за ваш ответ, возникает ли прерывание при передаче или получении байта? Что произойдет, если прерывание не разрешено?
В зависимости от микроконтроллера у вас может быть прерывание приема, прерывание передачи или и то, и другое. Если он не включен, то нет возможности получить уведомление (в качестве альтернативы вы можете опросить полученный флаг) о том, что байт прибыл. Если вам не удастся прочитать данные из буфера, они могут быть перезаписаны или вызвать переполнение.