Встроенный SPI в PIC16F873, как запустить?
Пытаюсь разобраться со встроенным SPI в PIC16F873 на уровне ассемблера.
В описании сказано, что в режиме ведущего запуск происходит по записи байта в SSPBUF.
Значит ли это, что сразу после записи в SSPBUF контроллер отправляет SSPBUF в сдвиговый регистр SSPSR и
формирует 8 импульсов синхронизации SCK , на каждый из которых сдвигает по одному разряду из SSPSR на выход SDO,
одновременно читает с SDI в сдвиговый регистр, а по заполнении копирует его в SSPBUF ?
Ниже привожу код, который я попробовал для проверки осциллографом (прерывания пока отключены).
Но на SCK ничего не видно, а на SDO сигнал, близкий к меанру, с периодом , соизмеримым с паузой DELAY .
Чего не хватает в этом цикле, чтобы SPI работал? Может, надо снимать какие-то флаги?
; настройка порта
bsf STATUS,RP0;
movlw B'11010111';
movwf TRISC;
bcf STATUS,RP0;
;настройка режима, полярности SCK и фазы выборки
;(тактовый сигнал FOSC/64=300KHZ)
movlw B'00000010';
movwf SSPCON
bsf STATUS,RP0;
movlw B'11000000';
movwf SSPSTAT
bcf STATUS,RP0
;включение SPI
bsf SSPCON,SSPEN; ;
LOOP
;запись какого-нибудь значения в SSPBUF для старта
movlw B'11001010'
movwf SSPBUF
; пауза 50мс , просто для удобства наблюдения
call DELAY
goto LOOP
|