Если SPI аппаратный, то:
1) на обоих МК настраиваем SPI (мастер-слейв, скорость и пр. - обычно это пара регистров)
2) когда нужно передать информацию, опускаем ногу CS у мастера и кидаем ему в регистр SPDR байт, который нужно передать, если нужно передать более 1 байта, ждем конца передачи (по флагу или по прерыванию) и кладем в SPDR следующий байт.
3) на слейве ловим прерывание от SPI и читаем SPDR.
Вот и все.
Точно также UART, I2C, только регистры и настройка другие.
Связь двух МК через обычный порт
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
- radiolubitel2011
- Встал на лапы
- Сообщения: 136
- Зарегистрирован: Чт фев 10, 2011 21:31:51
- Откуда: Ульяновск
- Контактная информация:
Re: Связь двух МК через обычный порт
А вот, к примеру, в USART скорость надо выбирать в зависимости от кварца. В SPI тоже так же?
И ещё: если у меня кварц 7,3 МГц, то какая скорость должна быть?
И ещё: если у меня кварц 7,3 МГц, то какая скорость должна быть?
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Связь двух МК через обычный порт
В случае с USART, скорость должна точно соответствовать у обоих контроллеров (+-%). В SPI все проще, скорость передачи не должна превышать 1/4 частоты слейва (иначе не он успеет считывать данные), и не может быть болше чем 1/2 частоты мастера (в силу конструкции контроллера).
Re: Связь двух МК через обычный порт
Потому что в SPI вместе с данными передаются и синхроимпульсы, и данные принимаются по фронту (или спаду) синхроимпульсов.
- radiolubitel2011
- Встал на лапы
- Сообщения: 136
- Зарегистрирован: Чт фев 10, 2011 21:31:51
- Откуда: Ульяновск
- Контактная информация:
Re: Связь двух МК через обычный порт
А у вас случайно нет примера кода USART или SPI (на C/C++ желательно)? Просто я что-то не соображу никак, как всё это сделать...
Re: Связь двух МК через обычный порт
откраваем даташит на понравившийся МК, там и примеры есть и разжевано все необходимое. Будут трудности - спрашивай.