'---------------------------------------------------------------------------------------- ' Name: SPI_02E.TIG ' Type: TIGER-BASIC(tm) Source Code ' Purpose: Sample program to show the new BASIC functions for communication with ' SPI interfaced devices ' ' (C) - Copyright Wilke Technology, P.O.Box 1727, D-52018 Aachen, Germany '---------------------------------------------------------------------------------------- ' ' Thank you for using BASIC Tigers in your products. If you have questions, ideas ' or special needs, please contact your next distributor or the Tiger support team ' and visit our web site: ' ' Wilke Technology GmbH ' The Tiger Support Team ' P.O.Box 1727, D-52018 Aachen, Germany ' Krefelder Str. 147, D-52070 Aachen, Germany ' ' email: support@wilke-technology.com (english) ' email: support@wilke.de (german) ' Phone: +49 (241) 918 900 Mo to Fr, 7:00 to 16:00 (GMT) ' Fax: +49 (241) 918 9068 ' ' New information, new drivers and free downloads see: ' ' www.wilke-technology.com (english) ' www.wilke.de (german) ' ' Sincerely, ' ' Your Tiger Support Team ' '---------------------------------------------------------------------------------------- ' ' SPI-IO with external devices ' ' ' -> This code written for Tiger-BASIC 5.01 or later to run on the "Plug & Play Lab" ' '........................................................................................ ' ' Step 1: Setup SPI-Interface: ' ' ' OK_FLG <-- SPI_SETUP ( CLK_MOSI_Port, CLK_Pin, MOSI_Pin, ' SSJ_Port, SSJ_Pin, ' MISO_Port, MISO_Pin, MSB_First) ' ' ' Specifies SPI-Bus parameters for function: SPI_IO (....) - see below ' ' ' Parameters: ' ' LOG-Port-ADR for Output-Signals: CLK + MOSI ' Clock-Output Pin: (Bit-No: 0...7) = Clock generated by Master ' DATA-Output Pin: (Bit-No: 0...7) = Master-OUT, Slave-IN ' ' LOG-Port-ADR fuer Output-Signal: SSJ ' SSJ-Output Pin: (Bit-Nr: 0...7) = Low-Active CE for SPI-Device ' ' LOG-Port-ADR for Input-Signal: Master-IN, Slave-OUT ' DATA-Input Pin: (Bit-Nr: 0...7) ' ' Flag: 0=LSB-first, X=MSB-first ' ' ' ' OK_FLAG = 0 ... OK! ' = 1...n: Parameter-error at position "n" ' '........................................................................................ ' ' Step 2: Do SPI I/O: ' ' B$ = SPI_IO$ (A$) ' output / input data ' ' ' ' SPI signals: ' ============ ' ' ' Clock Cycle <--1--> <--2--> <--3--> <--4--> <--5--> <--6--> <--7--> <--8--> ' . . . . . . . . ' . . . . . . . . ' . . . . . . . . ' ----------------! !---! !---! !---! !---! !---! !---! !---! !------------------ ' Clck ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' !---! !---! !---! !---! !---! !---! !---! !---! ' . . . . . . . . ' . . . . . . . . ' . . . . . . . . ' !---! !---! !---! !---! !---! !---! !---! !---! ' -Clck ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ---------------! !---! !---! !---! !---! !---! !---! !---! !------------------ ' . . . . . . . . ' . . . . . . . . ' . . . . . . . . ' MOSI ##### ##### ##### ##### ##### ##### ##### ##### ' ---------------# 7 #---# 6 #---# 5 #---# 4 #---# 3 #---# 2 #---# 1 #---# 0 #---------------- ' ##### ##### ##### ##### ##### ##### ##### ##### ' . . . . . . . . ' . . . . . . . . ' . . . . . . . . ' MISO ##### ##### ##### ##### ##### ##### ##### ##### ' ---------------# 7 #---# 6 #---# 5 #---# 4 #---# 3 #---# 2 #---# 1 #---# 0 #---------------- ' ##### ##### ##### ##### ##### ##### ##### ##### ' ' ------! !--------- ' SSJ ! ! ' !------------------------------------------------------------------------------! ' ' '---------------------------------------------------------------------------------------- USER_VAR_STRICT ' Variables must be declared TASK MAIN ' Begin Task MAIN LONG OKFLG, N ' LONG CLK_MOSI_Port, CLK_Pin, MOSI_Pin, SSJ_Port, SSJ_Pin LONG MISO_Port, MISO_Pin, MSB_First STRING A$ (4K),B$, SMALL1$(1) ' INSTALL_DEVICE #1, "LCD1.TDD" ' install LCD CLK_MOSI_Port = 8 ' define ports + pins for SPI MISO_Port = 8 SSJ_Port = 8 CLK_Pin = 0 MOSI_Pin = 1 MISO_Pin = 2 SSJ_Pin = 3 MSB_First = 1 ' 0=LSB-first, 1=MSB-first DIR_PIN CLK_MOSI_Port, CLK_Pin, 0 ' Clock = Output DIR_PIN CLK_MOSI_Port, MOSI_Pin, 0 ' MOSI = Output DIR_PIN MISO_Port, MISO_Pin, 1 ' MISO = Input DIR_PIN SSJ_Port, SSJ_Pin, 0 ' SSJ = Output OUT CLK_MOSI_Port, MASK(CLK_Pin), 0FFH ' Clock: Output = 1 ' OUT CLK_MOSI_Port, MASK(MOSI_Pin), 0 ' MOSI: Output = 0 OUT SSJ_Port, MASK(SSJ_Pin), 0FFH ' SSJ: Output = 1 (inactive) ' ------ setup SPI-Interface ------- OKFLG = SPI_SETUP (CLK_MOSI_Port, CLK_Pin, MOSI_Pin, & SSJ_Port, SSJ_Pin, & MISO_Port, MISO_Pin, MSB_First) PRINT #1, "OK="; OKFLG ' show OK-flag value on LCD A$= "00 20 AA"% ' B$= "" ' B$= SPI_IO$ (A$) ' output / input data PRINT #1, "Len(B$)="; LEN(B$) ' show length of received data FOR N = 0 TO 2 ' PRINT #1, NFROMS(B$,N,1); ' show received bytes as decimals NEXT ' END ' End Task MAIN