DSP/BIOS System Integration Workshop Copyright © 2004 Texas Instruments. All rights reserved. T TO Technical Training Organization 1.Introduction 2.Real-Time.

Slides:



Advertisements
Similar presentations
Processes Management.
Advertisements

1 Lecture 2: Review of Computer Organization Operating System Spring 2007.
Page 1 Processes and Threads Chapter Processes 2.2 Threads 2.3 Interprocess communication 2.4 Classical IPC problems 2.5 Scheduling.
I/O Hardware n Incredible variety of I/O devices n Common concepts: – Port – connection point to the computer – Bus (daisy chain or shared direct access)
1 Computer System Overview OS-1 Course AA
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 3: Processes.
Memory Management, File Systems, I/O How Multiprogramming Issues Mesh ECEN 5043 Software Engineering of Multiprogram Systems University of Colorado, Boulder.
Chapter 13: I/O Systems I/O Hardware Application I/O Interface
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 3: Processes.
16: Distributed Systems1 DISTRIBUTED SYSTEM STRUCTURES NETWORK OPERATING SYSTEMS The users are aware of the physical structure of the network. Each site.
1 I/O Management in Representative Operating Systems.
File System. NET+OS 6 File System Architecture Design Goals File System Layer Design Storage Services Layer Design RAM Services Layer Design Flash Services.
Multicore Navigator: Queue Manager Subsystem (QMSS)
Chapter 51 Threads Chapter 5. 2 Process Characteristics  Concept of Process has two facets.  A Process is: A Unit of resource ownership:  a virtual.
Copyright © 2008 Texas Instruments. All rights reserved. 1.Introduction 2.Real-Time System Design Considerations 3.Hardware Interrupts (HWI) 4.Software.
DSP/BIOS System Integration Workshop Copyright © 2004 Texas Instruments. All rights reserved. D SP TEXAS INSTRUMENTS TECHNOLOGY 1.
Process Management. Processes Process Concept Process Scheduling Operations on Processes Interprocess Communication Examples of IPC Systems Communication.
1 Computer System Overview Chapter 1. 2 n An Operating System makes the computing power available to users by controlling the hardware n Let us review.
Computer System Overview Chapter 1. Operating System Exploits the hardware resources of one or more processors Provides a set of services to system users.
DSP/BIOS System Integration Workshop Copyright © 2004 Texas Instruments. All rights reserved. T TO Technical Training Organization 1 1.Introduction 2.Real-Time.
Introduction to Processes CS Intoduction to Operating Systems.
Copyright © 2004 Texas Instruments. All rights reserved. T TO Technical Training Organization 1 1.Introduction 2.Real-Time System Design Considerations.
Copyright © 2004 Texas Instruments. All rights reserved. T TO Technical Training Organization 1.Introduction 2.Real-Time System Design Considerations 3.Hardware.
Chapter 3: Processes. 3.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts - 7 th Edition, Feb 7, 2006 Process Concept Process – a program.
Copyright © 2004 Texas Instruments. All rights reserved. 1.Introduction 2.Real-Time System Design Considerations 3.Hardware Interrupts (HWI) 4.Software.
Device Drivers CPU I/O Interface Device Driver DEVICECONTROL OPERATIONSDATA TRANSFER OPERATIONS Disk Seek to Sector, Track, Cyl. Seek Home Position.
ITEC 502 컴퓨터 시스템 및 실습 Chapter 2-1: Process Mi-Jung Choi DPNM Lab. Dept. of CSE, POSTECH.
DSP/BIOS Scheduling Chapter 9 C6000 Integration Workshop Copyright © 2005 Texas Instruments. All rights reserved. Technical Training Organization T TO.
Processes – Part I Processes – Part I. 3.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts Review on OSs Upon brief introduction of OSs,
DSP/BIOS System Integration Workshop Copyright © 2004 Texas Instruments. All rights reserved. T TO Technical Training Organization 1.Introduction 2.Real-Time.
Concurrency: Mutual Exclusion and Synchronization Chapter 5.
CS212: OPERATING SYSTEM Lecture 2: Process 1. Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 3: Process-Concept.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 3: Process-Concept.
DSP/BIOS System Integration Workshop Copyright © 2004 Texas Instruments. All rights reserved. T TO Technical Training Organization Introduction.
1 Computer Systems II Introduction to Processes. 2 First Two Major Computer System Evolution Steps Led to the idea of multiprogramming (multiple concurrent.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 3: Process-Concept.
How to write a MSGQ Transport (MQT) Overview Nov 29, 2005 Todd Mullanix.
© Janice Regan, CMPT 300, May CMPT 300 Introduction to Operating Systems Operating Systems Processes and Threads.
Processes. Process Concept Process Scheduling Operations on Processes Interprocess Communication Communication in Client-Server Systems.
Streams – SIO & Drivers – PSP Chapter 6 C64x+ DSP/BIOS Integration Workshop Copyright © 2010 Texas Instruments. All rights reserved. 1.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 3: Processes.
Chapter 3: Processes. 3.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts - 7 th Edition, Feb 7, 2006 Chapter 3: Processes Process Concept.
DSP/BIOS System Integration Workshop Copyright © 2004 Texas Instruments. All rights reserved. T TO Technical Training Organization 1 1.Introduction 2.Real-Time.
Silberschatz, Galvin, and Gagne  Applied Operating System Concepts Module 12: I/O Systems I/O hardwared Application I/O Interface Kernel I/O.
DSP/BIOS Real Time Operating system using DSP /ARM processor.
1 Module 3: Processes Reading: Chapter Next Module: –Inter-process Communication –Process Scheduling –Reading: Chapter 4.5, 6.1 – 6.3.
Chapter 4 DSP/BIOS. DSP/BIOS Part 1 - Introduction.
Module 12: I/O Systems I/O hardware Application I/O Interface
Chapter 13: I/O Systems Modified by Dr. Neerja Mhaskar for CS 3SH3.
Processes and threads.
Chapter 3: Process Concept
Topic 3 (Textbook - Chapter 3) Processes
Chapter 9: Virtual Memory
Process Management Presented By Aditya Gupta Assistant Professor
Chapter 3: Process Concept
TI BIOS SIO – Data Streaming 18 September 2018 Dr. Veton Këpuska.
TI BIOS SIO – Data Streaming 7 November 2018 Dr. Veton Këpuska.
Lecture 2: Processes Part 1
Chapter 9: Virtual-Memory Management
System Structure and Process Model
Operating System Concepts
CS703 - Advanced Operating Systems
Operating System Concepts
Chapter 13: I/O Systems I/O Hardware Application I/O Interface
Chapter 3: Processes.
Outline Chapter 2 (cont) Chapter 3: Processes Virtual machines
Chapter 3: Process Concept
Module 12: I/O Systems I/O hardwared Application I/O Interface
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:

DSP/BIOS System Integration Workshop Copyright © 2004 Texas Instruments. All rights reserved. T TO Technical Training Organization 1.Introduction 2.Real-Time System Design Considerations 3.Hardware Interrupts (HWI) 4.Software Interrupts (SWI) 5.Task Authoring (TSK) 6.Data Streaming (SIO) 7.Multi-Threading (CLK, PRD) 8.BIOS Instrumentation (LOG, STS, SYS, TRC) 9.Static Systems (GCONF, TCONF) 10.Cache (BCACHE) 11.Dynamic Systems (MEM, BUF) 12.Flash Programming (HexAIS, Flashburn) 13.Inter-Thread Communication (MSGQ,...) 14.DSP Algorithm Standard (XDAIS) 15.Input Output Mini-Drivers (IOM) 16.Direct Memory Access (DMA) 17.Review 1

Objectives  Describe the concept of BIOS streams  List the key stream API  Adapt a Task to use stream interfacing  Set up a stream via the configuration tool  Describe how streams can interface to SWI T TO Technical Training Organization 2

 Concepts  Stream API  TSK with SIO Coding  Double Buffers  Stream Configuration  Review  Lab Data Streaming - SIO T TO Technical Training Organization 3

Why Not Use Direct Pointer Passing? Problems with direct pointer passing:  Adaptability: changes are within the threads  both driver and process need to be adapted  time consuming  ownership of both code sets?  opportunity to introduce errors Preferred:  Insulation between threads  Independent authorship  Increased and more direct reuse  Limits scope of required knowledge HWI SWI or TSK pBuf1 T TO Technical Training Organization 4

Standardized IO Interface Benefits Proposal: Standardized interface between IO and Process  IO’s write to generic interface  Process assumes the generic interface as data source/sink  Each can be written independently of the other  Maximized reuse – all I, P, O authors write to the same interface  Major Bonus: Make interface a system integration control point Allows late-stage selection of interface properties  Size of buffers  Number of buffers  Which memories buffers reside in  Key: Larger systems need to separate component authoring details from system integration adjustments HWI SWI or TSK pBuf1 T TO Technical Training Organization 5

SIO Concepts How is all this done?  IO author will ‘wrap’ the basic HWI with code to i/f to the ‘stream’ (Drive details are in chapter 14)  TSK controls and ‘owns’ the stream via SIO API  TSK usually ‘owns’ the memory blocks passed between TSK and IOM  TSK will ‘issue’ a block to the stream to begin data activity  Issue to an input device is usually of an ‘empty’ buffer to be filled  Issue to output device is usually ‘full’ buffer to be consumed  TSK will ‘reclaim’ the issued buffer to:  read new input data or  obtain ‘used’ output buffer to write new data into  Stream will block the TSK on reclaim if no buffer currently avaiable  Stream unblocks TSK when data buffer becomes available HWI SIO_reclaim() process buffer... SIO_issue() pBufx SIO IOM pBufx T TO Technical Training Organization 6

SIO Tactical Benefits  Stream API are part of BIOS and streams are managed by BIOS, so the user obtains this infrastructure with no coding effort on their part  Stream ‘decouples’ the hard real-time nature of the IOM from the TSK  Stream synchronizes TSK to IOM via SIO_reclaim being a blocking call  Stream can maintain any desired number of buffers specified  Data block size can be whatever is desired  TSK and IOM can be written to obtain these parameters from the SIO  Therefore – system integrators can use the specification of the stream properties to perform late-stage system tuning – adapting the number and size of buffers to optimize the performance of the TSK & IOM without changing any of the internal code of the TSK or IOM!  SIO can be created dynamically, so this ‘tuning’ can even be performed as the DSP runs! HWI SIO_reclaim() process buffer... SIO_issue() pBufx SIO IOM pBufx T TO Technical Training Organization 7

SIO Concepts  Common I/O interface: between Tasks and Devices  Universal interface to I/O devices  Yields improved code maintenance and portability  Number of buffers and buffer size are user selectable  Unidirectional: streams are input or output - not both  Efficiency: uses pointer exchange instead of buffer copy  SIO_issue passes an “IOM Packet” buffer descriptor to Device via stream  SIO_reclaim waits for an IOM Packet to be returned by the DEV via stream  Abstraction: TSK author insulated from device-specific functionality  BIOS manages two QUEues (todevice & fromdevice)  Driver author signals TSK buffer is ready via SEM  Asynchronous: TSK and DEV activity is independent, synch’d by buffer passes  Buffers: Data buffers must be created - by config tool or TSK MY_DSP_algo Task issue reclaim Output IOM issue reclaim SIO Input IOM SIO IOM Packet prev {QUE_Elem} next Ptr addr Uns size Arg misc Arg arg Uns cmd Int status T TO Technical Training Organization 8

 Concepts  Stream API  TSK with SIO Coding  Double Buffers  Stream Configuration  Review  Lab Data Streaming - SIO T TO Technical Training Organization 9

Buffer Passing: SIO_issue() & _reclaim() status = SIO_issue(hStream, pBuf, uSize, arg); uSize = SIO_reclaim(hStream, &pBuf, pArg); status = SIO_issue(hStream, pBuf, uSize, arg); uSize = SIO_reclaim(hStream, &pBuf, pArg); typeparamusage Intstatus report of success/failure of operation IntuSize # of used values in block - in nmadus (error = -) SIO_HandlehStream handle to stream obj PtrpBuf pointer to buffer being stream transferred Argarg uncommitted gen’l purpose user argument  SIO_issue() and SIO_reclaim() are the key stream API for exchaging buffers with IOM via the stream interface.  SIO_issue() places a buffer in the stream  SIO_reclaim() requests a buffer from the stream. Note:  if no buffers are already available in the stream, this call can block until a buffer is made available from the IOM  Never attempt a reclaim prior to issuing buffer(s) into the stream first  *pBuf is where SIO_reclaim writes the address of the buffer returned T TO Technical Training Organization 10

Globals, Statics TSK Locals SIO_staticbuf()Dynamic Allocation malloc(), MEM_alloc(), etc Setup Speed Fastest No setup cycle time Fast- Uses few cycles; Is deterministic Consumes significant cycles to setup, not deterministic RAM Re-use Not possible without specific planning RAM is easily returned to system for reuse SIO Property Tracking Manual – buffer properties not derived from SIO properties Buffer properties are specified by SIO properties Buffer properties can track stream properties via SIO_create arguments Ease of routing an SIO’s buffers to a particular HW RAM Requires use of pragma statements and linker routing Each SIO’s buffers can come from any available HW RAM Each SIO’s buffers can come from any available HW RAM containing a heap section Buffer Declaration/Creation Options  A variety of methods are available for obtaining buffers for use in streams  The table below compares the most common methods by consideration  Each system, and even individual streams might use a different approach, based on which of the noted criteria is of greatest importance in that case  Ease of use? Not really a factor - none are significantly difficult to manage  All discussion to this point has been exclusively of static systems. Dynamic Allocation techniques will be covered in module 10 T TO Technical Training Organization 11

Obtaining Buffers: SIO_staticbuf() uSize = SIO_staticbuf(hStream, &pBuf);  SIO_staticbuf() returns buffers for statically created streams where the ‘Allocate Static Buffers’ box was checked  SIO_staticbuf() can only be called prior to any SIO_issue or _reclaim call T TO Technical Training Organization typeparamusage IntuSize size of block obtained - in nmadus (o if no more) SIO_HandlehStream handle to statically created parent stream obj PtrpBuf pointer to buffer being stream transferred 12

Halting a Stream: SIO_idle(), SIO_flush() status = SIO_idle(hStream); status = SIO_flush(hStream); status = SIO_idle(hStream); status = SIO_flush(hStream); typeparamusage IntStatus report of success/failure of operation SIO_HandlehStream handle to stream obj  SIO_flush() indicates to immediately return all buffers, regardless of state of data (sent, waiting, in progress)  SIO_idle() is  identical to _ flush for input streams,  directs output streams to complete sending any remaining ‘live’ data prior to return  blocks the calling task until all output data is sent  In both cases, the underlying driver is idled prior to their return T TO Technical Training Organization 13

Managing the Underlying IOM: SIO_ctrl() status = SIO_ctrl(hStream, uCmd, arg); typeparamusage Intstatus whatever return value the IOM author provided SIO_HandlehStream handle to statically created parent stream obj UnsuCmd command value passed to IOM – IOM specific Argarg uncommitted gen’l purpose user argument  SIO_ctrl() allows control and communication with the underlying IOM  Not a frequently used SIO API  Abilities offered with SIO_ctrl() are entirely the option of the IOM author  Are by definition hardware-specific and unlikely matched with another IOM  If IOM management only required when being bound to stream, can use parameter structure instead (see IOM chapter)  SIO_ctrl() is ideal if parameter changes required after stream creation SIO_ctrl(hMySio, DAC_RATE, 12000); Example: T TO Technical Training Organization 14

“First Available” Stream: SIO_select() SIO_Handle hSioIn, hSioOut, ahSioTab[2]; Uns uMask; ahSioTab [0] = hSioIn; ahSioTab [1] = hSioOut; uMask = SIO_select(ahSioTab, 2, SYS_FOREVER) if (uMask == 0x1) { // service streamIn } if (uMask == 0x2) { // service streamOut } SIO_Handle hSioIn, hSioOut, ahSioTab[2]; Uns uMask; ahSioTab [0] = hSioIn; ahSioTab [1] = hSioOut; uMask = SIO_select(ahSioTab, 2, SYS_FOREVER) if (uMask == 0x1) { // service streamIn } if (uMask == 0x2) { // service streamOut }  Wait until one or more streams are ready for I/O  streamtab defines which streams to pend on  Useful for slow-device I/O  Daemon task to route data from several sources  recommended: use newer BIOS messaging API, eg: MSGQ IOM In IOM Out post or post unblocks typeparam usage UnsuMask ready stream ID SIO_HandleahSioTab[] table of streams IntnSio # of streams in table UnsuTimeout max blocking time uMask = SIO_select(ahSioTab, nSio, uTimeout); T TO Technical Training Organization 15

SIO API Summary Buffer Passing SIO_issue Send a buffer to a stream SIO_reclaim Request a buffer back from a stream SIO_readyTest to see if stream has buffer available for reclaim SIO_select Wait for any of a specified group of streams to be ready Stream Management SIO_staticbuf Obtain pointer to statically created buffer SIO_flush Idle a stream by flushing buffers SIO_idle Idle a stream SIO_ctrl Perform a device-dependent control operation Stream Properties Interrogation SIO_bufsize Returns size of the buffers specified in stream object SIO_nbufs Returns number of buffers specified in stream object SIO_segid Memory segment used by a stream as per stream object Dynamic Stream Management (mod.11) SIO_create Dynamically create a stream (malloc fxn) SIO_delete Delete a dynamically created stream (free fxn) Archaic Stream API SIO_get Get buffer from stream SIO_put Put buffer to a stream T TO Technical Training Organization 16

sio.h excerpt – SIO API “tricks” T TO Technical Training Organization extern Int _SIO_idle(SIO_Handle stream, Bool flush); #define SIO_idle(stream)_SIO_idle(stream, 0) #define SIO_flush(stream)_SIO_idle(stream, 1) #define SIO_ctrl(stream, cmd, arg)DEV_ctrl((DEV_Handle)stream, cmd, arg) #define SIO_ready(stream)DEV_ready((DEV_Handle)stream, NULL) #define SIO_segid(stream)((stream)->dobj.segid) #define SIO_bufsize(stream)((stream)->dobj.bufsize) #define SIO_nbufs(stream)((stream)->dobj.nbufs) extern Int _SIO_idle(SIO_Handle stream, Bool flush); #define SIO_idle(stream)_SIO_idle(stream, 0) #define SIO_flush(stream)_SIO_idle(stream, 1) #define SIO_ctrl(stream, cmd, arg)DEV_ctrl((DEV_Handle)stream, cmd, arg) #define SIO_ready(stream)DEV_ready((DEV_Handle)stream, NULL) #define SIO_segid(stream)((stream)->dobj.segid) #define SIO_bufsize(stream)((stream)->dobj.bufsize) #define SIO_nbufs(stream)((stream)->dobj.nbufs) Note: examination of the header files for the various BIOS modules can yield useful knowledge about the API, structures, and their usage. 17

 Concepts  Stream API  TSK with SIO Coding  Double Buffers  Stream Configuration  Review  Lab Data Streaming - SIO T TO Technical Training Organization 18

Basic Task Code Topology Void taskFunction(…) { /* Prolog */ while (‘condition’){ SIO_reclaim(); /* Process */ SIO_issue(); } /* Epilog */ } Void taskFunction(…) { /* Prolog */ while (‘condition’){ SIO_reclaim(); /* Process */ SIO_issue(); } /* Epilog */ }  Initialization (runs once only)  Processing loop - option: termination condition  Wait for resources to be available  Perform desired DSP work...  Shutdown (runs once - at most) T TO Technical Training Organization 19

Task Coding Example void myTask() { short inBuf[BUFSIZE]; make stream buffers short outBuf [BUFSIZE]; SIO_issue (&inStream, inBuf, sizeof(inBuf), NULL); prime streams w buffers SIO_issue (&outStream, outBuf,sizeof(outBuf), NULL); while (continue == TRUE) { run loop w exit condition inSize = SIO_reclaim (&inStream, (Ptr *)&inBuf, NULL); outSize = SIO_reclaim (&outStream, (Ptr *)&outBuf, NULL); get buffers for (i = 0; i < (outSize / sizeof(short)); i++) { do DSP... outbuf[i] = 2*inbuf[i]; } SIO_issue (&outStream, outBuf, outSize, NULL); send buffers SIO_issue (&inStream, inBuf, inSize, NULL); } SIO_idle (&inStream); turn off streams & IOMs SIO_idle (&outStream); SIO_reclaim (&inStream, (Ptr *)&inBuf, NULL); get back buffers SIO_reclaim (&outStream, (Ptr *)&outBuf, NULL); } T TO Technical Training Organization Note: conceptual example only – cannot use static declaration ‘inBuf’ ()and outBuf) as rtn ptrs… 20

Error Checking and Handling : Module 8 if ( SIO_issue(inStream, buf0, SIO_bufsize(inStream), NULL) != SYS_OK) { if issue failed SYS_abort("Error when issuing buffer to the input stream"); exit and report failure } if ((inSize = SIO_reclaim(inStream, (Ptr *)&inbuf, NULL)) < 0) { if reclaim failed SYS_abort("Error in reclaiming buffer from input stream"); exit and report failure } Note: SYS API to be covered in Module 8  issue fail possible if more buffers are sent than stream was specified to queue  reclaim failure would be the result of blocking timeout T TO Technical Training Organization 21

 Concepts  Stream API  TSK with SIO Coding  Double Buffers  Stream Configuration  Review  Lab Data Streaming - SIO T TO Technical Training Organization 22

Double Buffer Concepts  To maintain real-time throughput, it is often beneficial to provide two buffers to each stream:  One should always be available to the IOM  The other is available to the TSK for processing  Once processed by the TSK, it is re-issued back into the stream  Stream maintains buffers in a (BIOS) QUE until needed by IOM or TSK  After returning (issuing) the used buffer back into the stream, the TSK usually requests (reclaim) a new buffer from the stream to continue processing  If a block is available, the stream provides it to the TSK  Otherwise, TSK is blocked until IOM returns a buffer to the stream; then TSK is unblocked and given the buffer requested and now available  Allows for effective ‘concurrency’ (processing one buffer while filling another)  For real-time to be met, DSP processing should complete before the I/O does T TO Technical Training Organization 23

IOM Device TASK Single Buffer Example T TO Technical Training Organization int pBuf[SIZE]; status = SIO_issue(hStrm, pBuf, SIZE, NULL ); while(…) size = SIO_reclaim(hStrm, &pBuf, NULL); // process & send output status = SIO_issue(hStrm, pBuf, SIZE, NULL ); size = SIO_reclaim(hStrm, &pBuf, NULL); full empty ToDeviceQUE Input Stream FromDeviceQUE full empty ToDeviceQUE empty BIOS: Stream 24

Double Buffer Example int pBuf_1[SIZE]; int pBuf_2[SIZE]; status = SIO_issue(hStrm, pBuf_1, SIZE, NULL ); status = SIO_issue(hStrm, pBuf_2, SIZE, NULL ); while(…) size = SIO_reclaim(hStrm, &pBuf_x, NULL); // process & send output status = SIO_issue(hStrm, pBuf_x, SIZE, NULL ); size = SIO_reclaim(hStrm, &pBuf_1, NULL); size = SIO_reclaim(hStrm, &pBuf_2, NULL); BIOS: Stream TASK full empty ToDeviceQUE Input Stream FromDeviceQUE full empty IOM Device T TO Technical Training Organization empty ToDeviceQUE empty 25

Double Buffer Stream TSK Coding Example T TO Technical Training Organization //prolog – prime the process… status = SIO_issue(&sioIn, pIn1, SIZE, NULL); status = SIO_issue(&sioIn, pIn2, SIZE, NULL); status = SIO_issue(&sioOut, pOut1, SIZE, NULL); status = SIO_issue(&sioOut, pOut2, SIZE, NULL); //while loop – iterate the process… while (condition == TRUE){ size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); size = SIO_reclaim(&sioOut, (Ptr *)&pOutX, NULL); // DSP... to pOut status = SIO_issue(&sioIn, pInX, SIZE, NULL); status = SIO_issue(&sioOut, pOutX, SIZE, NULL); } //epilog – wind down the process… status = SIO_flush(&sioIn); status = SIO_idle(&sioOut); size = SIO_reclaim(&sioIn, (Ptr *)&pIn1, NULL); size = SIO_reclaim(&sioIn, (Ptr *)&pIn2, NULL); size = SIO_reclaim(&sioOut, (Ptr *)&pOut1, NULL); size = SIO_reclaim(&sioOut, (Ptr *)&pOut2, NULL); 26

Double Buffer Stream TSK Coding Example //prolog – prime the process… status = SIO_issue(&sioIn, pIn1, SIZE, NULL); status = SIO_issue(&sioIn, pIn2, SIZE, NULL); size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); // DSP... to pOut1 status = SIO_issue(&sioIn, pInX, SIZE, NULL); size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); // DSP... to pOut2 status = SIO_issue(&sioIn, pInX, SIZE, NULL); status = SIO_issue(&sioOut, pOut1, SIZE, NULL); status = SIO_issue(&sioOut, pOut2, SIZE, NULL); //while loop – iterate the process… while (condition == TRUE){ size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); size = SIO_reclaim(&sioOut, (Ptr *)&pOutX, NULL); // DSP... to pOut status = SIO_issue(&sioIn, pInX, SIZE, NULL); status = SIO_issue(&sioOut, pOutX, SIZE, NULL); } //epilog – wind down the process… status = SIO_flush(&sioIn); status = SIO_idle(&sioOut); size = SIO_reclaim(&sioIn, (Ptr *)&pIn1, NULL); size = SIO_reclaim(&sioIn, (Ptr *)&pIn2, NULL); size = SIO_reclaim(&sioOut, (Ptr *)&pOut1, NULL); size = SIO_reclaim(&sioOut, (Ptr *)&pOut2, NULL); T TO Technical Training Organization 27

Triple Buffer Stream Coding Example T TO Technical Training Organization //prolog – prime the process… status = SIO_issue(&sioIn, pIn1, SIZE, NULL); status = SIO_issue(&sioIn, pIn2, SIZE, NULL); status = SIO_issue(&sioIn, pIn3, SIZE, NULL); size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); // DSP... to pOut1 status = SIO_issue(&sioIn, pInX, SIZE, NULL ); size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); // DSP... to pOut2 status = SIO_issue(&sioIn, pInX, SIZE, NULL ); size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); // DSP... to pOut3 status = SIO_issue(&sioIn, pInX, SIZE, NULL ); status = SIO_issue(&sioOut, pOut1, SIZE, NULL); status = SIO_issue(&sioOut, pOut2, SIZE, NULL); status = SIO_issue(&sioOut, pOut3, SIZE, NULL); //while loop – iterate the process…No change here ! while (condition == TRUE){ size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); size = SIO_reclaim(&sioOut,(Ptr *)&pOutX, NULL); // DSP... to pOut status = SIO_issue(&sioIn, pInX, SIZE, NULL); status = SIO_issue(&sioOut, pOutX, SIZE, NULL); } //epilog – wind down... status = SIO_flush(&sioIn); status = SIO_idle(&sioOut); size = SIO_reclaim(&sioIn, (Ptr *)&pIn1, NULL); size = SIO_reclaim(&sioIn, (Ptr *)&pIn2, NULL); size = SIO_reclaim(&sioIn, (Ptr *)&pIn3, NULL); size = SIO_reclaim(&sioOut,(Ptr *)&pOut1, NULL); size = SIO_reclaim(&sioOut,(Ptr *)&pOut2, NULL); size = SIO_reclaim(&sioOut,(Ptr *)&pOut3, NULL); 28

“N” Buffer Stream Coding Example T TO Technical Training Organization //prolog – prime the process… for (n=0;n<SIO_nbufs(&sioIn);n++) status = SIO_issue(&sioIn, pIn[n], SIZE, NULL); for (n=0;n<SIO_nbufs(&sioOut);n++){ size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); // DSP... to pOut[n] status = SIO_issue(&sioIn, pInX, SIZE, NULL ); } for (n=0;n<SIO_nbufs(&sioOut);n++) status = SIO_issue(&sioOut, pOut[n], SIZE, NULL); //while loop – iterate the process…NO CHANGE HERE ! ! while (condition == TRUE){ size = SIO_reclaim(&sioIn, (Ptr *)&pInX, NULL); size = SIO_reclaim(&sioOut, (Ptr *)&pOutX, NULL); // DSP... to pOut status = SIO_issue(&sioIn, pInX, SIZE, NULL ); status = SIO_issue(&sioOut, pOutX, SIZE, NULL); } //epilog – wind down... status = SIO_flush(&sioIn); status = SIO_idle(&sioOut); for (n=0;n<SIO_nbufs(&sioIn);n++) size = SIO_reclaim(&sioIn, (Ptr *)&pIn[n], NULL); for (n=0;n<SIO_nbufs(&sioOut);n++){ size = SIO_reclaim(&sioOut, (Ptr *)&pOut[n], NULL); 29

 Concepts  Stream API  TSK with SIO Coding  Double Buffers  Stream Configuration  Review  Lab Data Streaming - SIO T TO Technical Training Organization IOM DIO SIO TSK 1 – register IOM 2 – tie in DIO i/f 3 – define stream 4 – use stream DIO SIO A/DD/A 0 – build HW 30

Stream Configuration IOM DIO SIO TSK 1 – register IOM 2 – tie in DIO i/f 3 – define stream 4 – use stream DIO SIO A/DD/A 0 – build HW 31

1. Register the I/O Mini-Driver Technical Training Organization T TO namefxnsdevidparamstypedevp /uDevMyCodec_DSK6416_EDMA…FXN0x0 IOM_Fxns0x0 DEV Table  Include the files/library containing the IOM in the project 32

2. Register the DIO, Bind to IOM Technical Training Organization T TO namefxnsdevidparamstypedevp /uDevMyCodec_DSK6416_EDMA…FXN0x0 IOM_Fxns0x0 /dioCodecXmt_DIO_tskStaticFxns0x0 DEV_Fxns0x0 DEV Table  DIO code is built into BIOS – no new files to include Important ! 33

3. SIO Module Params & Object Creation GCONF TCONF SIO.OBJMEMSEG = prog.get(“IRAM”); SIO.USEISSUERECLAIM = true; var mySio = SIO.create(“sio_Receive"); T TO Technical Training Organization 34

3. Define SIO Object Properties sioRcv.comment = “input stream"; sioRcv.deviceName = prog.get(“dioCodecRcv"); // sioRcv.controlParameter = sioRcv.mode = "input"; // “output” sioRcv.bufSize = 764; sioRcv.numBufs = 2; // sioRcv.bufSegId = prog.get(“IRAM"); // sioRcv.bufAlign = 1; // 2**n sioRcv.flush = false; sioRcv.modelName = “Issue/Reclaim"; sioRcv.allocStaticBuf = true; // false sioRcv.timeout = -1; sioRcv.useCallBackFxn = false; // true w. SWI sioRcv.comment = “input stream"; sioRcv.deviceName = prog.get(“dioCodecRcv"); // sioRcv.controlParameter = sioRcv.mode = "input"; // “output” sioRcv.bufSize = 764; sioRcv.numBufs = 2; // sioRcv.bufSegId = prog.get(“IRAM"); // sioRcv.bufAlign = 1; // 2**n sioRcv.flush = false; sioRcv.modelName = “Issue/Reclaim"; sioRcv.allocStaticBuf = true; // false sioRcv.timeout = -1; sioRcv.useCallBackFxn = false; // true w. SWI  Device – IOM to ‘bind’ to  Model: select Issue/Reclaim! GCONF TCONF T TO Technical Training Organization 35

 Concepts  Stream API  TSK with SIO Coding  Double Buffers  Stream Configuration  Review  Lab Data Streaming - SIO T TO Technical Training Organization 36

SIO Review  Common I/O interface: between Tasks and Devices  Universal interface to I/O devices  Yields improved code maintenance and portability  Number of buffers and buffer size are user selectable  Unidirectional: streams are input or output - not both  Efficiency: block passed by reference instead of by copy  SIO_issue passes an “IOM Packet” buffer descriptor to driver via stream  SIO_reclaim waits for an IOM Packet to be returned by driver via stream  Abstraction: TSK author insulated from underlying functionality  BIOS (SIO) implicitly manages two QUEues (todevice & fromdevice)  SIO_reclaim synchronized via implicitBIOS (DIO) SEM  IOM Packets (aka DEV_Frames) produced by SIO on stream creation  Asynchronous: TSK and driver activity is independent, synch’d by buffer passes  Buffers: Data buffers must be created - by config tool or TSK MY_DSP_algo Task issue reclaim Output IOM issue reclaim SIO Input IOM SIO IOM Packet prev {QUE_Elem} next Ptr addr Uns size Arg misc Arg arg Uns cmd Int status 37

 Concepts  Stream API  TSK with SIO Coding  Double Buffers  Stream Configuration  Review  Lab Data Streaming - SIO T TO Technical Training Organization 38

Audio Out (48 KHz) Lab 6: SIO Interfaced Task Thread ADC AIC33 Audio In (48 KHz) McBSP DRR FIR.c FIR Code DAC AIC33 McBSP DXR udevCodec coeffs.c Coefficients BIOS provided BIOS\Labs\Algos A – Test driver example in PSP tree B – Move driver example into \Work folder C – Restore FIR application - Replace SEM & QUE, with SIO; delete isrAudio(), etc… D&E – Optional: implement enhanced coding options dioCodec tskProcBuf IOM SIO T TO Technical Training Organization procBuf while() SIO_reclaim(&sioIn) for (i =0, i<HIST; i ++) pIn ][ i-HIST ]= pPriorIn ][ 2*BUF-HIST ]; if( sw0 == 1 ) FIR(in[ pIn-HIST ],out[ pOut ]) else {pOut[i]=pIn[i]} C:\ dvsdk _1_01_00_15 \ psp _1_00_02_00 39

