omap3530/assp/inc/omap3530_timer.h
changeset 0 6663340f3fc9
equal deleted inserted replaced
-1:000000000000 0:6663340f3fc9
       
     1 // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of the License "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // /omap3530/assp/inc/omap3530_timer.h
       
    15 //
       
    16 
       
    17 #ifndef HEADER_OMAP3530_TIMER_H_INCLUDED
       
    18 #	define HEADER_OMAP3530_TIMER_H_INCLUDED
       
    19 
       
    20 /**
       
    21 @file
       
    22 	omap3530_timer.h header file
       
    23 This file provides timer handling for the omap3530 timers
       
    24 @publishedAll
       
    25 @released
       
    26 */
       
    27 
       
    28 #include <assp/omap3530_assp/omap3530_hardware_base.h>
       
    29 #include <assp/omap3530_assp/omap3530_irqmap.h>
       
    30 
       
    31 namespace TexasInstruments
       
    32 	{
       
    33 
       
    34 	namespace Omap3530
       
    35 		{
       
    36 
       
    37 
       
    38 		namespace GPTimer
       
    39 			{
       
    40 
       
    41 			namespace TIOCP_CFG
       
    42 				{
       
    43 				/**
       
    44 					0 AUTOIDLE Internal L4 interface clock gating strategy 0
       
    45 					0x0: L4 interface clock is free-running.
       
    46 					0x1: Automatic L4 interface clock gating strategy isapplied, based on the L4 interface activity.
       
    47 				*/
       
    48 				typedef TSingleBitField<0>	T_AUTOIDLE ;
       
    49 
       
    50 				/**
       
    51 					1 SOFTRESET Software reset. This bit is automatically reset by the RW 0 hardware. During reads, it always returns 0.
       
    52 					0x0: Normal mode
       
    53 					0x1: The module is reset.
       
    54 				*/
       
    55 				typedef TSingleBitField<1>	T_SOFTRESET ;
       
    56 
       
    57 				/**
       
    58 					2 ENAWAKEUP Wake-up feature global control RW 0
       
    59 					0x0: No wake-up line assertion in idle mode
       
    60 					0x1: Wake-up line assertion enabled in smart-idle mode
       
    61 				*/
       
    62 				typedef TSingleBitField<2>	T_ENAWAKEUP ;
       
    63 
       
    64 				/**
       
    65 					4:3 IDLEMODE Power management, req/ack control RW 0x0
       
    66 					0x0: Force-idle. An idle request is acknowledged unconditionally.
       
    67 					0x1: No-idle. An idle request is never acknowledged.
       
    68 					0x2: Smart-idle. Acknowledgement to an idle request is given based on the internal activity of the module.
       
    69 					0x3: Reserved. Do not use.
       
    70 				*/
       
    71 				class T_IDLEMODE : public TBitField<3, 2>
       
    72 					{
       
    73 				  public :
       
    74 					enum TConstants
       
    75 						{
       
    76 						KForceIdle		= TConstVal<0>::KValue,
       
    77 						KNoIdle			= TConstVal<1>::KValue,
       
    78 						KSmartIdle		= TConstVal<2>::KValue
       
    79 						} ;
       
    80 					} ;
       
    81 
       
    82 				/**
       
    83 					5 EMUFREE Emulation mode RW 0
       
    84 					0x0: Timer counter frozen in emulation
       
    85 					0x1: Timer counter free-running in emulation
       
    86 				*/
       
    87 				typedef TSingleBitField<5>	T_EMUFREE ;
       
    88 
       
    89 				/**
       
    90 					9:8 CLOCKACTIVITY Clock activity during wakeup mode period: RW 0x0
       
    91 					0x0: L4 interface and Functional clocks can be switched off.
       
    92 					0x1: L4 interface clock is maintained during wake-up period; Functional clock can be switched off.
       
    93 					0x2: L4 interface clock can be switched off; Functional clock is maintained during wake-up period.
       
    94 					0x3: L4 interface and Functional clocks are maintained during wake-up period.
       
    95 				*/
       
    96 				class T_CLOCKACTIVITY : public TBitField<8, 2>
       
    97 					{
       
    98 				  public :
       
    99 					enum TConstants
       
   100 						{
       
   101 						KMaintainNeither	= TConstVal<0>::KValue,
       
   102 						KMaintainIfClock	= TConstVal<1>::KValue,
       
   103 						KMaintainFuncClock	= TConstVal<2>::KValue,
       
   104 						KMaintainBoth		= TConstVal<3>::KValue
       
   105 						} ;
       
   106 					} ;
       
   107 
       
   108 				} ;	// namespace TIOCP_CFG
       
   109 
       
   110 			namespace TISTAT
       
   111 				{
       
   112 				/**
       
   113 				0 RESETDONE Internal reset monitoring R 0
       
   114 				0x0: Internal module reset is ongoing.
       
   115 				0x1: Reset completed
       
   116 				*/
       
   117 				typedef TSingleBitField<0>	T_RESETDONE ;
       
   118 
       
   119 				} ;	// namespace TISTAT
       
   120 
       
   121 			namespace TISR
       
   122 				{
       
   123 				/**
       
   124 				0 MAT_IT_FLAG Pending match interrupt status RW 0
       
   125 				Read 0x0: No match interrupt pending
       
   126 				Write 0x0: Status unchanged
       
   127 				Read 0x1: Match interrupt pending
       
   128 				Write 0x1: Status bit cleared
       
   129 				*/
       
   130 				typedef TSingleBitField<0>	T_MAT_IT_FLAG ;
       
   131 
       
   132 				/**
       
   133 				1 OVF_IT_FLAG Pending overflow interrupt status RW 0
       
   134 				Read 0x0: No overflow interrupt pending
       
   135 				Write 0x0: Status unchanged
       
   136 				Read 0x1: Overflow interrupt pending
       
   137 				Write 0x1: Status bit cleared
       
   138 				*/
       
   139 				typedef TSingleBitField<1>	T_OVF_IT_FLAG ;
       
   140 
       
   141 				/**
       
   142 				2 TCAR_IT_FLAG Pending capture interrupt status RW 0
       
   143 				Read 0x0: No capture interrupt event pending
       
   144 				Write 0x0: Status unchanged
       
   145 				Read 0x1: Capture interrupt event pending
       
   146 				Write 0x1: Status bit cleared
       
   147 				*/
       
   148 				typedef TSingleBitField<2>	T_TCAR_IT_FLAG ;
       
   149 
       
   150 				} ;	// namespace TISR
       
   151 
       
   152 			namespace TIER
       
   153 				{
       
   154 				/**
       
   155 				0 MAT_IT_ENA Enable match interrupt RW 0
       
   156 				0x0: Disable match interrupt.
       
   157 				0x1: Enable match interrupt.
       
   158 				*/
       
   159 				typedef TSingleBitField<0>	T_MAT_IT_ENA ;
       
   160 
       
   161 				/**
       
   162 				1 OVF_IT_ENA Enable overflow interrupt RW 0
       
   163 				0x0: Disable overflow interrupt.
       
   164 				0x1: Enable overflow interrupt.
       
   165 				*/
       
   166 				typedef TSingleBitField<1>	T_OVF_IT_ENA ;
       
   167 
       
   168 				/**
       
   169 				2 TCAR_IT_ENA Enable capture interrupt RW 0
       
   170 				0x0: Disable capture interrupt.
       
   171 				0x1: Enable capture interrupt.
       
   172 				*/
       
   173 				typedef TSingleBitField<2>	T_TCAR_IT_ENA ;
       
   174 
       
   175 				} ;	// namespace TIER
       
   176 
       
   177 			namespace TWER
       
   178 				{
       
   179 				/**
       
   180 				0 MAT_WUP_ENA Enable match wake-up RW 0
       
   181 				0x0: Disable match wake-up.
       
   182 				0x1: Enable match wake-up.
       
   183 				*/
       
   184 				typedef TSingleBitField<0>	T_MAT_WUP_ENA ;
       
   185 
       
   186 				/**
       
   187 				1 OVF_WUP_ENA Enable overflow wake-up RW 0
       
   188 				0x0: Disable overflow wake-up.
       
   189 				0x1: Enable overflow wake-up.
       
   190 				*/
       
   191 				typedef TSingleBitField<1>	T_OVF_WUP_ENA ;
       
   192 
       
   193 				/**
       
   194 				2 TCAR_WUP_ENA Enable capture wake-up RW 0
       
   195 				0x0: Disable capture wake-up.
       
   196 				0x1: Enable capture wake-up.
       
   197 				*/
       
   198 				typedef TSingleBitField<2>	T_TCAR_WUP_ENA ;
       
   199 
       
   200 				} ;	// namespace TWER
       
   201 
       
   202 			namespace TCLR
       
   203 				{
       
   204 				/**
       
   205 				0 ST Start/stop timer control RW 0
       
   206 				0x0: Stop the timer
       
   207 				0x1: Start the timer
       
   208 				*/
       
   209 				typedef TSingleBitField<0>	T_ST ;
       
   210 
       
   211 				/**
       
   212 				1 AR Autoreload mode RW 0
       
   213 				0x0: One-shot mode overflow
       
   214 				0x1: Autoreload mode overflow
       
   215 				*/
       
   216 				typedef TSingleBitField<1>	T_AR ;
       
   217 
       
   218 				/**
       
   219 				4:2 PTV Trigger output mode
       
   220 				0x0: The timer counter is prescaled with the value: RW 0x0
       
   221 				2(PTV+1). Example: PTV = 3, counter increases value (if started) after 16 functional clock periods.
       
   222 				*/
       
   223 				class T_PTV : public TBitField<2, 3>
       
   224 					{
       
   225 				  public :
       
   226 					enum TConstants
       
   227 						{
       
   228 						KPS_2		= TConstVal<0>::KValue,
       
   229 						KPS_4		= TConstVal<1>::KValue,
       
   230 						KPS_8		= TConstVal<2>::KValue,
       
   231 						KPS_16		= TConstVal<3>::KValue,
       
   232 						KPS_32		= TConstVal<4>::KValue,
       
   233 						KPS_64		= TConstVal<5>::KValue,
       
   234 						KPS_128		= TConstVal<6>::KValue,
       
   235 						KPS_256		= TConstVal<7>::KValue
       
   236 						} ;
       
   237 					} ;
       
   238 
       
   239 				/**
       
   240 				5 PRE Prescaler enable RW 0
       
   241 				0x0: Prescaler disabled
       
   242 				0x1: Prescaler enabled
       
   243 				*/
       
   244 				typedef TSingleBitField<5>	T_PRE ;
       
   245 
       
   246 				/**
       
   247 				6 CE Compare enable RW 0
       
   248 				0x0: Compare disabled
       
   249 				0x1: Compare enabled
       
   250 				*/
       
   251 				typedef TSingleBitField<6>	T_CE ;
       
   252 
       
   253 				/**
       
   254 				7 SCPWM Pulse-width-modulation output pin default setting when RW 0
       
   255 				counter is stopped or trigger output mode is set to no trigger.
       
   256 				0x0: Default value of PWM_out output: 0
       
   257 				0x1: Default value of PWM_out output: 1
       
   258 				*/
       
   259 				typedef TSingleBitField<7>	T_SCPWM ;
       
   260 
       
   261 				/**
       
   262 				9:8 TCM Transition capture mode RW 0x0
       
   263 				0x0: No capture
       
   264 				0x1: Capture on rising edges of EVENT_CAPTURE pin.
       
   265 				0x2: Capture on falling edges of EVENT_CAPTURE pin.
       
   266 				0x3: Capture on both edges of EVENT_CAPTURE pin.
       
   267 				*/
       
   268 				class T_TCM : public TBitField<8, 2>
       
   269 					{
       
   270 				  public :
       
   271 					enum TConstants
       
   272 						{
       
   273 						KNoCapture			= TConstVal<0>::KValue,
       
   274 						KRisingEdge			= TConstVal<1>::KValue,
       
   275 						KFallingEdge		= TConstVal<2>::KValue,
       
   276 						KBothEdges			= TConstVal<3>::KValue
       
   277 						} ;
       
   278 					} ;
       
   279 
       
   280 				/**
       
   281 				11:10 TRG Trigger output mode RW 0x0
       
   282 				0x0: No trigger
       
   283 				0x1: Overflow trigger
       
   284 				0x2: Overflow and match trigger
       
   285 				0x3: Reserved
       
   286 				*/
       
   287 				class T_IDLEMODE : public TBitField<10, 2>
       
   288 					{
       
   289 				  public :
       
   290 					enum TConstants
       
   291 						{
       
   292 						KNoTrigger				= TConstVal<0>::KValue,
       
   293 						KOverflow				= TConstVal<1>::KValue,
       
   294 						KOverflowAndMatch		= TConstVal<2>::KValue
       
   295 						} ;
       
   296 					} ;
       
   297 
       
   298 				/**
       
   299 				12 PT Pulse or toggle select bit RW 0
       
   300 				0x0: Pulse modulation
       
   301 				0x1: Toggle modulation
       
   302 				*/
       
   303 				typedef TSingleBitField<12>	T_PT ;
       
   304 
       
   305 				/**
       
   306 				13 CAPT_MODE Capture mode select bit (first/second) RW 0
       
   307 				0x0: Capture the first enabled capture event in TCAR1.
       
   308 				0x1: Capture the second enabled capture event in TCAR2.
       
   309 				*/
       
   310 				typedef TSingleBitField<13>	T_CAPT_MODE ;
       
   311 
       
   312 				/**
       
   313 				14 GPO_CFG PWM output/event detection input pin direction control: RW 0
       
   314 				0x0: Configures the pin as an output (needed when PWM mode is required)
       
   315 				0x1: Configures the pin as an input (needed when capture mode is required)
       
   316 				*/
       
   317 				typedef TSingleBitField<14>	T_GPO_CFG ;
       
   318 
       
   319 				} ;	// namespace TCLR
       
   320 
       
   321 			namespace TWPS
       
   322 				{
       
   323 				/**
       
   324 				0 W_PEND_TCLR Write pending for register GPT_TCLR R 0
       
   325 				0x0: Control register write not pending
       
   326 				0x1: Control register write pending
       
   327 				*/
       
   328 				typedef TSingleBitField<0>	T_W_PEND_TCLR ;
       
   329 
       
   330 				/**
       
   331 				1 W_PEND_TCRR Write pending for register GPT_TCRR R 0
       
   332 				0x0: Counter register write not pending
       
   333 				0x1: Counter register write pending
       
   334 				*/
       
   335 				typedef TSingleBitField<1>	T_W_PEND_TCRR ;
       
   336 
       
   337 				/**
       
   338 				2 W_PEND_TLDR Write pending for register GPT_TLDR R 0
       
   339 				0x0: Load register write not pending
       
   340 				0x1: Load register write pending
       
   341 				*/
       
   342 				typedef TSingleBitField<2>	T_W_PEND_TLDR ;
       
   343 
       
   344 				/**
       
   345 				3 W_PEND_TTGR Write pending for register GPT_TTGR R 0
       
   346 				0x0: Trigger register write not pending
       
   347 				0x1: Trigger register write pending
       
   348 				*/
       
   349 				typedef TSingleBitField<3>	T_W_PEND_TTGR ;
       
   350 
       
   351 				/**
       
   352 				4 W_PEND_TMAR Write pending for register GPT_TMAR R 0
       
   353 				0x0: Match register write not pending
       
   354 				0x1: Match register write pending
       
   355 				*/
       
   356 				typedef TSingleBitField<4>	T_W_PEND_TMAR;
       
   357 
       
   358 				/**
       
   359 				5 W_PEND_TPIR Write pending for register GPT_TPIR R 0
       
   360 				Reserved for instances 3, 4, 5, 6, 7, 8, 9, 11, 12 Read returns reset value. R 0
       
   361 				0x0: Positive increment register write not pending
       
   362 				0x1: Positive increment register write pending
       
   363 				*/
       
   364 				typedef TSingleBitField<5>	T_W_PEND_TPIR ;
       
   365 
       
   366 				/**
       
   367 				6 W_PEND_TNIR Write pending for register GPT_TNIR R 0
       
   368 				0x0: Negative increment register write not pending
       
   369 				0x1: Negative increment register write pending
       
   370 				Reserved for instances 3, 4, 5, 6, 7, 8, 9, 11, 12 Read returns reset value. R 0
       
   371 				*/
       
   372 				typedef TSingleBitField<6>	T_W_PEND_TNIR ;
       
   373 
       
   374 				/**
       
   375 				7 W_PEND_TCVR Write pending for register GPT_TCVR R 0
       
   376 				0x0: Counter value register write not pending
       
   377 				0x1: Counter value register write pending
       
   378 				Reserved for instances 3, 4, 5, 6, 7, 8, 9, 11, 12 Read returns reset value. R 0
       
   379 				*/
       
   380 				typedef TSingleBitField<7>	T_W_PEND_TCVR ;
       
   381 
       
   382 				/**
       
   383 				8 W_PEND_TOCR Write pending for register GPT_TOCR R 0
       
   384 				0x0: Overflow counter register write not pending
       
   385 				0x1: Overflow counter register write pending
       
   386 				Reserved for instances 3, 4, 5, 6, 7, 8, 9, 11, 12 Read returns reset value. R 0
       
   387 				*/
       
   388 				typedef TSingleBitField<8>	T_W_PEND_TOCR ;
       
   389 
       
   390 				/**
       
   391 				9 W_PEND_TOWR Write pending for register GPT_TOWR R 0
       
   392 				0x0: Overflow wrapping register write not pending
       
   393 				0x1: Overflow wrapping register write pending
       
   394 				Reserved for instances 3, 4, 5, 6, 7, 8, 9, 11, 12 Read returns reset value. R 0
       
   395 				*/
       
   396 				typedef TSingleBitField<9>	T_W_PEND_TOWR ;
       
   397 
       
   398 				} ;	// namespace TWPS
       
   399 
       
   400 			namespace TSICR
       
   401 				{
       
   402 				/**
       
   403 				1 SFT Reset software functional registers. This bit is automatically reset RW 0
       
   404 				by the hardware. During reads, it always returns 0.
       
   405 				0x0: Normal functional mode
       
   406 				0x1: The functional registers are reset.
       
   407 				*/
       
   408 				typedef TSingleBitField<1>	T_SFT ;
       
   409 
       
   410 				/**
       
   411 				2 POSTED Posted mode selection RW 1
       
   412 				0x0: Non-posted mode selected
       
   413 				0x1: Posted mode selected
       
   414 				*/
       
   415 				typedef TSingleBitField<2>	T_POSTED ;
       
   416 
       
   417 				} ;	// namespace TSICR
       
   418 
       
   419 			namespace TOCR
       
   420 				{
       
   421 				/**
       
   422 				23:0 OVF_COUNTER_VALUE The number of overflow events. RW 0x00000000
       
   423 				*/
       
   424 				class T_OVF_COUNTER_VALUE : public TBitField<0, 24>
       
   425 					{
       
   426 				  public :
       
   427 					enum TConstants
       
   428 						{
       
   429 						} ;
       
   430 					} ;
       
   431 
       
   432 				} ;	// namespace TOCR
       
   433 
       
   434 			namespace TOWR
       
   435 				{
       
   436 				/**
       
   437 				23:0 OVF_WRAPPING_VALUE The number of masked interrupts. RW 0x00000000
       
   438 				*/
       
   439 				class T_OVF_WRAPPING_VALUE : public TBitField<0, 24>
       
   440 					{
       
   441 				  public :
       
   442 					enum TConstants
       
   443 						{
       
   444 						} ;
       
   445 					} ;
       
   446 
       
   447 				} ;	// namespace TOWR
       
   448 
       
   449 			enum TBaseAddress
       
   450 				{
       
   451 				KGPTIMER1_Base			= TVirtual<0x48318000>::Value,
       
   452 				KGPTIMER2_Base			= TVirtual<0x49032000>::Value,
       
   453 				KGPTIMER3_Base			= TVirtual<0x49034000>::Value,
       
   454 				KGPTIMER4_Base			= TVirtual<0x49036000>::Value,
       
   455 				KGPTIMER5_Base			= TVirtual<0x49038000>::Value,
       
   456 				KGPTIMER6_Base			= TVirtual<0x4903A000>::Value,
       
   457 				KGPTIMER7_Base			= TVirtual<0x4903C000>::Value,
       
   458 				KGPTIMER8_Base			= TVirtual<0x4903E000>::Value,
       
   459 				KGPTIMER9_Base			= TVirtual<0x49040000>::Value,
       
   460 				KGPTIMER10_Base			= TVirtual<0x48086000>::Value,
       
   461 				KGPTIMER11_Base			= TVirtual<0x48088000>::Value,
       
   462 				KGPTIMER12_Base			= TVirtual<0x48304000>::Value,
       
   463 				} ;
       
   464 
       
   465 			enum TTimerNumber
       
   466 				{
       
   467 				EGpTimer1,
       
   468 				EGpTimer2,
       
   469 				EGpTimer3,
       
   470 				EGpTimer4,
       
   471 				EGpTimer5,
       
   472 				EGpTimer6,
       
   473 				EGpTimer7,
       
   474 				EGpTimer8,
       
   475 				EGpTimer9,
       
   476 				EGpTimer10,
       
   477 				EGpTimer11,
       
   478 				EGpTimer12
       
   479 				};
       
   480 
       
   481 			typedef void (*TTimerIsr)(TAny*) ;
       
   482 
       
   483 			template<const TTimerNumber tImEr>
       
   484 			struct TTimerTraits
       
   485 				{
       
   486 				} ;
       
   487 
       
   488 			template<>
       
   489 			struct TTimerTraits<EGpTimer1>
       
   490 				{
       
   491 				enum	TraitValues
       
   492 					{
       
   493 					KBaseAddress	= KGPTIMER1_Base,
       
   494 					KIrq			= EOmap3530_IRQ37_GPT1_IRQ,
       
   495 					KClockSelMask	= TSingleBitField<7>::KMask,
       
   496 					KClockSelValue	= TSingleBitField<7>::KOn,
       
   497 					} ;
       
   498 				} ;
       
   499 
       
   500 			template<>
       
   501 			struct TTimerTraits<EGpTimer2>
       
   502 				{
       
   503 				enum	TraitValues
       
   504 					{
       
   505 					KBaseAddress	= KGPTIMER2_Base,
       
   506 					KIrq	= EOmap3530_IRQ38_GPT2_IRQ,
       
   507 					} ;
       
   508 				} ;
       
   509 
       
   510 			template<>
       
   511 			struct TTimerTraits<EGpTimer3>
       
   512 				{
       
   513 				enum	TraitValues
       
   514 					{
       
   515 					KBaseAddress	= KGPTIMER3_Base,
       
   516 					KIrq	= EOmap3530_IRQ39_GPT3_IRQ,
       
   517 					} ;
       
   518 				} ;
       
   519 
       
   520 			template<>
       
   521 			struct TTimerTraits<EGpTimer4>
       
   522 				{
       
   523 				enum	TraitValues
       
   524 					{
       
   525 					KBaseAddress	= KGPTIMER4_Base,
       
   526 					KIrq	= EOmap3530_IRQ40_GPT4_IRQ,
       
   527 					} ;
       
   528 				} ;
       
   529 
       
   530 			template<>
       
   531 			struct TTimerTraits<EGpTimer5>
       
   532 				{
       
   533 				enum	TraitValues
       
   534 					{
       
   535 					KBaseAddress	= KGPTIMER5_Base,
       
   536 					KIrq	= EOmap3530_IRQ41_GPT5_IRQ,
       
   537 					} ;
       
   538 				} ;
       
   539 
       
   540 			template<>
       
   541 			struct TTimerTraits<EGpTimer6>
       
   542 				{
       
   543 				enum	TraitValues
       
   544 					{
       
   545 					KBaseAddress	= KGPTIMER6_Base,
       
   546 					KIrq	= EOmap3530_IRQ42_GPT6_IRQ,
       
   547 					} ;
       
   548 				} ;
       
   549 
       
   550 			template<>
       
   551 			struct TTimerTraits<EGpTimer7>
       
   552 				{
       
   553 				enum	TraitValues
       
   554 					{
       
   555 					KBaseAddress	= KGPTIMER7_Base,
       
   556 					KIrq	= EOmap3530_IRQ43_GPT7_IRQ,
       
   557 					} ;
       
   558 				} ;
       
   559 
       
   560 			template<>
       
   561 			struct TTimerTraits<EGpTimer8>
       
   562 				{
       
   563 				enum	TraitValues
       
   564 					{
       
   565 					KBaseAddress	= KGPTIMER8_Base,
       
   566 					KIrq	= EOmap3530_IRQ44_GPT8_IRQ,
       
   567 					} ;
       
   568 				} ;
       
   569 
       
   570 			template<>
       
   571 			struct TTimerTraits<EGpTimer9>
       
   572 				{
       
   573 				enum	TraitValues
       
   574 					{
       
   575 					KBaseAddress	= KGPTIMER9_Base,
       
   576 					KIrq			= EOmap3530_IRQ45_GPT9_IRQ,
       
   577 					} ;
       
   578 				} ;
       
   579 
       
   580 			template<>
       
   581 			struct TTimerTraits<EGpTimer10>
       
   582 				{
       
   583 				enum	TraitValues
       
   584 					{
       
   585 					KBaseAddress	= KGPTIMER10_Base,
       
   586 					KIrq	= EOmap3530_IRQ46_GPT10_IRQ,
       
   587 					} ;
       
   588 				} ;
       
   589 
       
   590 			template<>
       
   591 			struct TTimerTraits<EGpTimer11>
       
   592 				{
       
   593 				enum	TraitValues
       
   594 					{
       
   595 					KBaseAddress	= KGPTIMER11_Base,
       
   596 					KIrq			= EOmap3530_IRQ47_GPT11_IRQ,
       
   597 					} ;
       
   598 				} ;
       
   599 
       
   600 			template<>
       
   601 			struct TTimerTraits<EGpTimer12>
       
   602 				{
       
   603 				enum	TraitValues
       
   604 					{
       
   605 					KBaseAddress	= KGPTIMER12_Base,
       
   606 					KIrq			= EOmap3530_IRQ95_GPT12_IRQ,
       
   607 					KClockSelReg	= 0,
       
   608 					KClockSelMask	= 0,
       
   609 					KClockSel32K	= 0,
       
   610 					KClockSelSys	= 0,
       
   611 					KClockSelValue	= KClockSel32K
       
   612 					} ;
       
   613 				} ;
       
   614 
       
   615 			/**
       
   616 			An interface template for OMAP3530 General Purpose timer functionality.
       
   617 			*/
       
   618 			template <const TTimerNumber tImEr>
       
   619 			class TGPT
       
   620 				{
       
   621 			  protected :
       
   622 				enum TRegisterOffsets
       
   623 					{
       
   624 					KTIOCP_CFG_Offset	= 0x010,
       
   625 					KTISTAT_Offset		= 0x014,
       
   626 					KTISR_Offset		= 0x018,
       
   627 					KTIER_Offset		= 0x01C,
       
   628 					KTWER_Offset		= 0x020,
       
   629 					KTCLR_Offset		= 0x024,
       
   630 					KTCRR_Offset		= 0x028,
       
   631 					KTLDR_Offset		= 0x02C,
       
   632 					KTTGR_Offset		= 0x030,
       
   633 					KTWPS_Offset		= 0x034,
       
   634 					KTMAR_Offset		= 0x038,
       
   635 					KTCAR1_Offset		= 0x03C,
       
   636 					KTSICR_Offset		= 0x040,
       
   637 					KTCAR2_Offset		= 0x044
       
   638 					} ;
       
   639 				enum TConstants
       
   640 					{
       
   641 					KHz						= 1000,
       
   642 					KClockInputFrequency	= 32768,
       
   643 					} ;
       
   644 
       
   645 			  public :
       
   646 				static inline TOmap3530_IRQ Irq()
       
   647 					{
       
   648 					return TOmap3530_IRQ(TTimerTraits<tImEr>::KIrq) ;
       
   649 					}
       
   650 				static inline TBool CanWriteTCLR()
       
   651 					{
       
   652 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TCLR::KOn)) ;
       
   653 					}
       
   654 				static inline TBool CanWriteTCRR()
       
   655 					{
       
   656 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TCRR::KOn)) ;
       
   657 					}
       
   658 				static inline TBool CanWriteTLDR()
       
   659 					{
       
   660 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TLDR::KOn)) ;
       
   661 					}
       
   662 				static inline TBool CanWriteTTGR()
       
   663 					{
       
   664 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TTGR::KOn)) ;
       
   665 					}
       
   666 				static inline TBool CanWriteTMAR()
       
   667 					{
       
   668 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TMAR::KOn)) ;
       
   669 					}
       
   670 				static inline void Reset()
       
   671 					{
       
   672 					iTIOCP_CFG.Write(TIOCP_CFG::T_SOFTRESET::KOn) ;
       
   673 					}
       
   674 				static inline TBool ResetComplete()
       
   675 					{
       
   676 					return (TISTAT::T_RESETDONE::KOn & iTISTAT.Read()) ;
       
   677 					}
       
   678 				static inline TBool WriteOutstanding()
       
   679 					{
       
   680 					return (iTWPS.Read()) ;
       
   681 					}
       
   682 
       
   683 			  public :
       
   684 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTIOCP_CFG_Offset)>	iTIOCP_CFG ;
       
   685 				static TReg32_R<(TTimerTraits<tImEr>::KBaseAddress  + KTISTAT_Offset)>		iTISTAT ;
       
   686 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTISR_Offset)>		iTISR ;
       
   687 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTIER_Offset)>		iTIER ;
       
   688 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTWER_Offset)>		iTWER ;
       
   689 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTCLR_Offset)>		iTCLR ;
       
   690 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTCRR_Offset)>		iTCRR ;
       
   691 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTLDR_Offset)>		iTLDR ;
       
   692 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTTGR_Offset)>		iTTGR ;
       
   693 				static TReg32_R<(TTimerTraits<tImEr>::KBaseAddress  + KTWPS_Offset)>		iTWPS ;
       
   694 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTMAR_Offset)>		iTMAR ;
       
   695 				static TReg32_R<(TTimerTraits<tImEr>::KBaseAddress  + KTCAR1_Offset)>		iTCAR1 ;
       
   696 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTSICR_Offset)>		iTSICR ;
       
   697 				static TReg32_R<(TTimerTraits<tImEr>::KBaseAddress  + KTCAR2_Offset)>		iTCAR2 ;
       
   698 				} ;	// class TGPTi
       
   699 
       
   700 			/**
       
   701 
       
   702 			An interface template for OMAP3530 Microsecond aligned timer functionality.
       
   703 			Encapsulates the extra registers provided for timers 1, 2 and 10.
       
   704 			*/
       
   705 			template <const TTimerNumber tImEr>
       
   706 			class TMsSyncTimer : public TGPT<tImEr>
       
   707 				{
       
   708 				using TGPT<tImEr>::iTWPS ;
       
   709 				using TGPT<tImEr>::iTLDR ;
       
   710 			  
       
   711 			protected :
       
   712 				enum TRegisterOffsets
       
   713 					{
       
   714 					KTPIR_Offset		= 0x048,
       
   715 					KTNIR_Offset		= 0x04C,
       
   716 					KTCVR_Offset		= 0x050,
       
   717 					KTOCR_Offset		= 0x054,
       
   718 					KTOWR_Offset		= 0x058
       
   719 					} ;
       
   720 
       
   721 			  public :
       
   722 				enum TRegisterValues
       
   723 					{
       
   724 					KInitialLoad	= 0xFFFFFFE0,
       
   725 					KInitialPIR		= 0x38A40,
       
   726 					KInitialNIR		= 0xFFF44800
       
   727 					} ;
       
   728 
       
   729 				static inline TBool CanWriteTPIR()
       
   730 					{
       
   731 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TPIR::KOn)) ;
       
   732 					}
       
   733 				static inline TBool CanWriteTNIR()
       
   734 					{
       
   735 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TNIR::KOn)) ;
       
   736 					}
       
   737 				static inline TBool CanWriteTCVR()
       
   738 					{
       
   739 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TCVR::KOn)) ;
       
   740 					}
       
   741 				static inline TBool CanWriteTOCR()
       
   742 					{
       
   743 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TOCR::KOn)) ;
       
   744 					}
       
   745 				static inline TBool CanWriteTOWR()
       
   746 					{
       
   747 					return (0 == (iTWPS.Read() & TWPS::T_W_PEND_TOWR::KOn)) ;
       
   748 					}
       
   749 
       
   750 				static inline void ConfigureFor1Ms()
       
   751 					{
       
   752 					iTLDR.Write( KInitialLoad );
       
   753 					iTPIR.Write( KInitialPIR );
       
   754 					iTNIR.Write( KInitialNIR );
       
   755 					}
       
   756 
       
   757 			  public :
       
   758 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTPIR_Offset)>		iTPIR ;
       
   759 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTNIR_Offset)>		iTNIR ;
       
   760 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTCVR_Offset)>		iTCVR ;
       
   761 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTOCR_Offset)>		iTOCR ;
       
   762 				static TReg32_RW<(TTimerTraits<tImEr>::KBaseAddress + KTOWR_Offset)>		iTOWR ;
       
   763 				} ;	// class TMsSyncTimer
       
   764 
       
   765 
       
   766 			}	// namespage GPTimer
       
   767 
       
   768 		typedef GPTimer::TMsSyncTimer<GPTimer::EGpTimer1>		TGpTimer1 ;
       
   769 		typedef GPTimer::TMsSyncTimer<GPTimer::EGpTimer2>		TGpTimer2 ;
       
   770 		typedef GPTimer::TGPT<GPTimer::EGpTimer3>				TGpTimer3 ;
       
   771 		typedef GPTimer::TGPT<GPTimer::EGpTimer4>				TGpTimer4 ;
       
   772 		typedef GPTimer::TGPT<GPTimer::EGpTimer5>				TGpTimer5 ;
       
   773 		typedef GPTimer::TGPT<GPTimer::EGpTimer6>				TGpTimer6 ;
       
   774 		typedef GPTimer::TGPT<GPTimer::EGpTimer7>				TGpTimer7 ;
       
   775 		typedef GPTimer::TGPT<GPTimer::EGpTimer8>				TGpTimer8 ;
       
   776 		typedef GPTimer::TGPT<GPTimer::EGpTimer9>				TGpTimer9 ;
       
   777 		typedef GPTimer::TMsSyncTimer<GPTimer::EGpTimer10>		TGpTimer10 ;
       
   778 		typedef GPTimer::TGPT<GPTimer::EGpTimer11>				TGpTimer11 ;
       
   779 		typedef GPTimer::TGPT<GPTimer::EGpTimer12>				TGpTimer12 ;
       
   780 
       
   781 
       
   782 		/**
       
   783 		An interface template for OMAP3530 32-KHz aligned timer functionality.
       
   784 		*/
       
   785 		class T32KhzSyncTimer
       
   786 			{
       
   787 		  protected :
       
   788 			enum TRegisterAddress
       
   789 				{
       
   790 				KREG_32KSYNCNT_SYSCONFIG	= TVirtual<0x48320004>::Value,
       
   791 				KREG_32KSYNCNT_CR			= TVirtual<0x48320010>::Value
       
   792 				} ;
       
   793 
       
   794 		  public :
       
   795 			static TReg32_RW<KREG_32KSYNCNT_SYSCONFIG>		iSysConfig ;
       
   796 			static TReg32_R<KREG_32KSYNCNT_CR>				iCR ;
       
   797 
       
   798 		  private :
       
   799 			} ;	// class TMsSyncTimer
       
   800 
       
   801 		}	// namespace Omap3530
       
   802 
       
   803 	}	// namespace TexasInstruments
       
   804 
       
   805 
       
   806 // **** TEST CODE ****
       
   807 //#	define HEADER_OMAP3530_TIMER_H_DO_COMPILE_TIME_CHECK_TESTS 1
       
   808 #	ifdef HEADER_OMAP3530_TIMER_H_DO_COMPILE_TIME_CHECK_TESTS
       
   809 		inline void CompileTimeChecks(void)
       
   810 			{
       
   811 			__ASSERT_COMPILE((TI::Omap3530::GPTimer::TIOCP_CFG::T_IDLEMODE::KSmartIdle == (2 << 3))) ;
       
   812 			__ASSERT_COMPILE((TI::Omap3530::GPTimer::TIOCP_CFG::T_CLOCKACTIVITY::KMaintainIfClock == (1 << 8))) ;
       
   813 			__ASSERT_COMPILE((TI::Omap3530::GPTimer::KGPTIMER1_Base == (0xC6318000))) ;
       
   814 			__ASSERT_COMPILE((0)) ;		// Prove that testing is happening
       
   815 			}
       
   816 #	endif
       
   817 #endif	/* ndef HEADER_OMAP3530_TIMER_H_INCLUDED */