CS_DACon .macro LDP #00E1h LACC PADATDIR AND #0FFFDh ; IOPA1 mise à 0 ie DAC activé SACL PADATDIR .endm CS_DACoff .macro LDP #00E1h LACC PADATDIR OR #0002h ; IOPA1 mise à 1 ie DAC desactivé SACL PADATDIR .endm |
;**************************************************************** ; SPI Configuration 1 pour DAC 2 pour LCD ;**************************************************************** SPI_Config .macro Conf .if Conf=1 ; SPI initialization pour DSP-> DAC (clk pol 1, no clkphase, master, no INT) LDP #0E0h SPLK #00C7h,SPI_CNTL1 ; Reset SPI by writing 1 to SWRST !!!clk pol1 ; SPLK #0087h,SPI_CNTL1 ; Reset SPI by writing 1 to SWRST !!!clk pol0 ; SPLK #000Ch,SPI_CNTL2 ; Disable ints & TALK, normal clock, master mode clk phase 1 SPLK #0004h,SPI_CNTL2 ; Disable ints & TALK, normal clock, master mode clk phase 0 SPLK #0000h,SPI_PRI ; Set SPI interrupt to high priority. ; SPLK #0000h,SPI_BAUD ; Baudrate = Fatest as possible ! SYSCLK/4 et ça marche ! SPLK #0005h,SPI_BAUD ; Baudrate = 2 MHz! SYSCLK/5 SPLK #0000h,SPI_STATUS ; Clear the SPI interrupt status bits ; SPLK #000Eh,SPI_CNTL2 ; Enable TALK, CLK ph 1, master mode + disable SPI Int SPLK #0006h,SPI_CNTL2 ; Enable TALK, CLK ph 0, master mode + disable SPI Int SPLK #0052h,SPI_PORT_C1 ; Enable the SPICLK pin function. ; SPISTE as output pin et mise à 1 ie desactive SPLK #0022h,SPI_PORT_C2 ; Set SIMO & SOMI functions to serial I/O SPLK #0047h,SPI_CNTL1 ; Release SWRST, clock polarity 1, 8 bits ; SPLK #0007h,SPI_CNTL1 ; Release SWRST, clock polarity 0, 8 bits .endif .if Conf=2 ; SPI initialization pour DSP-> LCD LDP #0E0h SPLK #00C7h,SPI_CNTL1 ; Reset SPI by writing 1 to SWRST !!!clk pol1 SPLK #000Ch,SPI_CNTL2 ; Disable ints & TALK, normal clock, master mode SPLK #0000h,SPI_PRI ; Set SPI interrupt to high priority. SPLK #0000h,SPI_BAUD ; Baudrate = SYSCLK/4 ; accepté ie 2.5 MHz, alors que le max du LCD est 2 MHz SPLK #0000h,SPI_STATUS ; Clear the SPI interrupt status bits SPLK #0006h,SPI_CNTL2 ; Enable TALK, No CLK ph, master mode + DESABLE SPI Int SPLK #0052h,SPI_PORT_C1 ; Enable the SPICLK pin function. ; SPISTE as output pin et mise à 1 ie desactive SPLK #0022h,SPI_PORT_C2 ; Set SIMO & SOMI functions to serial I/O SPLK #0047h,SPI_CNTL1 ; Release SWRST, clock polarity 1, 8 bits .endif .endm |
;------------------------------------------- ;- routine d'envoi de donnees sur SPI pour DAC (elle envoie HI et lo) ;------------------------------------------- DACout ; sort les references sur le SPI ; NewData : inutile car l'envoi est controlé uniquement ici ; LDP #Vdsref ; LACC Vref1 ; ADD #01000h ; SFR ; SFR ; spyDAC ; LDP #Idsref ; LACC Idsref ; ADD #00800h ; SACL DAC1 LDP #n_ref LACC n_ref ADD #01000h SFR SACL DAC1 ; LDP #n ; LACC n ; ADD #01000h ; SFR ; SFR ; SFR ; SFR ; spyDAC ; spyDAC ; LACC j ; LDP #ids LACC n ADD #01000h SFR SACL DAC2 ; LDP #fs ; LACC fs ; ADD #01000h ; SFR ; SFR ; SACL DAC2 ; LDP #sinTeta_cm ; LACC sinTeta_cm ; ADD #01000h ; SFR ; SACL DAC3 ; SUB #01000h ; BCND neSatpas, LT ; SPLK #00FFFh, DAC3 ;à cause de 1000h (qd ça depasse d'un bit) ;neSatpas ; ; LDP #Teta_cm1 ; LACC Teta_cm1 ; SACL DAC4 ;LDP #iqs LACC Iqsref ADD #00800h SACL DAC3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;LDP #iqs LACC Iqs ADD #00800h SACL DAC4 ; roulement de tambour ehhh de DAC LACC WhichDAC ADD #1 ; la prochaine fois, sort le suivant SACL WhichDAC SUB #5 BCND NoRaz, LT SPLK #1, WhichDAC NoRaz ; debug ; SPLK #1, WhichDAC ; ici on arrive avec DAC1..4 LDP #WhichDAC LACC WhichDAC SUB #1 BNZ test2 SPLK #0010h, DAC_OR LACC DAC1 ; Load data du DAC 1 into the ACC SACL DataDAC B fintest test2 LACC WhichDAC SUB #2 BNZ test3 SPLK #0050h, DAC_OR LACC DAC2 ; Load data du DAC 2 into the ACC SACL DataDAC B fintest test3 LACC WhichDAC SUB #3 BNZ test4 SPLK #0090h, DAC_OR LACC DAC3 ; Load data du DAC 3 into the ACC SACL DataDAC B fintest test4 ;inutile de tester c'est un 4 ! SPLK #00D0h, DAC_OR LACC DAC4 ; Load data du DAC 4 into the ACC SACL DataDAC fintest ; SPI_Config 1 ; SPI pour DAC inutile car la même CS_DACon ; Active le DAC ; sort sur DAC numero DAC_OR LDP #0E0h LACC SPI_BUF ; clear le SPI_STATUS,BIT6 : donnée_envoyé LACC SPI_PORT_C1 ; SPISTE à 0 to start the transfer AND #0BFh SACL SPI_PORT_C1 LDP #DataDAC ; version plus rapide LACC DataDAC,8 ; Load data du DataDAC into the Hi ACC SACH tmp LACC tmp AND #000Fh ; Set the DAC control bits (4-7) ou plutot D12-D15 OR DAC_OR ; DAC voie "DAC_OR", SPD=fast mode LDP #0E0h SACL SPI_DAT ; Transmit HI byte att1 BIT SPI_STATUS,BIT6 BCND att1,NTC LACC SPI_BUF ; clear le SPI_STATUS,BIT6 : donnée_envoyé ;low_byte LDP #DataDAC LACC DataDAC ; Read the current value of AND #00FFh ; data, mask off the lower LDP #0E0h SACL SPI_DAT ; Transmit the LOW byte ; transfert fini ? att2 BIT SPI_STATUS,BIT6 BCND att2,NTC LACC SPI_BUF ; clear le SPI_STATUS,BIT6 : donnée_envoyé LACC SPI_PORT_C1 ; en fait : set SPIPC1.6 à 1 => SPISTE pin à 1 ie latch the Data ! OR #040h SACL SPI_PORT_C1 ; latch the data into the DAC CS_DACoff ; Desactive le DAC RET ;-- fin de la routine d'envoi de donnees sur SPI (pour DAC) |