Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

340 Часть 111. Практическое программирование микроконтроллеров А VR (без этих действий карта будет после включения работать в режиме ММС Protoco\). Байт отклика после этого должен быть равен $ 0 1 (младший бит, равный 1, сигнали­ зирует о том, что карта находится в состоянии ожидания In_idle state ) . Потом следует выждать некоторое время (инструкция рекомендует не менее 74 циклов на линии CLK) и послать команду инициализации SEND_OP_COND (ее код равен 1 ) , после подачи которой убедиться в том, что байт отклика равен нулю, - т. е. карта готова к работе. Если отклик отличен от нуля, то следует подать команду SEND_ОР_COND несколько раз . Перед подачей команды после сброса линии CS следует послать пустой байт $FF, чтобы дать карте возможность «прийти в себя», - линия DO при этом может еще оставаться в третьем состоянии . Если сброс был осуществлен ранее, пустой байт не помешает. На практике процедура сброса и инициализации карты ММС может выглядеть так, как показано в листинге 1 2 . 7 (описание процедуры WR_spi приведено в разд. « Основные операции через SPI» этой главы). Если используется аппаратный SPI, то инициализировать порт можно в режиме О . ; ====== Инициализация карты ========= ММС ini : cbi PORTB, CS ; CS = О ser temp ; $ FF rcall WR_spi ; пустой байт ldi temp , $ 4 0 ; CMDO rcall WR_spi ; команда GO I DLE STATE clr temp rcall WR_spi ; нулевой байт clr temp rcall WR_spi ; нулевой байт clr temp rcall WR_spi ; нулевой байт clr temp rcall WR_spi ; нулевой байт ldi temp , $ 9 5 ; CRC rcall WR_spi ser temp ; $ FF rcall WR_spi ; пустой байт ser temp ; $ FF rcall WR spi ; в temp - отклик 0 1 , что означает In idle s tate ; rcall out_com ; можно послать наружу через UART для контроля ; задержка на 80 тактов ldi count , 8 delay_ 8 0 : ser temp ; $ FF rcall WR_spi ; пустой байт dec count

RkJQdWJsaXNoZXIy MTExODQxMg==