]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo_bsp/ps7_cortexa9_0/libsrc/standalone_v4_1/src/profile/profile_hist.c
a3832008eda97b2d16a5215835d73321d50161ad
[freertos] / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo_bsp / ps7_cortexa9_0 / libsrc / standalone_v4_1 / src / profile / profile_hist.c
1 //
2 // Copyright (c) 2002-2010 Xilinx, Inc.  All rights reserved.
3 // Xilinx, Inc.
4 //
5 // XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
6 // COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
7 // ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
8 // STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
9 // IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
10 // FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
11 // XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
12 // THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
13 // ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
14 // FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
15 // AND FITNESS FOR A PARTICULAR PURPOSE.
16 //
17 // $Id: profile_hist.c,v 1.1.2.1 2011/05/17 04:37:57 sadanan Exp $
18 //
19 #include "profile.h"
20 #include "_profile_timer_hw.h"
21
22 #ifdef PROC_MICROBLAZE
23 #include "mblaze_nt_types.h"
24 #endif
25
26 #ifdef PROC_PPC
27 #include "xpseudo_asm.h"
28 #define SPR_SRR0 0x01A
29 #endif
30
31 #include "xil_types.h" 
32
33 extern int binsize ;
34 u32 prof_pc ;
35
36 void profile_intr_handler( void )
37 {
38
39         int j;
40
41 #ifdef PROC_MICROBLAZE
42         asm( "swi r14, r0, prof_pc" ) ;
43 #elif defined PROC_PPC
44         prof_pc = mfspr(SPR_SRR0);
45 #else
46         // for cortexa9, lr is saved in asm interrupt handler
47 #endif
48         //print("PC: "); putnum(prof_pc); print("\r\n");
49         for(j = 0; j < n_gmon_sections; j++ ){
50                 if((prof_pc >= _gmonparam[j].lowpc) && (prof_pc < _gmonparam[j].highpc)) {
51                         _gmonparam[j].kcount[(prof_pc-_gmonparam[j].lowpc)/(4 * binsize)]++;
52                         break;
53                 }
54         }
55         // Ack the Timer Interrupt
56         timer_ack();
57 }
58