Lab3 -- Lab 4 Design and implementation details on the way to a valid SPI-LCD interface driver.

Slides:



Advertisements
Similar presentations
Microprocessor or Microcontroller Not just a case of “you say tomarto and I say tomayto” M. Smith, ECE University of Calgary, Canada.
Advertisements

SHIFT REGISTERS: CONVERTING BETWEEN SERIAL AND PARALLEL DATA Mark Neil - Microprocessor Course 1 Serial versus Parallel Data Transfers.
SPI Serial Peripheral Interface. SPI Serial Peripheral Interface is communication between two devices, one bit at a time sequential one bit at time over.
Blackfin BF533 EZ-KIT Control The O in I/O Activating a FLASH memory “output line” Part 2.
Lab3 -- Lab 4 Design and implementation details on the way to a valid SPI-LCD interface driver.
Peripherals and their Control An overview of industrially available “peripheral devices” Some ideas for Laboratories and Quiz / Exam questions.
Boot Issues Processor comparison TigerSHARC multi-processor system Blackfin single-core.
Lab. 2 – More details – Tasks 4 to 6 1. What concepts are you expected to understand after the Lab. 2 is finished? 2. How do you demonstrate that you have.
Microprocessor or Microcontroller Not just a case of “you say tomarto and I say tomayto” M. Smith, ECE University of Calgary, Canada.
Blackfin SPI Compatible Interface Design and implementation details on the way to a valid SPI-LCD interface driver.
HD44780 LCD programming From the Hardware Side Design and implementation details on the way to a valid SPI-LCD interface driver.
LCD programming Design and implementation details on the way to a valid SPI-LCD interface driver.
Serial Peripheral Interface (SPI)
Microprocessor or Microcontroller Not just a case of “you say tomarto and I say tomayto” M. Smith, ECE University of Calgary, Canada.
Getting the O in I/O to work on a typical microcontroller Ideas of how to send output signals to the radio controlled car. The theory behind the LED controller.
Blackfin BF533 EZ-KIT Control The O in I/O Activating a FLASH memory “output line” Part 2.
Getting the O in I/O to work on a typical microcontroller Activating a FLASH memory “output line” Part 1 Main part of Laboratory 1 Also needed for “voice.
Now we must send the correct signals over the MOSI line!!! Design and implementation details on the way to a valid SPI-LCD interface driver.
SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver.
HD44780 LCD programming From the Hardware Side
LSU 10/22/2004Serial I/O1 Programming Unit, Lecture 5.
4.0 rtos implementation part II
Peripherals and their Control An overview of industrially available “peripheral devices” that use “pulse-width modulation” for information passing. Review.
MICROPROCESSOR INPUT/OUTPUT
Lab. 2 Overview Move the tasks you developed in Lab. 1 into the more controllable TTCOS operating system Manual control of RC car.
Moving Arrays -- 1 Completion of ideas needed for a general and complete program Final concepts needed for Final Review for Final – Loop efficiency.
Multi-threaded projects Services and Drivers Alternate ways of doing Labs 1, 2, 3 and 4.
PPI-8255.
Handling multiple input signals Version #2 – co-operative scheduler Version #3 – pre-emptive scheduler.
Department of Electronic & Electrical Engineering Serial interfaces Serial Interfaces allow communication between devices sending one bit at a time. In.
Serial Peripheral Interface SPI I2C (i-squared cee)
بسم الله الرحمن الرحيم MEMORY AND I/O.
SHIFT REGISTERS: CONVERTING BETWEEN SERIAL AND PARALLEL DATA Mark Neil - Microprocessor Course 1 Serial versus Parallel Data Transfers.
1 Device Controller I/O units typically consist of A mechanical component: the device itself An electronic component: the device controller or adapter.
“Lab. 5” – Updating Lab. 3 to use DMA Test we understand DMA by using some simple memory to memory DMA Make life more interesting, since hardware is involved,
Developing Tasks to use with a co-operative scheduler Ideas for Assignment 2 Lab. 2, 3 and 4 Review for Midterm on Lab. 2 Ideas of defects, errors and.
©F.M. Rietti Communication Lines Fundamentals. ©F.M. Rietti LM-18 Computer Science SSI Embedded Systems I 2 Communication Lines Generally used to connect.
Lab3 -- Lab 4 Design and implementation details on the way to a valid SPI-LCD interface driver.
Architectures of Digital Information Systems Part 1: Interrupts and DMA dr.ir. A.C. Verschueren Eindhoven University of Technology Section of Digital.
EE 107 Fall 2017 Lecture 5 Serial Buses – UART & SPI
Serial I/O and Data Communication.
Lab3 -- Lab 4 Design and implementation details on the way to a valid SPI-LCD interface driver.
1 Input-Output Organization Computer Organization Computer Architectures Lab Peripheral Devices Input-Output Interface Asynchronous Data Transfer Modes.
SPI Compatible Devices
Moving Arrays -- 1 Completion of ideas needed for a general and complete program Final concepts needed for Final Review for Final – Loop efficiency.
Lab. 2 Overview.
Asynchronous Serial Communications
Serial Communication Interface: Using 8251
SPI Compatible Devices
Thermal arm-wrestling
Operating Systems Chapter 5: Input/Output Management
Lab. 2 – More details – Later tasks
SPI Compatible Devices
Moving Arrays -- 1 Completion of ideas needed for a general and complete program Final concepts needed for Final Review for Final – Loop efficiency.
Moving Arrays -- 2 Completion of ideas needed for a general and complete program Final concepts needed for Final DMA.
Thermal arm-wrestling
Moving Arrays -- 2 Completion of ideas needed for a general and complete program Final concepts needed for Final DMA.
HD44780 LCD programming From the Hardware Side
HD44780 LCD programming From the Hardware Side
Thermal arm-wrestling
Lab3 -- Lab 4 Review Design and implementation details on the way to a valid SPI-LCD interface driver.
Independent timers build into the processor
Lab. 2 Overview Move the tasks you developed in Lab. 1 into the more controllable TTCOS operating system.
Thermal arm-wrestling
Developing a reliable communication between Blackfin and Slave device
Post Lab Quiz 3 Review Assignment 2 Help
Working with the Compute Block
Chapter 13: I/O Systems.
Chapter 13: I/O Systems “The two main jobs of a computer are I/O and [CPU] processing. In many cases, the main job is I/O, and the [CPU] processing is.
Presentation transcript:

