190 likes | 284 Views
Programmable Drum Machine. System Software Design Engineer: Mac Gainor Western Washington University. Introduction. MCU Specifications Memory Requirements Kernel Choice Kernel Design Overall System Design. MCU. TMS320C6713 DSP Dual Fixed/Floating Point Multipliers
E N D
Programmable Drum Machine System Software Design Engineer: Mac Gainor Western Washington University
Introduction • MCU Specifications • Memory Requirements • Kernel Choice • Kernel Design • Overall System Design
MCU • 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
Memory • 262k Internal RAM Available • Estimated Program Requirement: 10kBytes • 256k Flash ROM Available • Estimated Program Requirement: 25kBytes
Kernel Choice • DSP/BIOS • Scalable Real-Time Multi-Tasking Kernel • Designed for C6000 Series DSP • Real-Time Analysis Tools • Semaphore and Mutual Exclusion Implementation
Kernel Design • Prioritized Kernel Events • HWI • SWI • Tasks • Idle • Kernel Tick Time: 32uS
Hardware Interrupts • McBSPRec 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)
Software 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)
StartTask() • 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
ClockTask() • 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)
CodecTask() • 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)
ADCRecTask() • 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)
UITask() • 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)
LCDTask() • 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)
CPU Load Max Load: 44.70% HWI SWI TASKS