Using C to Access Data Stored in Program Memory on the TMS320C54x DSP



Similar documents
Using C to Access Data Stored in Program Space Memory on the TMS320C24x DSP

Using Code Coverage and Multi-event Profiler in Code Composer Studio v2.3 for Robustness and Efficiency Analyses

TI and ibiquity Introduce Industry s Lowest Cost Single-Chip AM/FM and HD Radio Baseband John Gardner Digital Radio Marketing Manager

Data sheet acquired from Harris Semiconductor SCHS067B Revised July 2003

Application Report. 1 Description of the Problem. Jeff Falin... PMP Portable Power Applications ABSTRACT

SDLS068A DECEMBER 1972 REVISED OCTOBER Copyright 2001, Texas Instruments Incorporated

Data sheet acquired from Harris Semiconductor SCHS087D Revised October 2003

Design Note DN004. Folded Dipole Antenna for CC25xx By Audun Andersen. Keywords. 1 Introduction CC2500 CC2550 CC2510 CC2511

Data sheet acquired from Harris Semiconductor SCHS020C Revised October 2003

Calculating Gain for Audio Amplifiers

APPLICATION NOTE BUILDING A QAM MODULATOR USING A GC2011 DIGITAL FILTER CHIP


6 Output With 1 kω in Series Between the Output and Analyzer Output With RC Low-Pass Filter (1 kω and 4.7 nf) in Series Between the Output

Design Note DN304. Cebal CCxxxx Development Tools USB Driver Installation Guide By Åsmund B. Bø. Keywords. 1 Introduction


ZigBee Sensor Monitor SWRU157D 2008 Low-Power RF

µa7800 SERIES POSITIVE-VOLTAGE REGULATORS

LM5030 LM5030 Application: DC - DC Converter Utilizing the Push-Pull Topology

Application Report. 1 Introduction. 2 Resolution of an A-D Converter. 2.1 Signal-to-Noise Ratio (SNR) Harman Grewal... ABSTRACT

ORDERING INFORMATION. TOP-SIDE MARKING PDIP N Tube SN74LS07N SN74LS07N PACKAGE. SOIC D Tape and reel SN74LS07DR

Optical Implementation Using IEEE-1394.b

Evaluating the complex configuration options of the Texas Instruments advanced fuel gauges can be

Application Note AN107

Design Note DN002. Practical Sensitivity Testing By Morten Engjom. Keywords. 1 Introduction. Receiver Testing Sensitivity

Analysis Toolkit v1.3 for Code Composer Studio User s Guide

Choosing Inductors and Capacitors for DC/DC Converters

Floating Point C Compiler: Tips and Tricks Part I

Filter Design in Thirty Seconds

CUSTOM GOOGLE SEARCH PRO. User Guide. User Guide Page 1

TRF7960 Evaluation Module ISO Host Commands

AMC1100: Replacement of Input Main Sensing Transformer in Inverters with Isolated Amplifier

How To Close The Loop On A Fully Differential Op Amp

SN54165, SN54LS165A, SN74165, SN74LS165A PARALLEL-LOAD 8-BIT SHIFT REGISTERS

Controlling TAS5026 Volume After Error Recovery

Smart Codec Features in TMS320DM365

Managing Code Development Using CCS Project Manager

Designing Gain and Offset in Thirty Seconds

Motor Speed Measurement Considerations When Using TMS320C24x DSPs

Standard Linear & Logic Semiconductor Marking Guidelines

LM556 LM556 Dual Timer

Application Report. Jim Patterson... Americas Field Applications

Importing a SPICE NetList Into TINA9-TI

TVP5146 VBI Quick Start

Using Texas Instruments Spice Models in PSpice

54LS174,54LS175,DM54LS174,DM54LS175, DM74LS174,DM74LS175

Data sheet acquired from Harris Semiconductor SCHS078C -- Revised October 2003

Programming the On-Chip Flash Memory in a Stellaris Microcontroller. Application Note. Copyright Texas Instruments

LM709 LM709 Operational Amplifier

SEO Suite Pro. User Guide

IMPORT/EXPORT CUSTOMER REVIEWS. User Guide. User Guide Page 1