Lab3 -- Lab 4 Design and implementation details on the way to a valid SPI-LCD interface driver

SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada Lab. 4 Use SPI interface, to cause the words “Happy 511 Christmas” to appear on the LCD screen some times and the temperature (Lab. 3) other times 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada Lab. 4 Blackfin processor Running tasks using TTCOS operating system SPI-interface Optional car control 4 wires 11 wires SPI-bus External parallel I/O 4 wires SPI-interface 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

To cause the LCD to write the letter ‘A’ on its screen LCD COMMANDS RS R/W DATA DB7 to DB0 WriteLetter(value) 1 value WriteLetter(‘a’) 0x61 That means we must send the following “voltage” signals to the LCD pins RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 0 1 0 1 1 0 0 0 0 1 Wait( 40 us) 1 0 0 0 1 1 0 0 0 0 1 // EnableStrobe Wait( 40 us) 1 0 1 0 1 1 0 0 0 0 1 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Lots of stuff has to happen in the correct order Putting data into the Blackfin SPI_TDBR register causes the data to be transmitted over the MOSI line  However the external device will ACCEPT the command as the slave select line PF5 line is AUTOMATICALLY SET LOW by the Blackfin before the transmission is started.  When transmission is ended (16-bits sent) then the slave select line PF5 line is AUTOMATICALLY SET HIGH by the Blackfin  As PF5 line goes high the data sent by the Blackfin over the MOSI line to the special interface is transferred to the LCD  Everything in the garden is wonderful – most stuff happening automatically -- we just have to wire it correctly !!!!!!!!!!!!!! ALL? we have to do is make it happen!  5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada Blackfin must be coded to transmit 16 bits with THIS format over the MOSI line DB7, DB6, ………DB1, DB0 E – Enable / Strobe 1  0 – When this line goes from high to the low, then the command is send to (latched into) LCD To make LCD respond to command 0x4F0 Then Blackfin must transmit 0x5F0 ( E High ) 0x4F0 ( E low ) 0x5F0 ( E high ) RS 1 – LCD data 0 – LCD instruction R/W 1 – Read from LCD 0 – Write to LCD 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada What we need to know What tasks are needed for Lab. 3 and Lab. 4 (Fairly straightforward to answer – about 30 lines of code) What is “SPI hardware” and why to do you want to use it? What is the SPI “master slave” relationship? How do you send commands from the Blackfin to a SPI slave and control Logic Lab LED or Car control or LCD (Lab. 4)? 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Final “temperature” program using co-operative scheduler (Lab. 3) InitScheduler( ) -- Lab 3 looks something like this AddTask(InitHardware, NO_DELAY, RUN_ONCE) AddTask(MeasureTemperatureTiming, NO_DELAY, 1); AddTask(CalculateTemperature, QUARTER_SECOND, QUARTER_SECOND) AddTask(DisplayTempertureLED, 3/8 seconds, QUARTER_SECOND) AddTask(FlashLED6, NO_DELAY, EIGHTH_SECOND StartScheduler( ) Loop GotoSleepTillInterrupt Dispatch Tasks Very easy to be able to add additional tasks and understand changes of system performance. All tasks written in “C and C++”

