TMS320C25 Digital Signal Processor Kit

Wichit Sirichote,

Build your own the DSP training kit, TMS320C25 in the year 2021

The TMS320C25 kit is affordable digital signal processor training kit. The kit is designed for studying the single cycle operation of DSP chip at hardware level. TMS320C25 chip provides external memory interface in microprocessor mode.. The code and data memory are then enabled for simple code entering. The monitor rom is 16 bit bus, single chip EPROM, 27C1024. User RAM is configured as data and code memory built with two 32kB RAM chip. The 8-digit 7 segment display is for displaying 16-bit address, 16-bit data, 32 bit accumulator, and Product register contents.

Learning the TMS320C25 instruction is very simple by entering its hex code to user RAM and test run directly.

Trap instruction is used for monitor return and save the CPU registers for examination the code running.

In addition, kit also has 9600 software UART for Intel hex downloading. Kit is available on eBay.
TMS320C25 Digital Signal Processor kit

Hardware description:

U6 is TMS320C25 68 pin PLCC DSP chip. The oscillator is the onchip circuit with 16MHz XTAL. Internal clock is then 4MHz (16MHz/4). The CLKOUT 4MHz is used for tick generator chip.

External memory is interfaced with data bus D0-D15, and A0-A15. The ROM is 16 bit bus and RAM is two chips 8-bit bus.

U1 is 64k x16 bit monitor EPROM, 27C1024. The address space is located at 0x0000-0x7FFF.

U2 and U3 is 32kB static RAM, 62256. Both chip forms 16 bit RAM with U2 for D0-D7 and U3 for D8-D15.

The RAM space is located at 0x8000-0xFFFF.

The memory space, and I/O space are decoded to by PLD chip (see PLD equation for each device)

U7, the 20-pin 89C2051 microcontroller chip produces 10ms tick. SW2 selects between 10ms tick or manual INT0 button.

U13, 74HC541 is 8-bit input port (PORT0). Seven bits, PA0-PA6 are input signals of the row keypad.

U10, 74HC573 is 8-bit output port (PORT2). The 8-bit output drives the 7-segment LED directly. No current limit resistor. U12 (PORT1) drives the 4-to-8 decoder chip, U11 74Ls145. The brightness is controlled by software. Bit 7 is for software UART TXD pin. BIO pin is for UART RXD pin.

U14(GPIO1), 74HC573 is 8-bit output port located at port PA0. It is for program testing.

JR1 is 16-pin socket for text LCD interface. Any text LCD with HD44780 compatible controller can be used with no modifications. U16, HIN232 converts TTL level to RS232 level.

Q1, KIA7042 is reset chip for power brownout. JP1 is 40 pins header. It is for hardware interface experiment. And J1 is for CoDec interface.
Hardware schematic (click to enlarge)

Hardware Features:

-CPU: Texas Instruments TMS320C25 @16MHz XTAL (4MHz internal).
-Memory: 32kB x 2 SRAM, 32k word EPROM, zero wait state
-Memory and I/O Decoder chip: Programmable Logic Device GAL22V10D
-Display: high brightness 6-digit 7-segment LED
-Keyboard: 36 keys
-RS232 port: software UART, 9600 bit/s 8n1
-Debugging LED: 8-bit GPIO1 LED at location PA0
-Tick: 10ms tick produced by 89C2051 for time trigger experiment
-Text LCD interface: direct CPU bus interface text LCD
-Brownout reset: KIA7042 reset chip for power brownout reset
-Expansion header: 40-pin header
-CoDec interface header, 16-pin.

The monitor program features:

-Simple hex code entering
-On-chip data memory access/modify
-Insert and Delete word
-User registers: 32-bit accumulator, 32-bit Product register, status ST0, ST1, AR0-AR7 used with TRAP instruction.
-Copy block of memory
-Intel HEX file downloading, accepts only 20-bit load address.
-Memory dump
-Multiply button, test multiplication instruction with 32-bit result
-TEST 10ms tick interrupt

The monitor program will be updated and available for testing at the download links.

Keyboard layout: Nice keyboard design with Helvetica font.
Keyboard layout. 

The memory and I/O devices decoder is made with PLD chip, GAL22V10. The equations are compiled to JEDEC file using WInCupL. The locations of memory and I/O devices are shown in the comment lines.

Ready line is always HIGH, thus no wait state will be generated.

Name     320C25KIT ;
PartNo 22V10 ;
Date 28/4/2021 ;
Revision 01 ;
Designer Engineer ;
Company Fangkhao ;
Assembly None ;
Location ;
Device p22v10;
/* *************** INPUT PINS *********************/
PIN 2 = PS; 
             PIN 3 = DS; 
             PIN 4 = IS; 
             PIN 5 = RW; 
             PIN 6 = STRB; 
             PIN 7 = A0; 
             PIN 8 = A1; 
             PIN 9 = A2; 
             PIN 10 = A3;
             PIN 11 = A15;
             PIN 13 = MSC;
             PIN 1 = RESET2; 
