MATLAB Technical Support
Case Incidents: |
|
FTP Site Links:
Web Site Links:
Playback Function, Continuous
From: Jeff Subject: Re: DSP-Matlab To: Dr. Zhe Cc: George Date: 04/12/00 Dr. Zhe- >I understand that you have some DSP based Data Acquisition /Waveform >generator systems which can be used with MATLAB. This is correct. >Could you please give me some more details on them? How does the >playback function work? Can it play continuously? If you mean from MATLAB, yes it can play continuously, but depending strongly on the number of channels, sampling rate, and speed of host machine. MATLAB is not known for speed; we have typically found that 5 to 20 kHz one-channel operation is the limit if MATLAB is handling the buffering, and if the MATLAB code is in a tight loop. I have attached an example .m file that illustrates both continuous input and output from MATLAB.We currently have several University customers who are using the DSPower-HwLib software + DSK C54x for lab setup, both for MATLAB interface and Visual C/C++ interface. This can be DSK C542 or DSK C5402, which is similar to C549. Alternatively, Signalogic also has a SigC54x Development system which supports C549 processor. We would suggest that you look at the following web pages: /univt54.shtml /c54x_dev.shtml The DSPower-HwLib software is popular with Universities because of its direct interface to DSP board from MATLAB, Visual C/C++, and Visual Basic. For a list of current University customers using Signalogic software, please see /sigcorp.shtml#University_Customers. Jeff Brower
Data Acquisition/Waveform Generator Systems
From: Jeff Subject: Re: DSP-Matlab To: Zhe Cc: George Date: 03/14/00 Zhe- >I understand that you have some DSP based Data Acquisition /Waveform >generator systems which can be used with MATLAB. > >Could you please give me some more details on them? What sample rate, number of channels, bits per channel (resolution) do you need? Also, is this for control system, where sensitivity to delay between input and output is high? Or for acoustic/audio or other measurement system where some input (and/or) output delay can be tolerated? What type of real-time processing should be performed? What should the DSP on the board be doing, if anything? The above questions can help us determine which of the many different types of DSP/data acquisition boards supported under MATLAB, by the DSPower-HwLib software, that we should send info to you about. There any many types of boards available, all supported under MATLAB, Visual C/C++, Visual Basic, and LabVIEW. Maximum sample rates range from 48 kHz to 40 MHz; number of channels per board from 2 to 64. >How does the playback function work? Can it play continuously? Yes, it can play continuously. You can call "turn key" MATLAB functions which will continuously play out .wav or .tim files, or you can handle individual buffers in MATLAB and send them to D/A channels using lower level functions. In the latter case, the maximum continuous real-time rate is usually about 5 kHz to 10 kHz. In the former, the rate can be up to 200 kHz, depending on the type of hardware being used. Jeff Brower
Error While Running Mex-File
From: Jeff Subject: Re: PC32 Boards Test (01-10-00) To: Morgan Cc: Yolanda Date: 01/10/00 Morgan- This is a surprise MATLAB problem; we have not seen it before. The DSPower-HwLib DLLs have worked reliably with MATLAB 5.x since 1997, including enmgr32.dll. But recently MathWorks has managed to break MATLAB a few times where external Win32 DLLs are concerned, and we have had to do a work-around. It looks like this could be the case again. Here are some suggestions: -can you temporarily use R11 (i.e. previous version of MATLAB)? Do you still have R11 installed on another machine? Do you still have R11 CD available? -we do not have R11.1 at Signalogic yet; it takes longer for 3rd parties to get updates. Is it possible that you can send us your R11.1 CD and we can temporarily install it and debug this problem immediately? We will send the CD back same-day after we install on Win98 machine. -returning '53' should be Ok in GetMVer. Note that the return value is used prior to any DLL calls; make sure that hwtest1.m is executing the Win32 "load" commands; i.e. make sure the hwtest1.m code loads hwlib32.con, hwmgr32.con, etc. Jeff Brower On Mon, 10 Jan 2000, Morgan wrote: >Mr. Jeff Brower: > >I received the new file (GetMVer.m) and replace the old one. The problem >is still occurred. It doesn't look like it was the problem for GetMVer.m >file I tried a couple things as following: >- Force the output value from GetMVer.m to be '53' by modifying the file > >- Tried to run the commands piece by piece of Hwtest1.m program. > >I found out the problem is from the EnMgr32.dll. This Mex-type file is >not accepted by Matlab. See the following MATlLAB command line. > >Please send me the detail information about " EnMgr32.dll " file and let >me know what can I do next. > >Best Regards >Morgan > > >-------- MATLAB Command Line ----------------------------- >» DS_SHOWSTAT > >DS_SHOWSTAT = > > 2 > >» enmgr32(DS_SHOWSTAT) > Error in ==> C:\WINDOWS\SYSTEM\EnMgr32.dll >------------------------------------------------------------------------ > > Segmentation violation detected at Mon Jan 10 14:37:58 2000 >------------------------------------------------------------------------ > >Configuration: > MATLAB Version: 5.3.1.29215a (R11.1) > Operating System: Microsoft Windows 98 > Window System: Version 4.10 (Build 1998: ) > >Register State: > EAX = 025e9ef8 EBX = 025af6c0 > ECX = 81650000 EDX = 81650000 > ESI = 01b3d5ec EDI = 01b3d7f0 > EBP = 00000001 ESP = 01b3d3e4 > EIP = 01b3d7f5 FLG = 00010246 > >Stack Trace: > >This error was detected while a MEX-file was running. If the MEX-file >is not an official MathWorks function, please examine its source code >for errors. Please consult the MATLAB API Guide for information on >debugging MEX-files. > >If it is an official MathWorks function, please >follow these steps in reporting this problem to The MathWorks so >that we have the best chance of correcting it: > > 1. Send us this crash report. For your convenience, this information > has been recorded in: C:\WINDOWS\TEMP\matlab_crash_dump.45159 > > 2. Provide a brief description of what you were doing when this > problem occurred. > > 3. If possible, include M-files, MEX-files, or MDL-files that aid > in reproducing it. > > 4. E-mail or FAX this information to us at: > E-mail: support@mathworks.com > FAX: 508-647-7201 > >Thank you for your assistance. Please save your workspace and restart >MATLAB before continuing your work.
MATLAB-to-DSP Source Code Examples
From: Jeff Subject: MATLAB-to-DSP source code examples To: Michael Cc: Hanh Date: 01/01/99 Michael- Here are the MATLAB source code examples I mentioned. These are what ships with the DSPower-HwLib software.Jeff Brower
Matlab Interface to Real Time DSP
From: Jeff Subject: Re: Matlab Interface to Real Time DSP To: Harvey Cc: Hanh Date: 01/05/99 Harvey- >I carry out all my DSP algorithm development in Matlab. I am looking for >software that will take my Matlab files and convert them into code that can >be directly downloaded to a DSP chip. >1) Do you produce such software. Yes and no. The DSPower-HwLib software does not convert or translate .m code automatically. However, it does: -allow direct access from MATLAB workspace to DSP, onchip and offchip SRAM, data acquisition (if the board has it) -download of standard COFF files (executable DSP program files) produced by Analog Devices, Motorola, Texas Inst, and Lucent Tech. vendor tools -provide numerous support functions; examples include board and DSP type interrogation, calculating nearest-fit sampling rate, IEEE-DSP conversions -provide higher-level functions, such as continuous disk file acquisition with a single MATLAB call, stimulus & response measurement, advanced triggering options, etc. -provide DSP functions (FFT, digital filters, etc.) -provide DSP code debugging functions, like symbol (variable or buffer name) table look-up and access -allow access to onchip and offchip SRAM while the DSP code is running (which is NOT like JTAG, or standard debugger) -provide a framework for dynamically loading and running user-defined real-time C/asm DSP code, including simultaneous analog I/O processing, host-notification options, and various DSP/math functions So the HwLib software is like an advanced DSP API accessible from within MATLAB. But it does not convert your .m code. Here are some important points about DSP code: -to generate DSP code and real-time processing which is not covered by the HwLib API, you still have to use the DSP vendor tools manually and create either COFF executable or library files which can be downloaded and used from the MATLAB environment -your efforts to convert code are facilitated by not having to leave the MATLAB workspace; for example, you can "move" segments of code onto the DSP by setting flags which either tell the DSP to do it, or continue to use MATLAB code. Your existing MATLAB displays, GUI, file access, etc. does not change. -auto .m code conversion this is a project we are considering for 1999; we already have a product called DSPower-Block Diagram which generates real-time DSP code from signal flow diagrams >2) Do you manufacture a DSP board that will accept such converted code. Yes, several, and we resell several. It depends on what processor you need, type of analog I/O, etc. For some examples, see: www.signalogic.com/hw.htm sigc31.shtml sig32c.shtml pc32.shtml adc64.shtml m44.shtml blacktip.shtml motevm.shtml We need to know a lot more about your application before we can recommend hardware types. >3) Can we use one of your boards in one of our products or does it have to >be in a PC Either. Some of our boards are intended for PC development, followed by subsequent embedded use, such as the SigC44-PC/104 or SigC32-PC/104. Others have options for eventual stand-alone operation, such as the SigC32-2, which has boot EEPROM site. >4) With regard to you data capture boards is there enough processing power >available for me to perform - say real time beamforming and signal >detection etc. Of course--depends on sampling rate, type of processor, number of processors, etc. We have a number of sonar and acoustic customers who do this with single-DSP boards, for example 8-channel boards. Please let us know if you want some references. Jeff Brower
Running Matlab Program File
From: Jeff Subject: Re: Latest *.m file To: James Date: 01/16/99 James- >From the scope trace, it appears to pick up the output part >way through the buffer. I can say this because the sine wave in the buffer >starts from zero and goes positive first. Whereas what I see on the scope >begins at zero but goes negative first. This is because of the PC32. It has inverting amplifiers, so the samples that go to the D/A converter on the board get inverted before they hit the endplate connector. > From the scope trace, the end of >the output does not stop at zero as is the case in the buffer data. Insert the line: BufNum = 1 - BufNum; before calling the LAST WaitForBuffer() function. Without this you are asking the program to wait for buffer 0 again, which is what the program just did. The next buffer will be 1, so you want to wait for buffer 1 to finish. (Note: for continuous operation it repeats, and the next buffer will be 0. Please go back over my previous e-mails, where we discussed "double-buffer" and continuous operation.) >Finally, the data that appears in the buffer (buf3) is not related to the >analog waveform data that I see on the scope. I can't find anything wrong with your GetMem input into buf3; it looks fine. Please tell me exactly which pins on the PC32 endplate connector your input signal is connected to. The DSP code is taking input from input channel 0, so this is what should be connected. To test your channel 0 input, you can run the DSPower-HwLib "Dscope" demo program--you should be able to see your input clearly. I assume your input is something different than the sine wave you are sending out. >In OPMODE = 6 case, I assume >that the RunProcessor command simultaneously outputs a value from the >stimulus buffer and inputs a value into the buffer I set up, buf3 in this >case. More or less. The RunProcessor command starts a small program (DSP code) running on the TI 'C32 processor which is on the PC32 board. This DSP code inputs a sample into its internal buffer 0 (located at TimBaseAddr) and outputs a sample from its internal output buffer 0 (located at OutBaseAddr), then another sample, then another, etc. It does this for one "buffer size" which in this case is 1000 samples. Then it notifies the host that a buffer is done, and switches over to its internal buffer 1. In your case you have, ahead of time, downloaded buf to output buffer 0, buf2 to output buffer 1, and are inputting from input buffer 0 into buf3. I hope this makes sense. Jeff Brower
HWLIB Functions: DSPutMem
From: Yolanda Subject: HWLIB functions To: Michael Date: 02/02/99 Hi Michael, For information on using HWLIB functions, please refer to "Signalogic DSP software Reference Guide" which is shipped together with the software. You can also access Reference Guide on your PC from Start -> Programs -> Signalogic DSP Software -> Reference Guide. e.g. IEEEToDSP is equivalent to DSIEEEtoDSP in HWLIB functions. PutMem is equivalent to DSPutMem in HWLIB functions. Basically, in most cases, HWLIB functions are prefixed by "DS" as in DSPutMem, DSIEEEToDSP. When they are used in Matlab, usually the prefix is removed. To be sure, please look at the corresponding .m file. For DSPutMem, it will be PutMem.m, for DSIEEEToDSP it will be IEEEToDSP.m. With Regards,
Setting Input Gain When Using HWLIB
From: Jeff Subject: Re: Sig32C-8 board and software help To: Jian Date: 02/10/99 Jian- >Could you answer the following question for me? I can't find clear >information in the manual for the following question. >How to set the input gain of all 8 channels when using HWlib? >I guess I can use HWlib DSPutHVarMem(..,DSP_GAINLIST). >But the manual only says DSP_GAINLIST is of 32 bits and 4 bits for each >channel. But what's meaning of these bits. Is it in integer dB? The >program examples all use 0, is that mean all channels of 0dB? Could you >give me another example? Look at the gain table on pg. 6-5 of the Sig32C System Guide. Each table entry is a gain value that corresponds to numbers 0-15; i.e. the first table value is 0, the second is 1, etc. Thus, you put the table number corresponding to the gain value you want into each 4-bit field in the DSP_GAINLIST property. For example, to specify 7.5 dB gain on channel 0, 20 dB gain on channel 1, and 40 dB gain on channel 2, you would set the DSP_GAINLIST property to a value of: 0x00000731 The other channels would be set to 0 dB (gain of 1). In MATLAB you would need to enter decimal numbers, so remember to convert hex numbers like the above to decimal first. Jeff Brower
Parameters Used by MATLAB Calls
From: Jeff Subject: Re: M44 SUPPORTING DOCUMENTATION To: Chris Cc: Yolanda Date: 02/26/99 Chris- >We can not find any reference to the parameters used by the MATLAB calls to >interact with the board. Is there suppose to be another set of >documentation to provide some insight into these calls? The MATLAB calls are, for the most part, the same as their C/C++ counterparts, but without the "DS" prefix. Please see the online Reference Guide; click on "Function Reference", DLL Functions, then on Hardware Library, Engine Manager, or Hardware Manager. Alternatively, search for the function name, but be sure to enter the "DS" prefix. There are some MATLAB calls which are specific to MATLAB. For example, the C/C++ DSAcquireWvfrmFile call takes a pointer to a "CONVINFO" structure with elements of various sizes, but in MATLAB this won't work. So instead the AcquireWvfrmFile call in MATLAB takes a "handle" and we have added calls to support the handle, such as "AllocConvInfo", "SetConvInfoItem", and "FreeConvInfo". See hwtest1.m for an example of this. In general, the hwtest?.m programs, combined with the Reference Guide, are the best source of MATLAB documentation for the DSPower-HwLib software. >Typically, with a TI board there is some type of configuration file >designating the memory spaces on the board. Do you have any documentation >on this for the M44? Did you receive an M44 Hardware Manual? If so, then the memory space, from the C44's perspective, is documented in this manul. Briefly, the local SRAM on the M44 board is located at 0x7fe00000, and the global SRAM is located at 0x80000000. In its default configuration, the M44 has 128k x 32 local SRAM, and 128k x 32 global SRAM; the global SRAM can be expanded to 512k x 32 (I'm not sure what is the configuration of the USCGA board). The C44 boots from start of local SRAM. Since the PCI bus can transfer data to/from the global SRAM only, Signalogic uses a "talker" program, which is stored in iim44hi.out, to act as 'traffic cop' and transparently direct memory transfers from the host to whatever C44 address is required. Thus, from a host program perspective, memory starts at 0x7fe00000 and continues. ... >Is there suppose to be another software package that comes with an AtoD >converter? While running one of the examples, an error reflecting an >inability to find a .ADC file was returned. I would guess that this has to >do with some type of configuration file that is created by some software >that comes with the AtoD module? This is just a guess. Is there any way to >get this software now so that we can take the next couple of steps? There is not another software package. What we will be sending you are these things: -updated Hardware Manager DLL, which allows you to easily select which module is in which position on the M44 using the "DSP Analaog I/O Hardware Selector" dialog box that comes up -updated Hypersignal which accepts new M44 + module entry syntax (see comments below) -updated tms44iim.out and iim44hi.out files, which include the correct C44 code for the AIX module >I could not find any reference to any of your AtoD boards in the Hypersignal >package. What am I suppose to enter in the setup configuration? Right now, >it is set at the default "NONE". As examples, what should be entered is IIM44-AIX (AIX in slot 1), IIM44-AIX-AIX (AIX modules in both slots), IIM44-A4D4-AIX (A4D4 in slot 1, AIX in slot 2), etc. Jeff Brower
SIMULINK Regarding MATLAB
From: Jeff Subject: Re: AW: DSP Board and development software To: Daniel Cc: Heather Date: 03/30/99 Daniel- >I'm now almost ready to order a Board and the software, I also received the >documentation. I have 3 other questions: >1) Talking about the matlab interface does this include links to SIMULINK ? Yes and no. If you use MATLAB blocks inside your SIMULINK diagram, then Ok, as MATLAB code can make any call to board available in the DSPower-HwLib interface. It is even possible to view waveform displays and C code variables in SIMULINK blocks, as the DSP code is running, using this method. But there is not built-in support for Real-Time Workshop, although it is not hard to interface C code generated by RTW to the underlying "C4x Source Code Interface" (SCI) which I mentioned in my previous e-mail. Please see my previous discussion of user-defined C code, described on the page www.signalogic.com/ccode.shtml. >2) How can I configure the digital interface to a serial or parallel custom >made ADC which requires a Mettler specific protocol? (does I need further >tools like C compiler or can I manage it with the H8 rt sw, DSPower HwLib sw?) You would need the C4x SCI, and Texas Inst. C Compiler/Asm/Linker. The SCI is fully compatible with the HSM and DSPower-HwLib software, so changes you make to support analog I/O will "snap in" to high-level host functions like digital scope, continuous disk acquisition, etc. The C4x SCI includes interrupt service routine (ISR) and analog I/O initialization examples for other C4x boards (e.g. M44, PC44, Ariel DSP-C40, etc) so there are lots of examples to go by when installing a custom analog I/O solution. The technical contacts here to support your efforts would be myself and Yolanda Jeff Brower
MATLAB: TTL Signal
From: Jeff Subject: Re: DSP bug FIXED! To: Anuradha Date: 04/02/99 Anuradha- >Hi ! Hope you remember me ! You helped me solve a problem and here am >I with another and would really appreciate if you could help me out. The >program offered by signalogic allows us to collect and display the >signals which arrive at the A/D and i would like to design it such that >only when the TTL signal or a pulse occurs at the trigger pin of the A/D >,then the 2 signals are taken in and sampled and displayed ,otherwise >the signals needn't be collected and we have to keep checking for a >pulse in the trigger pin and only when a pulse is present then the 2 >signals are sampled and displayed. In order to do this efficiently (i.e. in real-time), you have to modify the DSP source code. There is no way MATLAB can monitor the TTL signal and then respond, unless you can tolerate delay between the TTL signal and acquisition or several msec. Real-time / DSP code implementation requires changing the "C3x Source Code Interface" (SCI) software, which is the source code used by the PC32 board when the board is being controlled by MATLAB and C/C++ programs, via the DSPower and Hypersignal software. Jeff Brower
MATLAB with Windows
From: Yolanda Subject: RE: Running Matlab programs in Windows To: James Date: 04/16/99 Hi James, >I finally got some time last night to make the S1 switch setting changes >from you last e-mail note. After making the changes, and going through the >configuration menu associated with the FFT program per the April 9 note, the >digital scope program and others in the main Windows menu seem to work. When you run any windows program (include Matlab .m files) with Signalogic Software, usually the first thing that comes up is a Hardware Acquistition selection dialog box, Please check that the settings are correct. ie. You should have highlighted Innovative Integration PC32 board, and the text field should look like belows: Board Designator : IIC32 DSP Program File : tms32ii.out I/O Base Addr : 280 Mem Base Addr : DC00 Processor Clock : 60 Voltage Ranges : 10,10 Number of Processor : 1 If for some reason, you do not see the Dialog box show up, please go back to your .m files. Most likely, you have the following files commented out : [fSelect, BoardStr]=ShowHwSelector(NULL); >I then went to run the Matlab examples in the HWLIB directory, i.e. hwtest1.m >through hwtest5.m and I got an initialization error (-12 code). This is the >same error message that I got earlier. Do you have any ideas as to what is >happening? When this occurs, can you look at the status windows and tell me everything that is in it. This will help me to identify your problem. By the way, have you installed the software from CD yet? which version of the software are you using? The one that comes with your purchase order or the CD version? Please furnish me with the following information: >Please also let me know the date and >size of the following files: >FILES DATE SIZE >---------------------------------------------------------------------- >\HSMACRO\HSMACRO.EXE >\HSMACRO\HSMACRO.OVR >\HSMACRO\IIPC32HI.OUT >\HSMACRO\TMS32II.OUT >\WINDOWS\PIPE.VXD >\WINDOWS\SYSTEM\ENMGR.DLL >\WINDOWS\SYSTEM\ENMGR32.DLL >\WINDOWS\SYSTEM\HWLIB.DLL >\WINDOWS\SYSTEM\HWLIB32.DLL >\WINDOWS\SYSTEM\HWMGR.DLL >\WINDOWS\SYSTEM\HWMGR32.DLL >Also, another question. Did you put in any new hardware into your PC? >Sometimes the new hardware may conflict with other hardware that has been >working on the PC. Please also send me your config.sys file so I can check it for you. please also send me your win.ini file and tell me where you have installed HsMacro and DSPower. Thanks Yolanda
Conversion of Matlab File to COFF File
From: Yolanda Subject: Re: about matlab To: xinhua Date: 05/03/99 Hi Xinhua, >I am a user of Dspower_hwlib and Hypersignal_Macro software. >My serial number of Hypersignal_Macro is #991772. I want to know : >Can I convert a matlab file ,which includes some special functions(of >wavelet toolbox,e.t.),to a COFF file for my PC31 board (TMS320c31)? And How? >Where can I get full information about this? Conversion to C code (COFF file) is not automatic; we do not offer a program that does this. You can try something like MathWorks' converter, but the C code doesn't come out in real-time format, with dual-buffering, analog input/output interrupt routines, etc. To solve this problem, the "C3x Source Code Interface" (SCI) is popular. For information on adding user-defined real-time C/asm code to the framework provided by the SCI, please see: www.signalogic.com/ccode.shtml dspcode.shtml dspmod.shtml With regards, Yolanda
Simultaneously Read 2 A/D Channels
From: Yolanda Subject: Re: MATLAB program To: James Date: 06/04/99 Hi James, >Thanks for the help. I got the board and hwtest6.m and tested them the >other night. Everything looks to be okay. Glad to hear that. > First, I need to read "simultaneously" two A/D channels. What modifications >to the basic code you sent me would I have to make to accomplish this? You would need to change the CHANLIST variable. Right now, it is set to 0 which stands for channel 0. If you want to use channel 0 and 1, you will set CHANLIST to 0x10. CHANLIST is divided into 4 bit fields. each channel is 4 bits, with channel 0 occupying the last 4 bits, channel 1 the next 4 bits and so on. > Second, the main Matlab program is designed to send out several different wave >forms (sine, ramp, user specified vector, etc.) under a user selectable GUI. Is >it possible to do the initialization and execute the run board functions during >the first portion of the main program and not have to do this again when I >send out the different wave forms? Likewise, only execute the closing of the >board statements once when the main application is being closed down? Your >thoughts on these questions would be quite helpful. Thanks again. Yes. Definitely. I would suggest you begin with user selecting the kind of waveform they would like to send out, generate the data ahead of time, then invoke the engine, init the board, download the generated waveform, run processor for the desired period of time and then disabled the board, free the board and close the engine and then your main application exit. AS usual, since you are involved in a control system, it is always a good idea to create a clean up rountine, which stop the board, free it and close the engine if some undesirable event should happens. Yolanda
Debugging hwtest6a.m
From: Yolanda Subject: RE: suggestion for debugging hwtest6a.m To: James Date: 06/21/99 Hi James, >I finally had a chance to test the new DLL's last night. Everything was >going well for about 35 tries and then things started to fail again and the >whole system "locked up" before the test program got to 50 tries. Has >anyone else with Matlab 5.2 and Windows 98 had similar problems? I have to >believe that anyone else who is outputting and reading data in a continuous >way would have experienced similar behavior. >My client is asking me for an estimate of when I would be finished. I'm not >sure what to tell him as to when this current "road block" will be sorted. >Thanks for your help. Here are some suggestion for you. 1) Run Matlab 50 ++ times. ie. just open MATLAB and then exit without running any .M files. See whether this will crash. 2) Run one of our demo program, e.g. DIGITAL scope (by clicking on the scope icon in START -> Programs -> Signalogic DSP Software -> Digital Scope) 50 ++ times. See whether this will crash. I am just trying to see whether this is a MATLAB issue or our DLL issue. 3) Then run Matlab, strip hwtest6a.m to its bare minimum like OpenEngine and CloseEngine only. Run it again 50++ times. Does it crash? Keep on adding more calls until the crash appears. It would be important that we know where it crash or what is the actual call that causes the crash for us to assist you efficiently. Thanks Yolanda
H8 Port vs ONCE/JTAG Port for Access of Variables in MATLAB
From: Jeff Subject: Re: DSP56307 inquiry To: Ahikam Date: 07/03/99 Ahikam- >Please clarify for me some of the points in your answer, Ok. >In Order to use the DSPower - HWlib for accessing variables from matlab, do >I really need the H8 port, can't I use the ONCE/JTAG port instead? No. The DSPower-HwLib MATLAB interface uses a "Toolbox"-like approach to access several libraries (DLL and OCX) which in turn access either VxD driver (Win9x) or kernel-mode driver (WinNT). These drivers only "know" about HI08 port. Our main problem with JTAG is speed--we cannot make large data transfers fast enough, which is a problem because we advertise both the HwLib and DSPower signal flow diagram software as "being able to monitor variables and display waveforms/buffers as real-time code is executing". For example, one of the calls in the DSPower-HwLib interface is GetSymbolAddress, to allow dynamic GetMem/PutMem type commands on C/asm variables and vectors. Thus, HwLib is low on classic debug functions, and high on data transfer and visualization. However, it should be noted that currently, at customer request (Ericsson), we are adding software breakpoints, register readout, and some other debugging constructs to the MATLAB interface. >In my next board design (due 9.99) I can ask for H8 port to be connected >(right now we don’t use it), Ok. >Will I need to make adjustment to my DSP563xx code in order to use your >tools to access variables through matlab, You would have to use the DSPower-HwLib driver HI command interface, or adjust/merge yours to support the command vectors the drivers use (about 5 or so). Also, the command vectors rely on R7 being avaiable; for example, in the DSPower-Real Time Code Generator, the generated C/asm code uses a switch to avoid use of R7. >If so will your code interface to TASKING'S EDE V2.1 ? What is EDE V2.1? Jeff Brower
Putting 16-bit wav Signal Onto Board
From: Jeff Subject: Re: continuous output To: David Cc: Brian Date: 07/22/98 David- >Got the 16-bit wavread (I actually wrote my own before yours got >here) and it works. OK. >However, putting the signal onto the board seems to distort it. See if you >follow what I'm doing ... >plot(StimSig); >PutMem(hBoard, DS_GM_LINEAR_DATA_RT, StimBaseAddr, > DS_GM_SIZE16_CVT, StimSig, StimSize); >GetMem(hBoard, DS_GM_LINEAR_DATA_RT, StimBaseAddr, > DS_GM_SIZE16_CVT, StimSigBack , StimSize) >plot(StimSigBack); Questions: what kind of data is in StimSig? Data should range between -32768 and 32767, and be integer values. Also, has StimSigBack been previously declared/used? If StimSigBack does not have enough "size" to handle StimSize number of 64-bit floating-point values, then the GetMem call will return zero (FALSE), or error condition. Attached is a new version of hwtest3.m, which shows use of the _CVT attribute. I have tested it on MATLAB 5. You can use either GM_LINEAR_DATA or GM_LINEAR_DATA_RT. The example is similar to your code above, so I'm not sure what is wrong with your code. >and the the two plots are completely different (same length, >different signals). If I do a RunProcessor after these lines, I >"hear" exactly what StimSigBack looks like You are using MATLAB v4, correct? Try the plot without calling Runprocessor. Do you still get distorted plot? >It shouldn't be an IEEEtoDSP thing, since it's all integer data and not >floating point. Well, it is *integer values*, but still floating-point data. MATLAB only works with 64-bit floating-point data--what values you put into MATLAB arrays is up to you. Jeff Brower
Listen to Speech using Dscope.m File
From: Jeff Subject: Re: Few technical questions from ASU To: Erfan Date: 10/19/98 Erfan - >To refresh your memory I'll try to explain the current problems that we've been >having. In order to see the speech that is input to the board in real time we >have been using "dscope.m" file. We were trying to add some features to that >so that we could listen to the speech as well. We were taking help from the >"RT c code.cpp" and "HWtest(4-5).m". Be careful with dscope.m program. This program currently works only with MATLAB v4.2x, because it uses callback messages for buffer ready. With v4.2x, a "hidden child control" is used to provide the window handle needed by DSPower-HwLib to send messages, but this is tricky and does some behind-the-scenes window stuff. In v5.x MATLAB, this is not as easy, and the callback messages do not work. >We have noticed that that different opmodes were used at different times. So >we tried with different opmodes(6 &1) in the dscope program, but none of them >seemed to work. We have also looked at the reference guide, but it doesnt >tell a whole lot about opmodes. Look at the DSP Source Code Interface sections in the Users Guide ("Using DSP Source Code Interface Software" in table of contents, click on TMS320C3x section, then first "Main Topic"). Mode 1 is continuous output, mode 6 is continuous input/output. Mode 6 is what you want if you want to both visualize speech input and hear it. >We do not expect you to write the entire code for us, but if you could mention >what changes to make in a hwtest.m or dscope.m file so that we could listen >to the speech as well as see it in time domain (dscope), it would be very >helpful. We cannot go any further in our project if we cannot listen to the >input speech in real time using MATLAB. Have you successfully run the rtcode.cpp program? Without DSP source code changes, the default mode for this program is analog I/O loopback, with input being displayed onscreen. My suggestion is to take this program, combine with hwtest5.m to make a new .m program, and make sure all PutVarMem calls in rtcode.cpp are reproduced in the new .m program. All DSP code properties need to be set as they are in rtcode.cpp. The main difference is that instead of a callback message for buffer-ready (i.e. WM_DSPENGINE_BUFRDY message processing), you should use a while-loop, with GetMem calls. If you use one channel at 8 kHz sampling rate, it *may* be possible to do some simple .m code processing on the speech buffers in real-time. In this case, your while-loop would also use PutMem calls, and I would suggest a buffer size of at least 8k, and maybe even 12k. If you decide to do this, please let me know, there is more example .m code I can send to you. However, please note that for more channels, higher sampling rate, and/or significant real-time processing, you will need to do it on the DSP. Note also that when using op. mode 6, as in rtcode.cpp, you can add user-defined real-time C code to the DSP. For example, you could apply filters, compression-decompression, or other speech processing and hear the results in real-time. You could use the .m program to control what the DSP is doing; for example to set filter coefficients, change variable/parameter values, etc. For more information on this method, please see www.signalogic.com/ccode.shtml. Jeff Brower
DSP Option Definations, A/D and D/A Operations
From: Jeff Subject: Re: DSP_XXXXX definations To: Hal Date: 08/24/98 Hal- >1. I still need specific infomation on the DSP option definations > ex: DSP_OPMODE >the Reference quide is too general ie. for DSP_OPMODE it says >"Specifies processing or analog I/O function operating mode to Hypersignal >DSP sorce code interface" In the Users Guide help file, see section "Using DSP Source Code Interface", and under that, "TMS320C3x Source Code Interface". The first three (3) 'Main Topics' provide more explanation about the operating mode and general organization of the DSP Source Code Interface (SCI) software for C3x-based boards. >I sort of know that from the sample code, what I need is the list of options. >(for all the defines ie DSP_FILTTYPE etc). Is there a mode to do both A/D >and D/A (see below)? Yes, mode 6. Mode 6 is continuous input and output; it is up to host code to read the input buffers and supply new output buffers. My suggestion is to start with hwtest4.m and hwtest5.m examples, but use mode 6. Also, I am asking the other customer I previously mentioned about getting some excerpts from their mode 6 MATLAB code. >I could not find the t30def.asm reference that you also mentioned. It should be on the "TMS320C3x Source Code Interface Software" disk. It's possible that wasn't ordered. The main purposes of the SCI are: -to allow additions and modifications to DSP code while maintaining DSPower and/or Hypersignal compatibility -provide analog init. and interrupt service routine code for specific boards -provide basic DSP/math library functions >2. How can I run (from matlab) both A/D and D/A operation ie. acquire data, >do something with it then send it back out then repeat ? This seems like a >reasonable sequence of operations for a DSP board. Jeff Brower
To Output Long Random Signal Past Buffer of 8192
From: Jeff Subject: Re: Continious operation from Matlab To: Hal Date: 08/20/98 Hal- >We got the new software and the MAtlab demos run OK on Version 5.2. Thanks OK. >I want to output a long random signal from the D/A but your HWTest4.m >sample only outputs a short buffer. I cannot seem to make it work past 8192. In mode 1 "continuous output" (which is used by hwtest4.m), you must set the DSP_BUFLEN property to control the length of output. >The code mentions that to operate continiously I need to use the "BUFFER >READY" callback messages and the RegMsgWnd and WaitForBuffer functions must >be used. First, what is your sampling rate? MATLAB is not fast, and so achieving real-time or continuous operation above 8 kHz might not be possible in any case. Second, registering window handles and using callback functions in MATLAB v5.x (RegMsgWnd) is not easy and we are still having problems with that, so try instead putting the example code in a loop; for example after doing the PutMem (output) line, then use WaitForBuffer(..., DS_WFB_POLLED), and then loop back to another PutMem statement. Of course, if the output samples must change you need other statements in this loop which calculate (or read from file) the new samples--and therein is where MATLAB slows down. >Any specific examples ? I may be able get a modified hwtest4.m example for you which has looping operation. It's from another customer; I'll have to check first. >I guess the same sort of thing is true for continiuos A/D operation. Yes, but the mode is 0 and the WaitForBuffer call goes first, and then you use a GetMem call to read acquired samples from the board. See hwtest5.m. >How do I find out more about the DSP board options/ flags: > ie. DSP_OPMODE > DSP_FILTTYPE > DSP_CHANLIST > ETC. Two ways: a) you can look at the descriptions in the Signalogic DSP Software Reference Guide (refguide.hlp; see DSP/Analog Hardware Reference section, DSP Variables or DSP Properties subsection), and b) you can look at the t30def.asm section in the C3x Source Code Interface (SCI) software, which is where these properties are defined in the DSP source code. For more information about the SCI, see Using DSP Source Code Interface Software in the SDS Users Guide (useguide.hlp). Jeff Brower
Stimulus-Response using MATLAB
Date: Wed, 28 Jan 1998 22:35:52 GMT From: Jeff Subject: Re: HWLib question To: David David- >In all of the examples (dscope.m, hwtest1.m, etc) , you seem to be >registering a MSWindows window handle as the recipient of the DSPEngine >callback messages. Great for "real-time" c programs, but we don't want to do >that. We simply want to do the following stimulus-response things >sequentially ... download a short stimulus signal (white noise) onto the >board's memory, and then play it while sampling the response of all 4 >channels into 4 MATLAB variables. We don't want to be continuously updating >some display window, like dscope does. We don't need asynchronus operation - >we're happy to wait in a "while loop" until the buffers fill up and the 4 >variables get their info. OK, then use a WaitForBuffer call with the polled method, as in hwtest2.m. This should work at low samplng rates. To do stimulus and response, you need mode 6 (instead of mode 2), and you need to download (PutMem) the output (stimulus) data in advance. I think you can do a GetVarMem(hBoard, DSP_STIMDATADDR) call to get the base address of the stimulus memory buffer (very similar to what is done for the input buffer). >How can we "register" something else other than a window to find out when the >buffers are ready, or to put it in another way, what flag can we check to find >out when the acquisition has been completed ? Don't register, just use DSWaitForBuffer, as in the hwtest2.m example, but put in a loop; after each buffer is ready, you need to do a GetMem. Remember that the buffers will switch, so the first GetMem is at input base addr, the second is at input base addr + buffer length, and then it repeats. >And then how does the data get from the board's buffers into the MATLAB variables? There must be some HWLib calls to do this. GetMem() -Jeff
Multichannel Acquisition in MATLAB
From: Jeff Subject: Re: multichannel acquisition in MATLAB To: John John- >I tried the things you said but I am sure I am not doing them in the correct >place or maybe I'm doing them right at all. When I change DSP_NUMCHAN = 2, >it does go faster but I am not sure exactly how to extract the data or >whether the second channel is even there. Do I need to change the bit-width >constant from DS_GM_SIZE16_CVT to maybe DS_GM_SIZE32_CVT? No, don't change that! >I try that and it >pretty much doesn't collect anything. What about changing the DSP_NUMCHAN >in the hwlib32.con file or just in the program? No, don't change that! All you have to do for 2 channels is use every other sample in the MATLAB buffer that you read. I.e. buf[1] --> 1st sample, 1st trace buf[2] --> 1st sample, 2nd trace buf[3] --> 2nd sample, 1st trace buf[4] --> 2nd sample, 2nd trace buf[5] --> 3rd sample, 1st trace buf[6] --> 3rd sample, 2nd trace . . buf[N-1] --> last sample, 1st trace buf[N] --> last sample, 2nd trace Where N is the value you have assigned to the DSP_BUFLEN property during initialization. Is that Ok? This is what we mean by interleaved, or "multiplexed" acquisition buffers. If you are using M channels, i.e. more than 2 traces (channels), then the interleaving pattern repeats in groups of M buffer values. Please keep in mind what I mentioned previously: you may want to read twice as many points in the GetMem() call if you are using 2 channels -- this will maintain the same receive-buffer rate. >Sorry for all the questions. There are just so many ways to grab and store >digitized data. I am sure that I can understand it, I just need to get the >basics down. I can understand that the DSP board is digitizing audio data >at the requested rate. If I run the strip program, I see my data on both >channels. So, does the board put the first channel in the first 4 bytes, >the second channel in the second 4 bytes and so on? Does that mean I need >to read 32 bits at a time in order to get the data? I'm still a bit fuzzy on it. Don't worry about reading in bytes. In MATLAB, the GetMem() function call with the DS_GM_SIZE16_CVT attribute reads the DSP acquisition buffers in samples, and converts data on the fly to MATLAB 64-bit floating-point format. All you have to do is access the buffer correctly. John, I have to say I think you're making this too hard ;-) > What do the strange numbers mean in the hwlib32.con file for the DSP >and DS variables. It loads in 1115 for DSP_NUMCHAN which, to me, doesn't >mean 1,2, or whatever number of channels. All those variables have large >numbers. These are constants that translate in some weird way to physical memory addresses inside the on-board DSP memory. > I also tried changing the OPMODE to 0 instead of 2 (0 is what the >strip chart had but the oscope had 2). Built-in operation modes are explained in the DSP Source Code Interface section of the online DSPower Software Users Guide (there should be a Users Guide standard Windows help file in the "Signalogic DSP Software" folder). I think this is chapter 5, titled "Using DSP Source Code Interface Software" or similar. Operation mode 2 is digital scope, which uses fixed-frame based acquisition, with pauses between the frames controlled by trigger parameters. Operation mode 0 is continuous acquisition, with no gaps. Mode 0 can handle N channels; mode 2 is limited to 2 channels. Jeff Brower
General Discussion of DirectDSP Software Approach
From: Jeff Brower Subject: general discussion of DirectDSP software approach To: Milan Milan- >Is it possible to program Your Boards in a high level Language or even >Matlab real time workshop alt. Labwiev RT ? >Do You recommend this type of approach to program the board? DirectDSP software allows MATLAB programs and LabVIEW VIs to communicate with the DSP processor and board resources, download executable DSP code, control the board, "interrogate" the board for capabilities (sampling rate, memory architecture, etc), set properties in the DSP data and code, and transfer data to/from the onchip DSP and board memory. Communication with the DSP and memory can occur while the processor continues to run in real-time; i.e. the processor does not have to be stopped or paused, and DSP code does not have to be "instrumented" or otherwise altered. But, DirectDSP does not allow you to "re-compile" MATLAB programs or LabVIEW VIs and turn them into real-time DSP code. To create executable DSP code, you have to create and/or port MATLAB simulations in C code and compile and link using the Texas Instruments Code Composer Studio (CCS) tools. Signalogic provides the DSP Source Code Interface software for this purpose, which is a DSP code framework with basic board drivers (and analog I/O module drivers) and host interface, and includes example CCS projects and source code. Although not a "MATLAB compiler", DirectDSP does make it possible to move MATLAB simulations to real-time using a step-by-step approach; i.e. you can get part of a MATLAB program running on the DSP, and leave other parts (displays, file storage, etc) as-is. When running an algorithm section on the DSP board, it becomes mainly a case of downloading data to the board and waiting for results to come back; a more sophisticated host program might use callback functions to receive "data ready" notifications from the board in order to allow parallel host and DSP board processing. Also, some of our customers use flags to switch back and forth between running parts or all of a MATLAB program on the DSP board and on the host. I've included an API summary, detailed reference, and source code examples showing how the API is used. When accessing onchip DSP or onboard memory, the DSPutMem, DSGetMem, and DSGetSymbolAddress functions are typically used. The DSPxxxMem functions allow parameters to be set, or results to be read, in the DSP C/asm source code at any time, while code runs in real-time. The DSGetSymbolAddress function allows DSP data/results to be accessed by symbol name (e.g. variables, arrays, buffers, in C/asm source code); these "physical addresses" are gathered at run-time, during host program initialization. The DirectDSP API supports callback functions, for example, when analog input buffers are available from the DSP software. Jeff Brower
Basic CCS Project on Signalogic CD question
Subject: RE: [Fwd: Basic CCS Project on Signalogic CD question] Date: Wed, 27 Nov 2002 15:15:41 -0600 From: Hanzi To: Dr. Cap Hi Dr. Cap, I am sending you a Matlab example that will solve your question. It is a modified version of hwtest6 with extra functionality of GetSymbolAddress. Basically, you can define your filter coefficient as an global variable in SCI and use GetSymbolAddress to retrieve the address of that variable in DSP memory. You read and write to it by using GetMem and PutMem function. In the attached code example, the global variable inside DSP code would be aa and we do GetSymbolAddress on aa (note that the assembler always append a '_' in front of the variables defined in C and Case matters). PutMem and GetMem last parameter specified number of elements, so it can be number of filter coefficient and aa can be an array. ptr_aa = GetSymbolAddress(hBoard, NULL, "_aa"); DSGetMem(hBoard, DS_GM_LINEAR_DATA, ptr_aa, DS_GM_SIZE32_CVT, aa, 1); aa = 123; DSPutMem(hBoard, DS_GM_LINEAR_DATA, ptr_aa, DS_GM_SIZE32_CVT, aa, 1); Hanzi -----Original Message----- From: Dr. Cap Sent: Wednesday, November 20, 2002 12:53 PM To: Dave, Hanzi Subject: RE: [Fwd: Basic CCS Project on Signalogic CD question] Hi Hanzi, I spent some more time working on dspTeam01.m, which is our streamlined version of hwtest6.m. A lot of the housekeeping chores of selecting a board, getting a board handle,etc, have been placed in a new m-file called HouseKeeping.m which is called from within dspTeam01.m. A paper copy of this file is sitting in the DSP lab right next to the PC. The directory where it can be found is E:\dspTeam. Hwtest6.m has a lot of general code that was written to be compatible on a wide variety of machines and to be able to select from a lot of different DSP boards. I went through and eliminated a lot of the choices we don't need, because we are using only ONE type of board. This makes the housekeeping and other parts of the code more streamlined for out particular combination of PC, MATLAB version, and DSP board type. The results from dspTeam01.m and hwtest6.m are now exactly the same. So, we can now begin concentrating on modifying this code (dspTeam02.m) to work with UserProc.c and whatever particular algorithms we need to write. This also requires more knowledge and experience with CCS. I tried to begin learning about CCS and UserProc.c last Sunday, but got stuck with delays in getting dspTest01.m to match the results of hwtest6.m. Hanzi, Any thoughts on what specific "hands on" CCS stuff we should immediately focus on? Any specific project file, with specific results? For example, we want to: Write a UserProc.c (compiled as FIR3rd.out) file that performs y[n] = h[0]*x[n] + h[1]*x[n-1] + h[2]*x[n-2] where h[n] is a vector array of FIR filter coefficients sent from the Host to FIR3rd.out on the Target. So, besides sending data x[n] from Host to Target, we want to send vector array h[n] from Host to Target. How do we modify the simple example of user-defined real-time 'C' code "Signal Arithmetic Example - FIR Filter" to do this? Dr. Cap