Lab 4 looks look – three new tasks InitScheduler( ) AddTask(InitHardware, NO_DELAY, RUN_ONCE) AddTask(Init_SPIandLCD, NO_DELAY, RUN_ONCE) AddTask(MeasureTemperatureTiming, NO_DELAY, 1); AddTask(CalculateTemperature, QUARTER_SECOND, QUARTER_SECOND) AddTask(DisplayTempertureLED, 3/8 seconds, QUARTER_SECOND) AddTask(SPI_Message_HappyXmasLCD, 4.5_SECOND, TWO_SECOND); AddTask(SPI_Message_TemperatureLCD, 5.5_SECOND, TWO_SECOND); StartScheduler( ) Loop GotoSleepTillInterrupt Dispatch Tasks -- DO CODE REVIEW

Code reminder – using sprintf( ) Xmas message and temperature I want to put the temperature (as a number) into a string that gets transmitted over SPI – how would I do that using “C”? volatile bool SPI_In_USE; // ‘SEMAPHORE’ (lock) volatile short int sendMyMessage; // ‘MESSAGE’ (simple) volatile char SPImessage[80]; // ‘MESSAGE’ body volatile float temperature; // Calculated as a Lab. 3 Task // Know terms in red for final #include <stdio.h> -- DO CODE REVIEW void SPI_Message_TemperatureLCD(void) { if (SPI_In_Use == true) return; // Must wait till SPI interface is not in use by another task // SPI_In_Use must be false – therefore we can change it and use SPI // We want to use the SPI interface – block other tasks from using it SPI_In_Use = true; sprintf(SPImessage, “Temperature %f4.2 C”, temperature); sendMyMessage = DATA; // DEFINE DATA AS 1 SOMEWHERE } 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Difference between co-operative and pre-emptive schedulers Race condition – SPI_In_Use flag might be changed by an interrupt from another device just as we try to change it void SPI_Message_TemperatureLCD(void) { if (SPI_In_Use == true) return; // Must wait till SPI interface is not in use by another task // SPI_In_Use must be false – therefore we can change it and use SPI // BUT Interrupt occurs “right at this moment” -- the interrupting device see SPI_In_USE is false so it changes it // and now the system has a “hardware defect present” – two things trying to use SPI // We want to use the SPI interface – block other tasks from using it NOT VALID NOW SPI_In_Use = true; sprintf(SPImessage, “Temperature %f4.2 C”, temperature); sendMyMessage = DATA; // DEFINE DATA AS 1 SOMEWHERE } // THIS SOLUTION IS NOT NEEDED IN CO-OPERATIVE SCHEDULER AS ONLY 1 TASK RUNS 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Fix to race condition needed for interrupt driven schedulers Race condition – SPI_In_Use might be changed by an interrupt from another device just as we try to change it void SPI_Message_TemperatureLCD(void) { STOP_Interrupts( ); if (SPI_In_Use == false) { // Must wait till SPI interface is not in use by another task // Interrupts still stopped – so can change SPI_In_Use without RACE happening // We want to use the SPI interface – block other tasks from using it SPI_In_Use = true; sprintf(SPImessage, “Temperature %f4.2 C”, temperature); sendMyMessage = DATA; // DEFINE DATA AS 1 SOMEWHERE } START_Interrupts( ); // Restart interrupts // THIS SOLUTION IS NOT NEEDED IN CO-OPERATIVE SCHEDULER AS ONLY 1 TASK RUNS 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Quick Test for TemperatureString task Test( ) { strcpy(SPImessage, “GARBAGE”); CHECK_ARRAY_EQUAL(SPImessage, “GARBAGE”, length(“GARBAGE”)); temperature = 23.5; SPI_IN_USE = 1; SPI_Message_TemperatureLCD( ); // Check can’t change the SPI buffer SPI_IN_USE = 0; SPI_Message_TemperatureLCD( ); // Check can change the SPI buffer CHECK_ARRAY_EQUAL(SPImessage, “Temperature 23.5C”, length(“Temperature 23.5C”)); -- DO CODE REVIEW 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

