| author | Slion |
| Thu, 07 Jan 2010 01:56:11 +0100 | |
| branch | anywhere |
| changeset 26 | 01da090338f9 |
| parent 0 | a41df078684a |
| permissions | -rw-r--r-- |
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" // which accompanies this distribution, and is available // at the URL "http://www.eclipse.org/legal/epl-v10.html". // // Initial Contributors: // Nokia Corporation - initial contribution. // // Contributors: // // Description: // e32test\personality\example\isr.cpp // Test code for example RTOS personality. // // #include "plat_priv.h" #include <personality/example/personality.h> #if defined(__MAWD__) #include <windermere.h> #elif defined(__MISA__) #define __ISR_SUPPORTED__ #include <sa1100.h> #elif defined(__MCOT__) #define __ISR_SUPPORTED__ #include <cotulla.h> #elif defined(__MI920__) || defined(__NI1136__) #include <integratorap.h> #elif defined(__EPOC32__) && defined(__CPU_X86) #include <x86.h> #endif #ifdef __ISR_SUPPORTED__ #include "../../misc/prbs.h" #endif extern "C" void stop_random_isr(void); typedef void (*isr_entry)(unsigned); volatile TUint RandomSeed[2] = {0xb504f333u, 0xf9de6484u}; volatile isr_entry IsrVector = 0; volatile TUint IsrCount = 0; void timer_isr(void*) { #if defined(__MISA__) TUint interval = Random((TUint*)RandomSeed); interval &= 0x3ff; interval += 256; // 256-1279 ticks = approx 69 to 347 microseconds TUint oscr=TSa1100::OstData(); TSa1100::SetOstMatch(KHwOstMatchGeneral, oscr + interval); TSa1100::SetOstMatchEOI(KHwOstMatchGeneral); #elif defined(__MCOT__) TUint interval = Random((TUint*)RandomSeed); interval &= 0x3ff; interval += 256; // 256-1279 ticks = approx 69 to 347 microseconds TUint oscr=TCotulla::OstData(); TCotulla::SetOstMatch(KHwOstMatchGeneral, oscr + interval); TCotulla::SetOstMatchEOI(KHwOstMatchGeneral); #endif (*IsrVector)(IsrCount++); } #ifdef __ISR_SUPPORTED__ void start_timer(void) { #if defined(__MISA__) // for SA11x0 use OST match 0 TInt r=Interrupt::Bind(KIntIdOstMatchGeneral, &timer_isr, 0); assert(r==KErrNone); TSa1100::ModifyIntLevels(0,KHtIntsOstMatchGeneral); // route new timer interrupt to FIQ TSa1100::SetOstMatchEOI(KHwOstMatchGeneral); TUint oscr=TSa1100::OstData(); TSa1100::SetOstMatch(KHwOstMatchGeneral, oscr + 5000); TSa1100::EnableOstInterrupt(KHwOstMatchGeneral); Interrupt::Enable(KIntIdOstMatchGeneral); #elif defined(__MCOT__) // for SA11x0 use OST match 0 TInt r=Interrupt::Bind(KIntIdOstMatchGeneral, &timer_isr, 0); assert(r==KErrNone); TCotulla::ModifyIntLevels(0,KHtIntsOstMatchGeneral); // route new timer interrupt to FIQ TCotulla::SetOstMatchEOI(KHwOstMatchGeneral); TUint oscr=TCotulla::OstData(); TCotulla::SetOstMatch(KHwOstMatchGeneral, oscr + 5000); TCotulla::EnableOstInterrupt(KHwOstMatchGeneral); Interrupt::Enable(KIntIdOstMatchGeneral); #endif } #endif extern "C" int start_random_isr(isr_entry vector) { stop_random_isr(); IsrVector = vector; #ifdef __ISR_SUPPORTED__ start_timer(); return OK; #else return KErrNotSupported; #endif } extern "C" void stop_random_isr(void) { #if defined(__MISA__) Interrupt::Disable(KIntIdOstMatchGeneral); Interrupt::Unbind(KIntIdOstMatchGeneral); #elif defined(__MCOT__) Interrupt::Disable(KIntIdOstMatchGeneral); Interrupt::Unbind(KIntIdOstMatchGeneral); #endif IsrVector = 0; }