/* *************** OUTPUT PINS *********************/
PIN 14 = ROM_CE; 
PIN 15 = RAM_CE; 
PIN 16 = READY; 
PIN 17 = PORT4; 
PIN 18 = GPIO1; 
PIN 19 = PORT3;
PIN 20 = LCD_E;
PIN 21 = PORT0;
PIN 22 = PORT1;
PIN 23 = PORT2; 
ROM_CE = PS # STRB # A15; /* 32k word monitor */
READY = RESET2; /* zero wait state */
RAM_CE = (PS & DS) # STRB # !A15; /* 32k word DATA and PROGRAM */
!GPIO1 = A3 # A2 # A1 # A0 # RW # IS # STRB; /* 00H */
PORT0 = A3 # A2 # A1 # !A0 # IS # STRB; /* 01H */
!PORT1 = A3 # A2 # !A1 # A0 # RW # IS # STRB; /* 02H */
!PORT2 = A3 # A2 # !A1 # !A0 # RW # IS # STRB; /* 03H */
!LCD_E = !A3 # !A2 # IS # STRB; /* 0CH-0FH */
PLD equations 

Example of test code, 16x16 multiply.

AR1 is used as the memory pointer. It was loaded with 16-bit address of the on chip, location 200.

T register is then loaded with the contents of location 200. Then AR1+1, pointed to location 201.

MPYU is 16x16 unsigned multiply. P register will get the result from T*201.

PAC transfers 32 bit result to accumulator.

We can enter both numbers at locations 200 and 201 (internal memory) by hex key directly.

Another example is for testing the INT0 interrupt.

Main program starts at location 8000, external RAM. We can enter the code using hex keyboard easily.

The IMR interrupt mask register is loaded with 1, to enable INT0 interrupt.

The INT0 vector at location 0002 is relocated to 8002. We can experiment in RAM easily.

The service routine increments tick at 100Hz rate (10ms). Time variable will be incremented at 10Hz rate. The count will send out to GPIO1 LED. We can see 10Hz counting.

The sample hex file accepted is 20-bit load address.

For long program testing, we can use Assembler and produce the hex file. Kit has 9600 software UART, we can dump memory contents with key DUMP and download Intel HEX file with key LOAD easily.

Key COPY can copy block of memory from external RAM to internal RAM easily.

Kit has direct bus interface LCD module. The monitor program provides LCD drivers. Study the monitor source code at download section.

Any text LCD with HD44780 compatible controller can be used. 

I designed the kit with the technical information from Texas Instrument TMS320C25 user's guide.

The book is very old, 35 Yrs printed in 1986.

FOUR Layers PCB is made by



U1 27C1024/M46Z128 64kx16 EPROM
U3,U2 HM62256B, 32kB SRAM
U5 74LS14, hex inverter
U6 TMS320C25/LCC, CMOS DSP chip, PLCC 68 pins
U7 AT89C2051, 20-pin microcontroller
U9,U8 LTC-4727JR
U10,U12,U14 74HC573, 8-bit latch
U11 74LS145
U13 74HC541
U16 HIN232, RS232 level converter
U17 LM7805/TO_5, +5V voltage regulator

D2,D3,D4,D5,D6,D7,D8,D9, LED
D19 1N5227A
D21 TVS15V
D22 1N4733

Q1 KIA7042
Q2 BC557

Resistors (all resistors are 1/8W +/-5%)

R5,R1 680
R11,R3 10k
R4 100
R7 4.7k
R8 20
R10 5
R12 1k


C3,C1 100uF
C2,C8,C11,C12,C13 100nF
C4,C7,C10,C14,C15 10uF
C5,C6 22pF
C9 10uF 10V
C16 10uF 16V
C17 1000uF25V
C18,C19,C20,C21,C22 0.1uF
C24,C23 0.1uF

Additional parts

J2 DC Input
VB1 SUB-D 9, Male (cross cable)
Y1 16MHz

PCB Four layers plate through hole printed circuit board
display filter sheet
Keyboard overlay

Kit is available on eBay.
Bitcoin and PayPal are accepted NO VAT. Please contact

Download Schematic, Source code Listing , PLD files, AT89C2051 file,

Quick start
Lab Book rev1.0
Source code for LAB book
User's Manual rev1.0

Sample programs for TMS320C25 Kit

November 18, 2021

1. 16-bit divide Sample program for 16 bit divide for postive numbers written by Jason M. Zinserling.
2. LED rolling Final version of LED rolling program.
3. Perfect Number Find perfect number in 3 minutes.


Last updated November 18, 2021
28 July, 2021