Пытаюсь завести сабж. Hасколько я понял, сразу после записи в SSPBUF одновременно начинаются передача и приём, и, когда приняты все 8 бит, они записываются в SSPBUF и взводится SSPIF. Hо у меня в SSPBUF почему-то оказывается сам передаваемый символ. Что так?
spi_init movlw b'00100000' movwf STATUS bcf TRISC,5 bcf TRISC,3 bcf PIE1, SSPIE movlw b'01000000' movwf SSPSTAT clrf STATUS movlw b'00110000' movwf SSPCON movwf SSPBUF ;чтобы взвести SSPIF в начале работы return
IM> spi_txrx IM> btfss PIR1,SSPIF IM> goto spi_txrx IM> movwf SSPBUF что ты хочешь вставить в SSPBUF? Из раб. регистра?
IM> spi_rx btfss PIR1,SSPIF IM> goto spi_rx IM> movfw SSPBUF Это вообще не понятно. По идее, ты должен из SSPBUF считать в раб. регистр - movf SSPBUF, W Я твою команду не проверял - movfw - "это я еще не пробовал..." - вдруг сработает?
;*===================================================================* ;* <> Провести обмен байтами по SPI * ;*===================================================================* SwopSPI movwf sspbuf ; Байт в приёмный регистр page1 ; Включить банк 1 SwopSPI0 bbc bf,SwopSPI0 ; = Передача ещё не завершена page0 ; Включить банк 0 movfw sspbuf ; Загрузить принятый байт return ;
06 Май 04 13:51, you wrote to me: >> Пытаюсь завести сабж. Hасколько я понял, сразу после записи в SSPBUF >> одновременно начинаются передача и приём, и, когда приняты все 8 бит, >> они записываются в SSPBUF и взводится SSPIF. Hо у меня в SSPBUF >> почему-то оказывается сам передаваемый символ. Что так? AG> SwopSPI movwf sspbuf ; Байт в приёмный регистр AG> page1 ; Включить банк 1 AG> SwopSPI0 bbc bf,SwopSPI0 ; = Передача ещё не завершена ^^ AG> page0 ; Включить банк 0 AG> movfw sspbuf ; Загрузить принятый байт AG> return ; Как выяснилось, копать здесь. Я наивно полагал, что SSPIF сам собой сбрасывается при записи в SSPBUF (как это делают TXIF и RCIF). После замены его на BF всё стало работать. Спасиб.
06 Май 04 09:52, you wrote to me: IM>> spi_txrx IM>> btfss PIR1,SSPIF IM>> goto spi_txrx IM>> movwf SSPBUF RA> что ты хочешь вставить в SSPBUF? Из раб. регистра? Хочу. У меня через него передаётся аргумент этой подпрограммы (байт, который надо передать). IM>> spi_rx btfss PIR1,SSPIF IM>> goto spi_rx IM>> movfw SSPBUF RA> Это вообще не понятно. По идее, ты должен из SSPBUF считать в раб. RA> регистр - movf SSPBUF, W Пыххх! А ведь, действительно, сейчас посмотрел - нет такой команды (movfw) в даташите! Тем не менее, ассемблер gpasm её успешно понимает (наверно, делая из неё movf reg, w).
З.Ы. Как мне уже подсказали, проблема была в отлове окончания передачи.
IM>>> movfw SSPBUF RA>> Это вообще не понятно. По идее, ты должен из SSPBUF считать в RA>> раб. регистр - movf SSPBUF, W IM> Пыххх! А ведь, действительно, сейчас посмотрел - нет такой команды IM> (movfw) в даташите! Тем не менее, ассемблер gpasm её успешно понимает IM> (наверно, делая из неё movf reg, w). Да, конечно понимает, "делая из", как и команды: b k = goto k ,negf f = comf f,1+incf f,d ; bc k, bz k, bnz k, skpz, setc, skpnc, tstf f, lcall k, clrc, и пр. Мелочь, но пользоваться приятно :) До свидания, Alexandr.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.