Using the Scripting Utility in the Code Composer Studio Integrated Development Environment

Wireless Subwoofer TI Design Tests

Providing Continuous Gate Drive Using a Charge Pump

Code Composer Studio Getting Started Guide

User s Guide. 100-W Universal Line Input PFC Boost Converter Using the UCC User s Guide

1. Installation Instructions

Pressure Transducer to ADC Application

Multi-Transformer LED TV Power User Guide. Anderson Hsiao

Binary Search Algorithm on the TMS320C5x

Analysis of Power Supply Topologies for IGBT Gate Drivers in Industrial

Important Notice. All company and brand products and service names are trademarks or registered trademarks of their respective holders.

TMS320C67x FastRTS Library Programmer s Reference

Ultrasonic Sensing Basics for Liquid Level Sensing, Flow Sensing, and Fluid

August 2001 PMP Low Power SLVU051

Evaluation Criteria for ADSL AFE1302

LM388 LM W Audio Power Amplifier

Texas Instruments. FB PS LLC Test Report HVPS SYSTEM AND APPLICATION TEAM REVA

SEO Meta Templates. Magento Extension. User Guide. SEO Meta Templates

IMPORT / EXPORT PRODUCTS

DC/DC LED Lighting Developer s Kit Hardware

Next-Generation Residential Gateways: Flexibility and High-Performance will be Critical

Current-Transformer Phase-Shift Compensation and Calibration

WLAN Channel Bonding: Causing Greater Problems Than It Solves

SDLS940A MARCH 1974 REVISED MARCH Copyright 1988, Texas Instruments Incorporated

Selecting the Right Level-Translation Solution

IMPORT/EXPORT COUPON/SHOPPING CART RULES. User Guide. User Guide Page 1

PCIe XMC x8 Lane Adapter

Ultra-Low Power Comparison: MSP430 vs. Microchip XLP Tech Brief A Case for Ultra-Low Power Microcontroller Performance

Design Note DN041. Using CC253X or CC254X with Dipole PCB Antennas. Keywords. 1 Introduction. By Espen Wium CC2530 CC2531 CC2533 CC2540 CC2541

News Extension 2.2 User Guide

1. Installation Instructions

DS8907 DS8907 AM/FM Digital Phase-Locked Loop Frequency Synthesizer

APPLICATION BULLETIN

Application Report SLVA051

Demystifying digital signal processing (DSP) programming: The ease in realizing implementations with TI DSPs

Combining the ADS1202 with an FPGA Digital Filter for Current Measurement in Motor Control Applications

with Ultra-Fast Transient Response and High Light-Load Efficiency

THE RIGHT-HALF-PLANE ZERO --A SIMPLIFIED EXPLANATION

AN-1733 Load Transient Testing Simplified

Analysis of Filter Coefficient Precision on LMS Algorithm Performance for G.165/G.168 Echo Cancellation

XDC Consumer User s Guide

AN-311 Theory and Applications of Logarithmic Amplifiers

Antenna. Reference Guide. November 1996 SCBU025

Transcription:

Application Report SPRA177A August 2005 Using C to Access Data Stored in Program Memory on the TMS320C54x DSP David M. Alter DSP Applications - Semiconductor Group ABSTRACT Efficient utilization of available memory in a TMS320C54x DSP sometimes requires the placement of data in program space memory (as opposed to data space memory). However, accessing this data using the C programming language is problematic, since the C-compiler provides no mechanism for accessing program space. This application note presents a solution for accessing data stored in program space memory using C on the TMS320C54x DSP. A C-callable library of six assembly code functions for accessing data in program memory (including extended program memory) is also provided. This application report contains project code that can be downloaded from this link. http://www-s.ti.com/sc/psheets/spra177a/spra177a.zip Contents Introduction...2 Generating 23-bit Program Memory Pointers in C...2 The Code Download...2 Download Package Contents...2 The PFUNC Code Library...3 Example of PFUNC Library Use...4 Constructing the Program Memory Data Values...5 References...5 Appendix A. PFUNC Function Library Technical Reference...6 Revision History...12 Table 1. Table 2. Tables of Code Download Files...3 PFUNC Library Functions...3 1

Introduction On TMS320C54x devices, it is sometimes desirable to place data in program space memory rather than in data space memory. This is especially true on TMS320C54x devices that support extended program space addressing. On such devices, programmers may exhaust the 64Kw of data space memory, but still have an excess of program memory available. When working in the C programming language however, it is not sufficient to simply link the data into the program space, as the C-compiler expects all constants (and variables) to be in data memory. Further complicating the problem is the fact that the C-compiler allocates only 16-bits for data pointers. Therefore, if the data variables are linked to extended program memory (i.e. above 64Kw), the compiler will not create a pointer containing the full 23-bit address. This application reports presents a solution for accessing data in program memory using C. First, a fully relocatable approach for getting the C-compiler to generate a 23-bit pointer to program space is presented. Relocatable means that no hard-coding of extended program memory addresses or pages is used. Next, a small library of six C-callable assembly functions is given, along with example code showing usage of these functions. Generating 23-bit Program Memory Pointers in C The TMS320C54x Optimizing C-Compiler utilizes only 16-bits for data pointers (see Reference 1, revision F, page 5-6). This includes all labels and symbols that represent an address for any data variable, structure, etc. The 16-bit pointers are sufficient for accessing data located in the first 64Kw of program memory. However, in order to access data variables located in extended program memory (i.e. above 64Kw), a method is needed to get the compiler to generate at least a 23-bit pointer, which is the combined width of the 16-bit PC (program counter) plus the 7-bit XPC (extended program counter) in the C54x CPU. The 23-bit pointer can then passed to a C- callable assembly function, which can access the data at the specified program memory address and perform the desired task. The trick to getting the C-compiler to generate a full 23-bit address is to declare the data symbol as a void function in the calling function. With the far memory model (compiler option -mf), the C-compiler maintains 23 bits of address for the function. The actual function pointer occupies 2 words (32-bits) in the DSP memory, although only 23 bits are significant (the upper 9 bits are zero). The Code Download Download Package Contents A code download accompanies this application report. To obtain the download, go to the Texas Instruments website, http://www.ti.com, and type in the literature number of this application report in the search box. A description of each file in the download is given in Table 1. 2 Using C to Access Data Stored in Program Memory on the TMS320C54x DSP

Table 1. File Name.pfunc\makenear.bat.pfunc\makefar.bat.\pfunc\include\pfunc.h.\pfunc\lib\pfunc.lib.\pfunc\lib\pfunc_ext.lib.\pfunc\src\blkread.asm.\pfunc\src\blkwrite.asm.\pfunc\src\strread.asm.\pfunc\src\strwrite.asm.\pfunc\src\wordread.asm.\pfunc\src\wordwrite.asm.\example\example.pjt.\example\main.c.\example\table.asm.\example\vc5416.cmd.\example\Debug\example.map.\example\Debug\example.out of Code Download Files Windows batch file for building a PFUNC library with near memory model Windows batch file for building a PFUNC library with far memory model C include file that supports the PFUNC libraries near memory model function library far memory model function library source file for PFUNC_blkRead() function source file for PFUNC_blkWrite() function source file for PFUNC_strRead() function source file for PFUNC_strWrite() function source file for PFUNC_wordRead() function source file for PFUNC_wordWrite() function C5000 Code Composer Studio v2.1 project file for the example main() function for the example assembly code data table file for the example VC5416 DSP linker command file for the example (far memory model).map file from the pre-built example (far memory model) pre-built example executable (far memory model) The PFUNC Code Library Six C-callable functions for manipulating data stored in program memory have been hand-coded in TMS320C54x mnemonic assembly language for efficiency. These functions are: Table 2. Function Name PFUNC_blkRead() PFUNC_blkWrite() PFUNC_strRead() PFUNC_strWrite() PFUNC_wordRead() PFUNC_wordWrite() PFUNC Library Functions copies a block from program memory to data memory copies a block from data memory to program memory copies a string from program memory to data memory copies a string from data memory to program memory copies a word from program memory to data memory copies a word from data memory to program memory The heart of each function uses the READA or WRITA mnemonic assembly function to access the data in program memory. Each function is described in greater detail in Appendix A of this application report. Using C to Access Data Stored in Program Memory on the TMS320C54x DSP 3

To facilitate incorporation into the readers application, the functions have been packaged into two different libraries. The library pfunc.lib has been built using the near memory model. The library pfunc_ext.lib has been built using the far memory model. The reader should include the correct library into his Code Composer project. A header file pfunc.h has also been provided that contains a function prototype for each function. This file should be included in the C-source file of any function that will be calling a library function. The libraries have been built using the TMS320C54x Code Generation Tools v3.70 (included in C5000 Code Composer Studio v2.1). Source code has been provided for each function in the event that the user needs to modify a function or would like a basis for creating new functions. The source files make use of the builtin assembler constant far_mode to differentiate between far memory model and near memory model. The far_mode constant is set by the ASM500 assembler tool and also the CL500 compiler shell. It is set to 0 when the near memory model is used (no -mf option) and set to 1 when the far memory model is used (-mf assembler or compiler option). The provided batch files makenear.bat and makefar.bat can be used to rebuild the near and far model PFUNC function libraries from the source files at a command prompt. Usage is: or makenear yourlib makefar yourlib where "yourlib" is the name of the library you wish to create. The author chose the names pfunc.lib for the near model library, and pfunc_ext.lib for the far model library, but you may use any names you want. Alternately, you can simply include the modified source file directly into your Code Composer Studio project, and not build a library at all. Example of PFUNC Library Use The.\example directory contains an example of PFUNC function use. This example uses the far memory model, and hence uses the pfunc_ext.lib library. To use the example program, copy the file.\pfunc\include\pfunc.h into the.\example directory. Then, start Code Composer Studio and load the file example.pjt using the Project->Open menu command. You can then build and run the example. Note that the linker command file vc5416.cmd is designed for a VC5416 DSP target. If running on other than a VC5416 DSP (or the Code Composer Studio code simulator configured for VC5416 DSP), the user will need to modify the linker command file accordingly. When the program is run, the Stdout window in Code Composer Studio should show the following: 4 Using C to Access Data Stored in Program Memory on the TMS320C54x DSP

If you encounter difficulties either loading the project or building the code, it is most likely a path problem with your Code Composer Studio setup. A pre-built executable file.\example\debug\example.out has been provided which should produce the above Stdout window when run on a VC5416 DSP. Use the File->Load Program menu command in Code Composer Studio to directly load this executable file. Here is what the function main() does. First, it reads string1 and string2 using the PFUNC_strRead() function, and prints them to the Stdout window. Next, it overwrites string1 with the string2 using PFUNC_strWrite(), and then reads string1 back and prints it to Stdout. It next reads string3 using the PFUNC_blkRead() function, and overwrites string2 with string3 using PFUNC_blkWrite(). Note that the terminating null character of a string is included in the block length. Finally, main() reads the first 16-bit word in string1 using PFUNC_wordRead(), and then overwrites this word in string1 with the value "5." The first word in string1 originally had the value "115," which is the numerical value of the ASCII character 's', the first letter in the word 'string.' Note that the string tmp_string must be declared of sufficient length to hold the copied program memory strings. The PFUNC functions do not cross-check source and destination lengths, and will overwrite other data if the destination length is smaller than the source string length or block size. Constructing the Program Memory Data Values The program memory data values are best constructed using assembly language. The file table.asm shows an example of how to do this. This particular example shows three strings which are to be stored in program memory. If non-string data is desired (i.e. 16-bit words), simply use the.int directive in place of the.char directive when declaring the data. The.sect directive places this data in the initialized section called "table". The "table" section is linked to program memory in the linker command file vc5416.cmd. The.def directive allows the named labels to be accessed by code in other source files. Note that the terminating zero has been manually added to the strings, since termination of strings by a trailing zero (null character) is a C-language convention. The assembler does not automatically add the zero. If non-string data is being stored in program memory, the terminating zero is not needed. References 1. TMS320C54x Optimizing C Compiler User's Guide (SPRU103) 2. TMS320C54x DSP Mnemonic Instruction Set (SPRU172) Using C to Access Data Stored in Program Memory on the TMS320C54x DSP 5

Appendix A. PFUNC Function Library Technical Reference Note: The PFUNC data type is defined in the file.\include\pfunc.h. It is used as a matter of convenience for function prototyping, since passed parameters of type PFUNC must be declared as void function pointers, and not as PFUNC data types in the calling function. PFUNC_blkRead Function Copies a block from (extended) program memory to data memory void PFUNC_blkRead( PFUNC addrprog, int *ptrdata, unsigned int length ); Arguments addrprog address of (extended) program memory source block PtrData pointer to data memory destination block Return Value None Copies a block of 16-bit words from (extended) program memory to data memory. The source code for this function uses the built in assembler constant far_mode such that it can be assembled for either the near or far memory model. If using the PFUNC libraries, pfunc.lib is for near memory model, and pfunc_ext.lib is for far memory model. This function is similar to PFUNC_strRead except that PFUNC_strRead uses the terminating null character in a string to mark the end of the block, whereas this function passes the length of the block as a parameter. Example #define N 20 extern void addrprog(void); int ptrdata[n]; int length = N; PFUNC_blkRead(addrProg, ptrdata, length); 6 Using C to Access Data Stored in Program Memory on the TMS320C54x DSP

PFUNC_blkWrite Function Copies a block from data memory to (extended) program memory void PFUNC_blkWrite( PFUNC addrprog, int *ptrdata, unsigned int length ); Arguments addrprog address of (extended) program memory destination block PtrData pointer to data memory source block Return Value None Copies a block of 16-bit words from data memory to (extended) program memory. The source code for this function uses the built in assembler constant far_mode such that it can be assembled for either the near or far memory model. If using the PFUNC libraries, pfunc.lib is for near memory model, and pfunc_ext.lib is for far memory model. This function is similar to PFUNC_strWrite except that PFUNC_strWrite uses the terminating null character in a string to mark the end of the block, whereas this function passes the length of the block as a parameter. Example #define N 20 extern void addrprog(void); int ptrdata[n]; int length = N; PFUNC_blkWrite(addrProg, ptrdata, length); Using C to Access Data Stored in Program Memory on the TMS320C54x DSP 7

PFUNC_strRead Function Copies a string from (extended) program memory to data memory void PFUNC_strRead( PFUNC addrprog, int *strdata, ); Arguments addrprog address of (extended) program memory source string PtrData pointer to data memory destination string Return Value None Copies a string from (extended) program memory to data memory. The source code for this function uses the built in assembler constant far_mode such that it can be assembled for either the near or far memory model. If using the PFUNC libraries, pfunc.lib is for near memory model, and pfunc_ext.lib is for far memory model. This function is similar to PFUNC_blkRead except that PFUNC_blkRead passes the length of the block as a parameter, whereas this function uses the terminating null character in a string to mark the end of the block. Example #define N 20 extern void addrprog(void); char strdata[n]; PFUNC_strRead(addrProg, strdata); 8 Using C to Access Data Stored in Program Memory on the TMS320C54x DSP

PFUNC_strWrite Function Copies a string from data memory to (extended) program memory void PFUNC_strWrite( PFUNC addrprog, int *strdata, ); Arguments addrprog address of (extended) program memory destination string PtrData pointer to data memory source string Return Value None Copies a string from data memory to (extended) program memory. The source code for this function uses the built in assembler constant far_mode such that it can be assembled for either the near or far memory model. If using the PFUNC libraries, pfunc.lib is for near memory model, and pfunc_ext.lib is for far memory model. This function is similar to PFUNC_blkWrite except that PFUNC_blkWrite passes the length of the block as a parameter, whereas this function uses the terminating null character in a string to mark the end of the block. Example #define N 20 extern void addrprog(void); char strdata[n]; PFUNC_strWrite(addrProg, ptrdata); Using C to Access Data Stored in Program Memory on the TMS320C54x DSP 9

PFUNC_wordRead Function Copies a word from (extended) program memory to data memory int PFUNC_wordRead( PFUNC addrprog ); Arguments addrprog address of (extended) program memory source word Return Value worddata destination word in data memory Example Copies a single 16-bit word from (extended) program memory to data memory. The source code for this function uses the built in assembler constant far_mode such that it can be assembled for either the near or far memory model. If using the PFUNC libraries, pfunc.lib is for near memory model, and pfunc_ext.lib is for far memory model. extern void addrprog(void); int worddata; worddata = PFUNC_strRead(addrProg); 10 Using C to Access Data Stored in Program Memory on the TMS320C54x DSP

PFUNC_wordWrite Function Copies a word from data memory to (extended) program memory void PFUNC_wordWrite( PFUNC addrprog int worddata ); Arguments addrprog address of (extended) program memory destination word worddata source word in data memory Return Value Example none Copies a single 16-bit word from (extended) program memory to data memory. The source code for this function uses the built in assembler constant far_mode such that it can be assembled for either the near or far memory model. If using the PFUNC libraries, pfunc.lib is for near memory model, and pfunc_ext.lib is for far memory model. extern void addrprog(void); int worddata; PFUNC_strRead(addrProg, worddata); Using C to Access Data Stored in Program Memory on the TMS320C54x DSP 11

Revision History SPRA177A July, 2005. Code change only. Fixed bug in PFUNC_blkWrite(). Changed section name table to mytable in table.asm since table is a reserved name in Code Composer Studio v3.1. SPRA177 March, 2002. Original 12 Using C to Access Data Stored in Program Memory on the TMS320C54x DSP

IMPORTANT NOTICE Texas Instruments Incorporated and its subsidiaries (TI) reserve the right to make corrections, modifications, enhancements, improvements, and other changes to its products and services at any time and to discontinue any product or service without notice. Customers should obtain the latest relevant information before placing orders and should verify that such information is current and complete. All products are sold subject to TI s terms and conditions of sale supplied at the time of order acknowledgment. TI warrants performance of its hardware products to the specifications applicable at the time of sale in accordance with TI s standard warranty. Testing and other quality control techniques are used to the extent TI deems necessary to support this warranty. Except where mandated by government requirements, testing of all parameters of each product is not necessarily performed. TI assumes no liability for applications assistance or customer product design. Customers are responsible for their products and applications using TI components. To minimize the risks associated with customer products and applications, customers should provide adequate design and operating safeguards. TI does not warrant or represent that any license, either express or implied, is granted under any TI patent right, copyright, mask work right, or other TI intellectual property right relating to any combination, machine, or process in which TI products or services are used. Information published by TI regarding third-party products or services does not constitute a license from TI to use such products or services or a warranty or endorsement thereof. Use of such information may require a license from a third party under the patents or other intellectual property of the third party, or a license from TI under the patents or other intellectual property of TI. Reproduction of information in TI data books or data sheets is permissible only if reproduction is without alteration and is accompanied by all associated warranties, conditions, limitations, and notices. Reproduction of this information with alteration is an unfair and deceptive business practice. TI is not responsible or liable for such altered documentation. Resale of TI products or services with statements different from or beyond the parameters stated by TI for that product or service voids all express and any implied warranties for the associated TI product or service and is an unfair and deceptive business practice. TI is not responsible or liable for any such statements. Following are URLs where you can obtain information on other Texas Instruments products and application solutions: Products Applications Amplifiers amplifier.ti.com Audio www.ti.com/audio Data Converters dataconverter.ti.com Automotive www.ti.com/automotive DSP dsp.ti.com Broadband www.ti.com/broadband Interface interface.ti.com Digital Control www.ti.com/digitalcontrol Logic logic.ti.com Military www.ti.com/military Power Mgmt power.ti.com Optical Networking www.ti.com/opticalnetwork Microcontrollers microcontroller.ti.com Security www.ti.com/security Telephony www.ti.com/telephony Video & Imaging www.ti.com/video Wireless www.ti.com/wireless Mailing Address: Texas Instruments Post Office Box 655303 Dallas, Texas 75265 Copyright 2005, Texas Instruments Incorporated