проблема такая-на микропроцессоре не хватает свободных ножек, поэтому был сделан расширитель портов на атмега. ну..чтобы чипселекты выставлять, проверять наличие всяких готовностей и прочего. прикинул, что плодить навороченный протокол для SPI slave - это достаточно напряжная вешь. очень навороченным его не сделать-нужно будет тогда снижать скорость обмена по SPI-d даташыте написано что SCLK не можето быть более половины тактовой частоты. У меня тактовая частота атмеги 8 мегагерц, но и 4 мегагерца - это предел. я начал писать на C для этого камня (на асме нельзя) вот что получилось-хочу обращаться к этому камню со стороны основного процессора так же как к обычному уись.. стройству. я распределил какие типы команд я могу посылать DDRx PORTx и PINx соответственно протокол такой придумал- первый байт это команда и к какому порту обращаюсь (PA PB PC итд) второй байт что туда нудно выставить. то есть еслли m,s команда в атмеге выглядела бы так PORTA = 0x24 я бы паередавал эти два байта-код операции и запись... то есть понятно что я имел ввиду в устройстве slave на атмеге сделал прерывание "по окончанию записи байта мастером" - оно вроде так называется и в этом прерывании читаю то что там пришло в SPDR - так вроде SPI регистр называется. но мне вот что непонятно-для SPI и чтение и запись это одно и тоже. то есть если я в прерывании прочитал принятый байт - то я как бы уже автоматом должет передать в мастер dummy байт. или я не прав? как вот мне реализовать команду a = PINx то есть чтение порта? принял я команду и хочу в слеве передать ответ-как мне это правильно сделать? прошу прощения, я не задавал бы вопрос, если бы у меня было настоящее устройство-я бы просто посидел с дебагером и разобрался-но у меня устройства пока нет, но код предварительный накидать надо. спасибо!
|