All we have left to do is Init_SPIandLCD( ) Task Use profound procrastination programming AddTask(InitSPI, NO_DELAY, RUN_ONCE); AddTask(SPI_MessageHandler, NO_DELAY, ½ SECOND); AddTask(InitLCDSreen, ONE_SECOND_DELAY, RUN+ONCE) -- DO CODE REVIEW 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Turning the commands into an array of commands Prelab 4 showed what commands need to be sent to LCD screen Express the commands (bits 0 to 7 as “chars” and end with char value 0x00 (end of string) Suppose commands were “0x30 0x30, 0x22” for bits 7 to 0 then #define EOS 0x00 // C++ end of string character char LCDcommandString[ ] = {0x30, 0x30, 0x22, EOS}; 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Init LCD Screen ( ) – This is essentially “send a special message” bool SPI_In_USE; // ‘SEMAPHORE’ (lock) short int sendMyMessage; // ‘MESSAGE’ (simple) char SPImessage[80]; // ‘MESSAGE’ body char LCDcommandString[ ] = {0x30, 0x30, 0x22, 0x00 /* end of string character */}; // LOOK AT LAB. 4 PRELAB REFERENCE SHEET #include <stdio.h> void InitLCDSreen (void) { if (SPI_In_Use == true) return; // Must wait till SPI interface is not in use by another task // SPI_In_Use is false // We want to use the SPI interface – block other tasks from using it SPI_In_Use = true; strcpy(SPImessage, LCDcommandString ); sendMyMessage = INSTRUCTION; // DEFINE INSTRUCTION AS 2 SOMEWHERE } -- DO CODE REVIEW 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

We now need to do the message handler task -- DO CODE REVIEW enum {NO_MESSAGE, DATA, INSTRUCTION}; // Be able to explain “enum” for final void SPI_MessageHandler(void) { if ( sendMyMessage == NO_MESSAGE) return; // Message to send – start up the sending task numberCharactersToSend = strlen(SPIMessage); sendMessageTaskNumber = AddTask(SendMessageSPI_LCD, NO_DELAY, AS_FAST_AS_POSSIBLE); // Start with as FAST_AS_POSSIBLE with a slow value -- second / 20; } -- DO CODE REVIEW 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

SendMessageSPI_LCD( ) { static int whichState = switch8HIGH; static int messageElement = 0; // Kill this task if all the elements in the message have been sent if (numberCharactersToSend == 0) { DeleteTask(sendMessageTaskNumber); SPIinUse = false; return; } -- DO CODE REVIEW 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

To cause the LCD to write the letter ‘A’ on its screen LCD COMMANDS RS R/W DATA DB7 to DB0 WriteLetter(value) 1 value WriteLetter(‘a’) 0x61 That means we must send the following “voltage” signals to the LCD pins RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 0 1 0 1 1 0 0 0 0 1 STATE 1 1 0 0 0 1 1 0 0 0 0 1 STATE 2 EnableStrobe 1 0 1 0 1 1 0 0 0 0 1 STATE 3 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

State 1 – send character + SW8 high + SW10 high IF data #define SW8_high 0x100 -- DO CODE REVIEW #define SW8_low 0x000 -- DO CODE REVIEW #define SW10_High 0x800 -- DO CODE REVIEW #define SW10_Low 0x000 -- DO CODE REVIEW switch (whichState) { case STATE1: -- DO CODE REVIEW // get the character to send and convert to short int value (SPI using 16-bit values) unsigned short int SPIvalue = SPImessage(messageElement); // Next char to send // set switch 8 high SPIvalue = SPIvalue | SW8_high; -- DO CODE REVIEW // Do we set switch 10 high if (sendMyMessage == IS_INSTRUCTION) -- DO CODE REVIEW SPIvalue = SPIvalue | SW10_high; -- DO CODE REVIEW if (!SPIReady( ) ) return; // The SPI device might not be ready if Blackfin too fast WriteSPI(SPIvalue); nextState = STATE2 break; 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

You can finish off the other states present in SendMessageSPI_LCD( ) LCD COMMANDS RS SW10 R/W SW8 DATA DB7 to DB0 WriteLetter(value) 1 value WriteLetter(‘a’) 0x61 That means we must send the following “voltage” signals to the LCD pins RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 0 1 0 1 1 0 0 0 0 1 STATE 1 1 0 0 0 1 1 0 0 0 0 1 STATE 2 EnableStrobe 1 0 1 0 1 1 0 0 0 0 1 STATE 3 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Things we are missing All relate to SPI HARDWARE bool SPI_Ready(void) void WriteSPI(unsigned short SPIvalue); void InitSPI(void); We are going to have to read the reference sheet 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada What is SPI Serial Peripheral Interface – an industry standard SPI is a serial communication bus developed by Motorola. It is a full-duplex protocol that functions on a master-slave paradigm that is ideally suited to data stream application. DUPLEX MEANS – BOTH DIRECTIONS AT ONCE Master can receive from the slave at the same time as the master sends to the slave Is essentially a 4 wire high speed system, with speeds up to many MHz Blackfin (p10-8) has a register SPI_BAUD where they talk about transfer rates of 25 MHz. Information is précised from SPI information -- http://www.totalphase.com/docs/articles/article03/ LCD information -- http://home.iae.nl/users/pouweha/lcd/lcd.shtml 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Advantages and drawbacks SPI is a very simple communication protocol. It does not have a specific high-level protocol which means that there is almost no overhead. Data can be shifted at very high rates in full duplex mode This makes it very simple and efficient in a single master single slave scenario. The exchange itself has no pre-defined protocol. This makes it ideal for data-streaming applications. Data can be transferred at high speed, often into the range of the tens of megaHertz. The flipside is that there is no acknowledgment, no flow control, and the master may not even be aware of the slave's presence / or absence. You could do “some” handshaking via software 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Concept of Master and Slave The component that initiates the transfer The component that controls the transfer Slave The component that responds to the transfer 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Master / Slave concept Slave Select (Chip Select) Master sends out active low chip select signal SS1, then slave 1 responds Master sends out active low chip select signal SS2, then slave 2 responds FOR SAFETY – SELECT SIGNAL IS “ACTIVE LOW” NOT “ACTIVE HIGH” IF LINE BREAKS – FLOATS HIGH – TURNS SLAVE DEVICE OFF 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Master / Slave concept Master to Slave data movement Master sends out information to slave along MOSI wire Slave receives information from the master along MOSI wire Information (bits) is clocked by SCLK signal. 1-bit, 1 clock tick Learn the terms for Quiz 3 and Final MOSI --MASTER OUT – SLAVE IN 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Master / Slave concept Slave to Master data movement Master receives information from slave along MISO wire Slave sends information to the master along MISO wire Information (bits) is clocked by SCLK signal. 1-bit, 1 clock tick Don’t get master slave mixed up MISO --MASTER IN – SLAVE OUT 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Lab. 4 interface SPI from Blackfin master (MOSI, MISO, CLK, PF5 SPI to interface (slave) (MOSI, MISO, CLK, slave select ) LINES TO LOGIC LAB LED OR CAR CONTROL TRANSMITTER OR LAB 4 LCD SCREEN 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Transmit 16 bits with THIS format over the MOSI line DB7, DB6, ………DB1, DB0 These signals come out on the CJ7 and CJ8 pins and go to the logic lab LEDs Leading “high-bit” MSB – Most significant bit comes out of Blackfin master first and is received by slave first Master and slave must agree (before hand – part of initial design) Does the MSB (bit 15) or LSB (bit 0) get transmitted first along the MOSI line 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Lab. 4 ideas SPI_TDBR Blackfin Processor SPI_RXBR SLAVE SELECT PF5 used (PF0 to PF7) SPI CLOCK MOSI MISO SLAVE OUTPUT INTERFACE SLAVE INPUT INTERFACE LOAD Slave to LCD DATA CONTROL SWITCHES (LOGIC LAB) CJ7 / CJ8 output lines to LOGIC LAB LEDs 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

Questions still unanswered How do we configure the SPI interface inside the Blackfin? How do we activate the chip-select line – PF5? Does activating the PF5 line as SPI output control mean we have to change all the SetupPF8to11ASM( ) and other routines? When do we activate the chip-select line, and how long for? What happens when there is not a new value in the SPI transmit buffer – what does the SPI interface do – it can’t do nothing – does it start transmitting zeros (which would turn out all the LEDs we just turned on 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada What we need to know What tasks are needed for Lab. 3 and Lab. 4 (Fairly straightforward to answer – about 30 lines of code) What is “SPI hardware” and why to do you want to use it? What is the SPI “master slave” relationship? How do you send commands from the Blackfin to a SPI slave and control Logic Lab LED or Car control or LCD (Lab. 4)? 5/18/2019 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada