Programmable Drum MachineSystem Software DesignEngineer: Mac GainorWestern Washington University
MCU Specifications Memory Requirements Kernel Choice Kernel Design Overall System Design
Introduction
TMS320C6713 DSP◦ Dual Fixed/Floating Point Multipliers◦ Two Multichannel Audio Serial Ports (McASP)◦ Two General-Purpose Timers◦ 15 General-Purpose I/O Pins
Bus Frequency: 225MHz
MCU
262k Internal RAM Available◦ Estimated Program Requirement: 10kBytes
256k Flash ROM Available◦ Estimated Program Requirement: 25kBytes
Memory
DSP/BIOS◦ Scalable Real-Time Multi-Tasking Kernel◦ Designed for C6000 Series DSP◦ Real-Time Analysis Tools◦ Semaphore and Mutual Exclusion Implementation
Kernel Choice
Prioritized Kernel Events1. HWI2. SWI3. Tasks4. Idle
Kernel Tick Time: 32uS
Kernel Design
McBSP Rec Interrupt (Generate Semaphore)◦ Frequency: 44kHz◦ Period: 22.7uS◦ Execution Time: 0.1uS(max)
ADC Receive Interrupt (Generate Semaphore)◦ Frequency: ~1.6kHz◦ Period: ~625uS◦ Execution Time: 0.1uS(max)
Hardware Interrupts
Clock Interrupts◦ ADC Receive (Generate Semaphore)
Period: 32uS Execution Time: .1uS(max)
◦ LCD Transmit (Generate Semaphore) Period: 32uS Execution Time: .1uS(max)
◦ UI Task Frequency (Generate Semaphore) Period: 9.98ms Execution Time: .1uS(max)
Software Interrupts
Task Name PriorityStartTask() 1ClockTask() 2CodecTask() 3ADCRecTask() 4UITask() 5LCDTask() 6
Tasks - Overview
Description: The purpose of the start task is to run initialization code for different hardware and software modules. The start task must initialize interrupts, LCD, and DSK peripherals.
Period: One Shot Execution Time: ~600mS
StartTask()
Description: The clock task provides software interrupts at 32uS intervals. The clock task must count up to 312 to reach approximately 10mS. The 10mS SWI is used to post a UITask().
Period: ~9.98ms(Periodic) Execution Time: 10uS(max)
ClockTask()
Description: The periodic codec task pends on a codec semaphore and an output buffer mutex. The output buffer is sent to the codec and the next output is calculated.
Period: 2.27uS(Periodic) Execution Time: 0.45uS(max)
CodecTask()
Description: The ADC Receive Task checks to see if a new analog input has been received into an input buffer. If so, it pends on the output buffer mutex and copies the input data to the output array.
Period: 32uS(Periodic) Execution Time: 0.5uS(max)
ADCRecTask()
Description: The user interface task runs every 10mS and polls the GPIO pins looking for a button press. If a button press is found, the LCD display task semaphore is posted for changes to be displayed.
Period: 10mS(Periodic) Execution Time: 10us(max)
UITask()
Description: The LCD task runs when the user interface task posts a semaphore. This task looks for changes in the effects selection and sends appropriate messages to the LCD.
Period: 10mS(Periodic) Execution Time: 1uS(max)
LCDTask()
Max Load: 44.70%
CPU Load
HWI SWI TASKS
Module Tasks Public Functionsmain.c Start Task
Codec TaskADC Receive TaskUser Interface Task
DSK_init()comm_intr()Effects StructureInput BufferOutput Buffer
LCD.c LCD Task LCD_init()LCD_clear()LCD_clearline()LCD_putchar()LCD_putstr()
drum_machinecfg_c.c Clock Task All kernel functionseffects.c filter()
delay()lfo()phase_shift()
Library Description
System Data Flow
System Data Flow (cont)
Top Related