
SPI interface + PIC18F452+AD9833
Досега никога не съм използвал SPI интерфейса на PIC18F452. Срещам затруднения и затова моля за помощ.
Използвам инфо и по точно примера от
http://hades.mech.northwestern.edu/wiki ... 2C_and_SPI
Свързвнето ми е съответно директно пин със пин:
AD9833 PIC18F452
pin6(SDATA) -> 24pin (RC5 SDO)
pin7(SCLK) -> 18pin (RC3 SCK)
pin8(Fsync) -> 17pin (RC2)
Инициализация на MSSP за работа в режим SPI (master):
BCF TRISC, 3 ;SCK
BSF TRISC, 4 ;sdi - не се използва при интерфейс с AD9833
BCF TRISC, 5 ;SD0
BCF TRISA, 5 ; spi master mode
BCF SSPSTAT, CKE
BCF SSPSTAT, SMP
MOVLW B'00110001' ;SPI Master
MOVWF SSPCON1 ;Tакт Fosc/16 - Fosc=20mhz
Следва предаването на данни, като немога точно да разбера по какъв начин става.
За да предам spi_xfer(0b0010000101101000); правя следното:
BCF PORTC, 2 ; Смъквам Fsync за начало на данните
MOVLW B'00100001'
MOVWF SSPBUF ; Зареждам в буфера старшите бита
BTFSS SSPSTAT, BF
BRA $-2
BCF SSPSTAT, BF
MOVLW B'01101000'
MOVWF SSPBUF ;; Зареждам в буфера младшите бита
BTFSS SSPSTAT, BF
BSF PORTC, 2 ;Вдигам Fsync за край на данните
BCF PORTC, 2 ;Смъквам Fsync за начало на данните
........
После изпращам честотата правоъгълник 20 khz :
spi_xfer(0b0101100010010011);
spi_xfer(0b0100000000010000);
после инфо за фаза:
spi_xfer(0b1100000000000000);
и най накрая: unresets
spi_xfer(0b0000000001101000);