Форумы Modlabs.net: SPI и прерывания... - Форумы Modlabs.net

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

SPI и прерывания...

#1 Пользователь офлайн   Fusion 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 241
  • Регистрация: 25 Май 04

Отправлено 09 Март 2005 - 17:43

Мешает ли одно другому???

У меня проэкт на ATmega8, там все данные выводятся на дисплей от Нокии 3310 (вот там и используется SPI). Сбор данных хочу сделать с использованием прерываний. Не появятся ли глюки???
Просто в некоторых примерах, я видел, что при приеме/передаче прерывания запрещались....
0

#2 Пользователь офлайн   ProniX 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 744
  • Регистрация: 25 Ноябрь 03

Отправлено 09 Март 2005 - 22:11

Нет, SPI работает абсолютно независимо, работа контроллера прерываний на него не влияет (всё, что в буфере, с успехом дойдет).

Правда, думаю, что я не совсем тебя понял. Что сделать-то хочешь?
0

#3 Пользователь офлайн   Fusion 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 241
  • Регистрация: 25 Май 04

Отправлено 10 Март 2005 - 09:58

ProniX
Это будет прибор в авто.
Показывать будет температуру в двух точках (воздух/салон), измерять скорость, напряжение борт сети. Так вот, если скорость измерять "точечно", то есть с момент когда нас это интересует, то проблем нету. Зная длину колеса, я измеряю время, за которое оно делает один оборот и определяю скорость... Но если мне вместе с этим надо знать весь пройденый путь, то обработку датчика "скорости" надо ставить на прерывание...
Это я хотел сделать что-то типа борткомпутера...
Есть еще один трабл - датчики температуры DS18S20, пока не "запустил" его, и боясь что они тоже с прерываниями не состыкуются...
0

#4 Пользователь офлайн   ProniX 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 744
  • Регистрация: 25 Ноябрь 03

Отправлено 10 Март 2005 - 15:39

Совершенно не понимаю проблемы... Почему бы не измерять температуру по прерываням от таймера с заданной периодичностью? Зачем тут прерывания от SPI?
0

#5 Пользователь офлайн   Fusion 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 241
  • Регистрация: 25 Май 04

Отправлено 10 Март 2005 - 15:45

Прерывание от SPI не причем. Я имею ввиду не помешают ли другие прерывания (внешнее, например), при передачи данных по SPI...
0

#6 Пользователь офлайн   ProniX 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 744
  • Регистрация: 25 Ноябрь 03

Отправлено 10 Март 2005 - 18:43

Байт в буфере - дойдет, а остальные - только после обработки прерывания. Но отключи ненужные на время передачи, если больше байта надо передавать.
0

#7 Пользователь офлайн   Dreadatour 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 121
  • Регистрация: 14 Март 05

Отправлено 14 Март 2005 - 11:23

Fusion, прерывания запрещаются для того, чтобы исключить потерю данных. Представь себе, что ты работаешь с ЖКИ, и тут у тебя вызывается прерывание. Если (и только если! =)) прерывание использует те же регистры, что и процедура обработки ЖКИ, то после выхода из прерывания у тебя в этих регистрах будет ерунда...

Решений несколько:
1. при вызове прерывания оно запихивает в стек все регистры, которые оно использует, а потом, когда закончит, то вытаскивает их из стека. решение самое простое и изящное (я сам так делаю всегда =)), но тратится время на команды "push" и "pop".
2. использовать в прерывании регистры, которые не используются в программе. решение не очень изящное, но работать прерывание будет гораздо быстрее (поскольку нет комманд "push" и "pop" на каждый из используемых регистров).

Вот так. =))

респект =)))
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 members, 1 guests, 0 anonymous users