Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 12. Интерфейс SPI . equ CS = РВО . equ MOS I = РВ5 ; РВЗ Д!IЯ AТmegaB . equ MISO = РВб ; РВ4 ДJIЯ AТmegaB . equ SCK = РВ7 ; РВ5 дпя AТmegaB - разряды порта В дпя интерфейса SPI 325 Скорость работы задается битами SPI2X в регистре SPSR и SPRl : SPRO в регистре SPCR и может мещrгься от 1 : 2 ( SPI2X = 1, SPRl : SPRO = оо) до 1 : 1 28 ( SPI2X = о, SPRl : SPRO = 1 1) тактовой частоты контроллера, что внушает уважение: даже при тактировании 1 МГц частота обмена может достигать 500 килобит в секунду в сравнении с жал кой сотней у UART, причем достижимой при значительно более высоких тактовых частотах. Что немаловажно, это чистые информационные биты, без добавки каких либо служебных «стартов» и «столов» . ЗАМЕТКИ НА ПОЛЯХ Из последующих листингов понятно, почему SP I не очень уважают в любительской среде - мало того, что четыре разных режима, так еще в каждом могут быть нюансы : старший бит первым или последним и плюс еще куча дополнительных условий, зави сящих от конкретного устройства. Приходится , как выражаются «В этих ваших интер нетах» , долго «Курить мануал» ведомого устройства (что в переводе означает внима тельно изучать его документацию) , чтобы понять , в каком именно режиме следует инициализировать SPI в каждом конкретном случае. И , судя по всему, нет даже выде ленного р�жима, который бы применялся чаще остальных. В этой главе вы встретите на два примера два разных режима. Листинг 1 2 .2 иллюстрирует инициализацию в режиме О, который устанавливается по умолчанию, если не трогать биты CPOL и СРНА в регистре SPCR: «мастер», биты регистра SPCR: DORD = о - старший бит первым, SPRl и SPRO = о, бит SPI2X = о - скорость.fтак-гf4. ldi temp , ( l<<SPE ) + ( l<<MSTR ) out SPCR , temp ldi temp , ( l<<SCK) + ( l<<MOS I ) + ( l<<CS ) + ( l<<PB4 ) out DDRВ , temp ; SCK , MOSI , CS , РВ4 - выходы sbi PORTB, CS ; сразу устанавливаем в 1 Листинг 1 2 . 3 иллюстрирует инициализацию в режиме 3 : «мастер», биты регистра SPCR: DORD = о - старший бит первым, SPRl и SPRO = о, бит SPI2X (регистр SPSR ) = о - скорость.fтак-гf2 . ldi temp , ( l<<SPE ) + ( l<<MSTR ) + ( l<<CPOL ) + ( l<<CPНA) out SPCR, temp
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==