Lab06.c void procBuf(void) {// No args - common for TSK shorti;// for loop indexer short*pPriorIn;// points to history buf short*pIn, *pOut; // local ptrs to I/O bufs SIO_Handle sioIn, sioOut; sioIn = SIO_create("/dioIn", SIO_INPUT, 4*BUF, NULL); sioOut = SIO_create("/dioOut", SIO_OUTPUT, 4*BUF, NULL); SIO_issue(sioIn, &in[0][HIST],4*BUF, NULL);// put 1st buf to I strm SIO_issue(sioIn, &in[1][HIST],4*BUF, NULL);// put 2nd buf to I strm SIO_issue(sioOut, &out[0][0], 4*BUF, NULL);// put 1st buf to O strm SIO_issue(sioOut, &out[1][0], 4*BUF, NULL);// put 2nd buf to O strm while(1) {// infinite loop: std w TSK SIO_reclaim(sioIn, (Ptr *)&pIn, NULL);// get full buf from a/d SIO_reclaim(sioOut, (Ptr *)&pOut, NULL);// get empty buf from d/a for ( i = 0; i < HIST; i++ )// for (size of history) pIn[i-HIST] = pPriorIn[i+2*BUF-HIST]; // prime stereo hist buf pPriorIn = pIn;// update ptr to hist data if( sw0 == 1 ) {// if filtering is 'on‘ FIR(pIn-HIST, &coeffs[cSet][0], pOut, FIRSZ, BUF); FIR(pIn+1-HIST, &coeffs[cSet][0], pOut+1, FIRSZ, BUF); } else {// if filtering is 'off' for( i = 0; i < 2*BUF; i++ )// for all new in data pOut[i] = pIn[i];// copy L in to L out } SIO_issue(sioIn, pIn, 4*BUF, NULL);// send empty buf to a/d SIO_issue(sioOut, pOut, 4*BUF, NULL);// send full buf to d/a } } 40

ti Technical Training Organization 41

Lab Details FilterDebugRelease Off18% 4.7% On61% 6.5% HWI – based lab 3 FilterDebugRelease Off 3.8% 2.3% On45% 3.7% SWI – based lab 4 Observations: Adding SWI in almost all cases dropped CPU load In addition, it greatly increases HWI response time, reduces interrupt latency, spreads instantaneous demand into average demand, lowering required processor speed greatly in most systems ! TSK – based lab 5 FilterDebugRelease Off 6.9% 5.1% On48% 6.3 % SIO – based lab 6 FilterDebugRelease Off 3.8% 2.5% On 45% 3.8% 42