include/AT91/Atmel/lib_AT91SAM7X256.h
author edouard
Tue, 06 Oct 2009 17:15:32 +0200
changeset 601 efb6e88ad27f
parent 521 731bbe1b67b4
child 694 8dd1e58b3815
permissions -rw-r--r--
Fixed bug in the AVR-CAN driver: the CAN interrupt changes the
selected message object, but does not revert it before exiting.
521
peter
parents:
diff changeset
     1
//* ----------------------------------------------------------------------------
peter
parents:
diff changeset
     2
//*         ATMEL Microcontroller Software Support  -  ROUSSET  -
peter
parents:
diff changeset
     3
//* ----------------------------------------------------------------------------
peter
parents:
diff changeset
     4
//* DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
peter
parents:
diff changeset
     5
//* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
peter
parents:
diff changeset
     6
//* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
peter
parents:
diff changeset
     7
//* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
peter
parents:
diff changeset
     8
//* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
peter
parents:
diff changeset
     9
//* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
peter
parents:
diff changeset
    10
//* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
peter
parents:
diff changeset
    11
//* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
peter
parents:
diff changeset
    12
//* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
peter
parents:
diff changeset
    13
//* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
peter
parents:
diff changeset
    14
//* ----------------------------------------------------------------------------
peter
parents:
diff changeset
    15
//* File Name           : lib_AT91SAM7X256.h
peter
parents:
diff changeset
    16
//* Object              : AT91SAM7X256 inlined functions
peter
parents:
diff changeset
    17
//* Generated           : AT91 SW Application Group  11/02/2005 (15:17:24)
peter
parents:
diff changeset
    18
//*
peter
parents:
diff changeset
    19
//* CVS Reference       : /lib_dbgu.h/1.1/Thu Aug 25 12:56:22 2005//
peter
parents:
diff changeset
    20
//* CVS Reference       : /lib_pmc_SAM7X.h/1.4/Tue Aug 30 13:00:36 2005//
peter
parents:
diff changeset
    21
//* CVS Reference       : /lib_VREG_6085B.h/1.1/Tue Feb  1 16:20:47 2005//
peter
parents:
diff changeset
    22
//* CVS Reference       : /lib_rstc_6098A.h/1.1/Wed Oct  6 10:39:20 2004//
peter
parents:
diff changeset
    23
//* CVS Reference       : /lib_ssc.h/1.4/Fri Jan 31 12:19:20 2003//
peter
parents:
diff changeset
    24
//* CVS Reference       : /lib_wdtc_6080A.h/1.1/Wed Oct  6 10:38:30 2004//
peter
parents:
diff changeset
    25
//* CVS Reference       : /lib_usart.h/1.5/Thu Nov 21 16:01:54 2002//
peter
parents:
diff changeset
    26
//* CVS Reference       : /lib_spi2.h/1.2/Tue Aug 23 15:37:28 2005//
peter
parents:
diff changeset
    27
//* CVS Reference       : /lib_pitc_6079A.h/1.2/Tue Nov  9 14:43:56 2004//
peter
parents:
diff changeset
    28
//* CVS Reference       : /lib_aic_6075b.h/1.2/Thu Jul  7 07:48:22 2005//
peter
parents:
diff changeset
    29
//* CVS Reference       : /lib_twi.h/1.3/Mon Jul 19 14:27:58 2004//
peter
parents:
diff changeset
    30
//* CVS Reference       : /lib_adc.h/1.6/Fri Oct 17 09:12:38 2003//
peter
parents:
diff changeset
    31
//* CVS Reference       : /lib_rttc_6081A.h/1.1/Wed Oct  6 10:39:38 2004//
peter
parents:
diff changeset
    32
//* CVS Reference       : /lib_udp.h/1.5/Tue Aug 30 12:13:47 2005//
peter
parents:
diff changeset
    33
//* CVS Reference       : /lib_tc_1753b.h/1.1/Fri Jan 31 12:20:02 2003//
peter
parents:
diff changeset
    34
//* CVS Reference       : /lib_MC_SAM7X.h/1.1/Thu Mar 25 15:19:14 2004//
peter
parents:
diff changeset
    35
//* CVS Reference       : /lib_pio.h/1.3/Fri Jan 31 12:18:56 2003//
peter
parents:
diff changeset
    36
//* CVS Reference       : /lib_can_AT91.h/1.5/Tue Aug 23 15:37:07 2005//
peter
parents:
diff changeset
    37
//* CVS Reference       : /lib_PWM_SAM.h/1.3/Thu Jan 22 10:10:50 2004//
peter
parents:
diff changeset
    38
//* CVS Reference       : /lib_pdc.h/1.2/Tue Jul  2 13:29:40 2002//
peter
parents:
diff changeset
    39
//* ----------------------------------------------------------------------------
peter
parents:
diff changeset
    40
peter
parents:
diff changeset
    41
#ifndef lib_AT91SAM7X256_H
peter
parents:
diff changeset
    42
#define lib_AT91SAM7X256_H
peter
parents:
diff changeset
    43
peter
parents:
diff changeset
    44
/* *****************************************************************************
peter
parents:
diff changeset
    45
                SOFTWARE API FOR AIC
peter
parents:
diff changeset
    46
   ***************************************************************************** */
peter
parents:
diff changeset
    47
#define AT91C_AIC_BRANCH_OPCODE ((void (*) ()) 0xE51FFF20) // ldr, pc, [pc, #-&F20]
peter
parents:
diff changeset
    48
peter
parents:
diff changeset
    49
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
    50
//* \fn    AT91F_AIC_ConfigureIt
peter
parents:
diff changeset
    51
//* \brief Interrupt Handler Initialization
peter
parents:
diff changeset
    52
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
    53
__inline unsigned int AT91F_AIC_ConfigureIt (
peter
parents:
diff changeset
    54
	AT91PS_AIC pAic,  // \arg pointer to the AIC registers
peter
parents:
diff changeset
    55
	unsigned int irq_id,     // \arg interrupt number to initialize
peter
parents:
diff changeset
    56
	unsigned int priority,   // \arg priority to give to the interrupt
peter
parents:
diff changeset
    57
	unsigned int src_type,   // \arg activation and sense of activation
peter
parents:
diff changeset
    58
	void (*newHandler) () ) // \arg address of the interrupt handler
peter
parents:
diff changeset
    59
{
peter
parents:
diff changeset
    60
	unsigned int oldHandler;
peter
parents:
diff changeset
    61
    unsigned int mask ;
peter
parents:
diff changeset
    62
peter
parents:
diff changeset
    63
    oldHandler = pAic->AIC_SVR[irq_id];
peter
parents:
diff changeset
    64
peter
parents:
diff changeset
    65
    mask = 0x1 << irq_id ;
peter
parents:
diff changeset
    66
    //* Disable the interrupt on the interrupt controller
peter
parents:
diff changeset
    67
    pAic->AIC_IDCR = mask ;
peter
parents:
diff changeset
    68
    //* Save the interrupt handler routine pointer and the interrupt priority
peter
parents:
diff changeset
    69
    pAic->AIC_SVR[irq_id] = (unsigned int) newHandler ;
peter
parents:
diff changeset
    70
    //* Store the Source Mode Register
peter
parents:
diff changeset
    71
    pAic->AIC_SMR[irq_id] = src_type | priority  ;
peter
parents:
diff changeset
    72
    //* Clear the interrupt on the interrupt controller
peter
parents:
diff changeset
    73
    pAic->AIC_ICCR = mask ;
peter
parents:
diff changeset
    74
peter
parents:
diff changeset
    75
	return oldHandler;
peter
parents:
diff changeset
    76
}
peter
parents:
diff changeset
    77
peter
parents:
diff changeset
    78
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
    79
//* \fn    AT91F_AIC_EnableIt
peter
parents:
diff changeset
    80
//* \brief Enable corresponding IT number
peter
parents:
diff changeset
    81
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
    82
__inline void AT91F_AIC_EnableIt (
peter
parents:
diff changeset
    83
	AT91PS_AIC pAic,      // \arg pointer to the AIC registers
peter
parents:
diff changeset
    84
	unsigned int irq_id ) // \arg interrupt number to initialize
peter
parents:
diff changeset
    85
{
peter
parents:
diff changeset
    86
    //* Enable the interrupt on the interrupt controller
peter
parents:
diff changeset
    87
    pAic->AIC_IECR = 0x1 << irq_id ;
peter
parents:
diff changeset
    88
}
peter
parents:
diff changeset
    89
peter
parents:
diff changeset
    90
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
    91
//* \fn    AT91F_AIC_DisableIt
peter
parents:
diff changeset
    92
//* \brief Disable corresponding IT number
peter
parents:
diff changeset
    93
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
    94
__inline void AT91F_AIC_DisableIt (
peter
parents:
diff changeset
    95
	AT91PS_AIC pAic,      // \arg pointer to the AIC registers
peter
parents:
diff changeset
    96
	unsigned int irq_id ) // \arg interrupt number to initialize
peter
parents:
diff changeset
    97
{
peter
parents:
diff changeset
    98
    unsigned int mask = 0x1 << irq_id;
peter
parents:
diff changeset
    99
    //* Disable the interrupt on the interrupt controller
peter
parents:
diff changeset
   100
    pAic->AIC_IDCR = mask ;
peter
parents:
diff changeset
   101
    //* Clear the interrupt on the Interrupt Controller ( if one is pending )
peter
parents:
diff changeset
   102
    pAic->AIC_ICCR = mask ;
peter
parents:
diff changeset
   103
}
peter
parents:
diff changeset
   104
peter
parents:
diff changeset
   105
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   106
//* \fn    AT91F_AIC_ClearIt
peter
parents:
diff changeset
   107
//* \brief Clear corresponding IT number
peter
parents:
diff changeset
   108
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   109
__inline void AT91F_AIC_ClearIt (
peter
parents:
diff changeset
   110
	AT91PS_AIC pAic,     // \arg pointer to the AIC registers
peter
parents:
diff changeset
   111
	unsigned int irq_id) // \arg interrupt number to initialize
peter
parents:
diff changeset
   112
{
peter
parents:
diff changeset
   113
    //* Clear the interrupt on the Interrupt Controller ( if one is pending )
peter
parents:
diff changeset
   114
    pAic->AIC_ICCR = (0x1 << irq_id);
peter
parents:
diff changeset
   115
}
peter
parents:
diff changeset
   116
peter
parents:
diff changeset
   117
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   118
//* \fn    AT91F_AIC_AcknowledgeIt
peter
parents:
diff changeset
   119
//* \brief Acknowledge corresponding IT number
peter
parents:
diff changeset
   120
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   121
__inline void AT91F_AIC_AcknowledgeIt (
peter
parents:
diff changeset
   122
	AT91PS_AIC pAic)     // \arg pointer to the AIC registers
peter
parents:
diff changeset
   123
{
peter
parents:
diff changeset
   124
    pAic->AIC_EOICR = pAic->AIC_EOICR;
peter
parents:
diff changeset
   125
}
peter
parents:
diff changeset
   126
peter
parents:
diff changeset
   127
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   128
//* \fn    AT91F_AIC_SetExceptionVector
peter
parents:
diff changeset
   129
//* \brief Configure vector handler
peter
parents:
diff changeset
   130
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   131
__inline unsigned int  AT91F_AIC_SetExceptionVector (
peter
parents:
diff changeset
   132
	unsigned int *pVector, // \arg pointer to the AIC registers
peter
parents:
diff changeset
   133
	void (*Handler) () )   // \arg Interrupt Handler
peter
parents:
diff changeset
   134
{
peter
parents:
diff changeset
   135
	unsigned int oldVector = *pVector;
peter
parents:
diff changeset
   136
peter
parents:
diff changeset
   137
	if ((unsigned int) Handler == (unsigned int) AT91C_AIC_BRANCH_OPCODE)
peter
parents:
diff changeset
   138
		*pVector = (unsigned int) AT91C_AIC_BRANCH_OPCODE;
peter
parents:
diff changeset
   139
	else
peter
parents:
diff changeset
   140
		*pVector = (((((unsigned int) Handler) - ((unsigned int) pVector) - 0x8) >> 2) & 0x00FFFFFF) | 0xEA000000;
peter
parents:
diff changeset
   141
peter
parents:
diff changeset
   142
	return oldVector;
peter
parents:
diff changeset
   143
}
peter
parents:
diff changeset
   144
peter
parents:
diff changeset
   145
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   146
//* \fn    AT91F_AIC_Trig
peter
parents:
diff changeset
   147
//* \brief Trig an IT
peter
parents:
diff changeset
   148
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   149
__inline void  AT91F_AIC_Trig (
peter
parents:
diff changeset
   150
	AT91PS_AIC pAic,     // \arg pointer to the AIC registers
peter
parents:
diff changeset
   151
	unsigned int irq_id) // \arg interrupt number
peter
parents:
diff changeset
   152
{
peter
parents:
diff changeset
   153
	pAic->AIC_ISCR = (0x1 << irq_id) ;
peter
parents:
diff changeset
   154
}
peter
parents:
diff changeset
   155
peter
parents:
diff changeset
   156
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   157
//* \fn    AT91F_AIC_IsActive
peter
parents:
diff changeset
   158
//* \brief Test if an IT is active
peter
parents:
diff changeset
   159
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   160
__inline unsigned int  AT91F_AIC_IsActive (
peter
parents:
diff changeset
   161
	AT91PS_AIC pAic,     // \arg pointer to the AIC registers
peter
parents:
diff changeset
   162
	unsigned int irq_id) // \arg Interrupt Number
peter
parents:
diff changeset
   163
{
peter
parents:
diff changeset
   164
	return (pAic->AIC_ISR & (0x1 << irq_id));
peter
parents:
diff changeset
   165
}
peter
parents:
diff changeset
   166
peter
parents:
diff changeset
   167
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   168
//* \fn    AT91F_AIC_IsPending
peter
parents:
diff changeset
   169
//* \brief Test if an IT is pending
peter
parents:
diff changeset
   170
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   171
__inline unsigned int  AT91F_AIC_IsPending (
peter
parents:
diff changeset
   172
	AT91PS_AIC pAic,     // \arg pointer to the AIC registers
peter
parents:
diff changeset
   173
	unsigned int irq_id) // \arg Interrupt Number
peter
parents:
diff changeset
   174
{
peter
parents:
diff changeset
   175
	return (pAic->AIC_IPR & (0x1 << irq_id));
peter
parents:
diff changeset
   176
}
peter
parents:
diff changeset
   177
peter
parents:
diff changeset
   178
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   179
//* \fn    AT91F_AIC_Open
peter
parents:
diff changeset
   180
//* \brief Set exception vectors and AIC registers to default values
peter
parents:
diff changeset
   181
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   182
__inline void AT91F_AIC_Open(
peter
parents:
diff changeset
   183
	AT91PS_AIC pAic,        // \arg pointer to the AIC registers
peter
parents:
diff changeset
   184
	void (*IrqHandler) (),  // \arg Default IRQ vector exception
peter
parents:
diff changeset
   185
	void (*FiqHandler) (),  // \arg Default FIQ vector exception
peter
parents:
diff changeset
   186
	void (*DefaultHandler)  (), // \arg Default Handler set in ISR
peter
parents:
diff changeset
   187
	void (*SpuriousHandler) (), // \arg Default Spurious Handler
peter
parents:
diff changeset
   188
	unsigned int protectMode)   // \arg Debug Control Register
peter
parents:
diff changeset
   189
{
peter
parents:
diff changeset
   190
	int i;
peter
parents:
diff changeset
   191
peter
parents:
diff changeset
   192
	// Disable all interrupts and set IVR to the default handler
peter
parents:
diff changeset
   193
	for (i = 0; i < 32; ++i) {
peter
parents:
diff changeset
   194
		AT91F_AIC_DisableIt(pAic, i);
peter
parents:
diff changeset
   195
		AT91F_AIC_ConfigureIt(pAic, i, AT91C_AIC_PRIOR_LOWEST, AT91C_AIC_SRCTYPE_HIGH_LEVEL, DefaultHandler);
peter
parents:
diff changeset
   196
	}
peter
parents:
diff changeset
   197
peter
parents:
diff changeset
   198
	// Set the IRQ exception vector
peter
parents:
diff changeset
   199
	AT91F_AIC_SetExceptionVector((unsigned int *) 0x18, IrqHandler);
peter
parents:
diff changeset
   200
	// Set the Fast Interrupt exception vector
peter
parents:
diff changeset
   201
	AT91F_AIC_SetExceptionVector((unsigned int *) 0x1C, FiqHandler);
peter
parents:
diff changeset
   202
peter
parents:
diff changeset
   203
	pAic->AIC_SPU = (unsigned int) SpuriousHandler;
peter
parents:
diff changeset
   204
	pAic->AIC_DCR = protectMode;
peter
parents:
diff changeset
   205
}
peter
parents:
diff changeset
   206
/* *****************************************************************************
peter
parents:
diff changeset
   207
                SOFTWARE API FOR PDC
peter
parents:
diff changeset
   208
   ***************************************************************************** */
peter
parents:
diff changeset
   209
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   210
//* \fn    AT91F_PDC_SetNextRx
peter
parents:
diff changeset
   211
//* \brief Set the next receive transfer descriptor
peter
parents:
diff changeset
   212
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   213
__inline void AT91F_PDC_SetNextRx (
peter
parents:
diff changeset
   214
	AT91PS_PDC pPDC,     // \arg pointer to a PDC controller
peter
parents:
diff changeset
   215
	char *address,       // \arg address to the next bloc to be received
peter
parents:
diff changeset
   216
	unsigned int bytes)  // \arg number of bytes to be received
peter
parents:
diff changeset
   217
{
peter
parents:
diff changeset
   218
	pPDC->PDC_RNPR = (unsigned int) address;
peter
parents:
diff changeset
   219
	pPDC->PDC_RNCR = bytes;
peter
parents:
diff changeset
   220
}
peter
parents:
diff changeset
   221
peter
parents:
diff changeset
   222
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   223
//* \fn    AT91F_PDC_SetNextTx
peter
parents:
diff changeset
   224
//* \brief Set the next transmit transfer descriptor
peter
parents:
diff changeset
   225
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   226
__inline void AT91F_PDC_SetNextTx (
peter
parents:
diff changeset
   227
	AT91PS_PDC pPDC,       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   228
	char *address,         // \arg address to the next bloc to be transmitted
peter
parents:
diff changeset
   229
	unsigned int bytes)    // \arg number of bytes to be transmitted
peter
parents:
diff changeset
   230
{
peter
parents:
diff changeset
   231
	pPDC->PDC_TNPR = (unsigned int) address;
peter
parents:
diff changeset
   232
	pPDC->PDC_TNCR = bytes;
peter
parents:
diff changeset
   233
}
peter
parents:
diff changeset
   234
peter
parents:
diff changeset
   235
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   236
//* \fn    AT91F_PDC_SetRx
peter
parents:
diff changeset
   237
//* \brief Set the receive transfer descriptor
peter
parents:
diff changeset
   238
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   239
__inline void AT91F_PDC_SetRx (
peter
parents:
diff changeset
   240
	AT91PS_PDC pPDC,       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   241
	char *address,         // \arg address to the next bloc to be received
peter
parents:
diff changeset
   242
	unsigned int bytes)    // \arg number of bytes to be received
peter
parents:
diff changeset
   243
{
peter
parents:
diff changeset
   244
	pPDC->PDC_RPR = (unsigned int) address;
peter
parents:
diff changeset
   245
	pPDC->PDC_RCR = bytes;
peter
parents:
diff changeset
   246
}
peter
parents:
diff changeset
   247
peter
parents:
diff changeset
   248
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   249
//* \fn    AT91F_PDC_SetTx
peter
parents:
diff changeset
   250
//* \brief Set the transmit transfer descriptor
peter
parents:
diff changeset
   251
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   252
__inline void AT91F_PDC_SetTx (
peter
parents:
diff changeset
   253
	AT91PS_PDC pPDC,       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   254
	char *address,         // \arg address to the next bloc to be transmitted
peter
parents:
diff changeset
   255
	unsigned int bytes)    // \arg number of bytes to be transmitted
peter
parents:
diff changeset
   256
{
peter
parents:
diff changeset
   257
	pPDC->PDC_TPR = (unsigned int) address;
peter
parents:
diff changeset
   258
	pPDC->PDC_TCR = bytes;
peter
parents:
diff changeset
   259
}
peter
parents:
diff changeset
   260
peter
parents:
diff changeset
   261
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   262
//* \fn    AT91F_PDC_EnableTx
peter
parents:
diff changeset
   263
//* \brief Enable transmit
peter
parents:
diff changeset
   264
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   265
__inline void AT91F_PDC_EnableTx (
peter
parents:
diff changeset
   266
	AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   267
{
peter
parents:
diff changeset
   268
	pPDC->PDC_PTCR = AT91C_PDC_TXTEN;
peter
parents:
diff changeset
   269
}
peter
parents:
diff changeset
   270
peter
parents:
diff changeset
   271
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   272
//* \fn    AT91F_PDC_EnableRx
peter
parents:
diff changeset
   273
//* \brief Enable receive
peter
parents:
diff changeset
   274
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   275
__inline void AT91F_PDC_EnableRx (
peter
parents:
diff changeset
   276
	AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   277
{
peter
parents:
diff changeset
   278
	pPDC->PDC_PTCR = AT91C_PDC_RXTEN;
peter
parents:
diff changeset
   279
}
peter
parents:
diff changeset
   280
peter
parents:
diff changeset
   281
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   282
//* \fn    AT91F_PDC_DisableTx
peter
parents:
diff changeset
   283
//* \brief Disable transmit
peter
parents:
diff changeset
   284
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   285
__inline void AT91F_PDC_DisableTx (
peter
parents:
diff changeset
   286
	AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   287
{
peter
parents:
diff changeset
   288
	pPDC->PDC_PTCR = AT91C_PDC_TXTDIS;
peter
parents:
diff changeset
   289
}
peter
parents:
diff changeset
   290
peter
parents:
diff changeset
   291
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   292
//* \fn    AT91F_PDC_DisableRx
peter
parents:
diff changeset
   293
//* \brief Disable receive
peter
parents:
diff changeset
   294
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   295
__inline void AT91F_PDC_DisableRx (
peter
parents:
diff changeset
   296
	AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   297
{
peter
parents:
diff changeset
   298
	pPDC->PDC_PTCR = AT91C_PDC_RXTDIS;
peter
parents:
diff changeset
   299
}
peter
parents:
diff changeset
   300
peter
parents:
diff changeset
   301
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   302
//* \fn    AT91F_PDC_IsTxEmpty
peter
parents:
diff changeset
   303
//* \brief Test if the current transfer descriptor has been sent
peter
parents:
diff changeset
   304
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   305
__inline int AT91F_PDC_IsTxEmpty ( // \return return 1 if transfer is complete
peter
parents:
diff changeset
   306
	AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   307
{
peter
parents:
diff changeset
   308
	return !(pPDC->PDC_TCR);
peter
parents:
diff changeset
   309
}
peter
parents:
diff changeset
   310
peter
parents:
diff changeset
   311
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   312
//* \fn    AT91F_PDC_IsNextTxEmpty
peter
parents:
diff changeset
   313
//* \brief Test if the next transfer descriptor has been moved to the current td
peter
parents:
diff changeset
   314
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   315
__inline int AT91F_PDC_IsNextTxEmpty ( // \return return 1 if transfer is complete
peter
parents:
diff changeset
   316
	AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   317
{
peter
parents:
diff changeset
   318
	return !(pPDC->PDC_TNCR);
peter
parents:
diff changeset
   319
}
peter
parents:
diff changeset
   320
peter
parents:
diff changeset
   321
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   322
//* \fn    AT91F_PDC_IsRxEmpty
peter
parents:
diff changeset
   323
//* \brief Test if the current transfer descriptor has been filled
peter
parents:
diff changeset
   324
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   325
__inline int AT91F_PDC_IsRxEmpty ( // \return return 1 if transfer is complete
peter
parents:
diff changeset
   326
	AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   327
{
peter
parents:
diff changeset
   328
	return !(pPDC->PDC_RCR);
peter
parents:
diff changeset
   329
}
peter
parents:
diff changeset
   330
peter
parents:
diff changeset
   331
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   332
//* \fn    AT91F_PDC_IsNextRxEmpty
peter
parents:
diff changeset
   333
//* \brief Test if the next transfer descriptor has been moved to the current td
peter
parents:
diff changeset
   334
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   335
__inline int AT91F_PDC_IsNextRxEmpty ( // \return return 1 if transfer is complete
peter
parents:
diff changeset
   336
	AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   337
{
peter
parents:
diff changeset
   338
	return !(pPDC->PDC_RNCR);
peter
parents:
diff changeset
   339
}
peter
parents:
diff changeset
   340
peter
parents:
diff changeset
   341
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   342
//* \fn    AT91F_PDC_Open
peter
parents:
diff changeset
   343
//* \brief Open PDC: disable TX and RX reset transfer descriptors, re-enable RX and TX
peter
parents:
diff changeset
   344
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   345
__inline void AT91F_PDC_Open (
peter
parents:
diff changeset
   346
	AT91PS_PDC pPDC)       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   347
{
peter
parents:
diff changeset
   348
    //* Disable the RX and TX PDC transfer requests
peter
parents:
diff changeset
   349
	AT91F_PDC_DisableRx(pPDC);
peter
parents:
diff changeset
   350
	AT91F_PDC_DisableTx(pPDC);
peter
parents:
diff changeset
   351
peter
parents:
diff changeset
   352
	//* Reset all Counter register Next buffer first
peter
parents:
diff changeset
   353
	AT91F_PDC_SetNextTx(pPDC, (char *) 0, 0);
peter
parents:
diff changeset
   354
	AT91F_PDC_SetNextRx(pPDC, (char *) 0, 0);
peter
parents:
diff changeset
   355
	AT91F_PDC_SetTx(pPDC, (char *) 0, 0);
peter
parents:
diff changeset
   356
	AT91F_PDC_SetRx(pPDC, (char *) 0, 0);
peter
parents:
diff changeset
   357
peter
parents:
diff changeset
   358
    //* Enable the RX and TX PDC transfer requests
peter
parents:
diff changeset
   359
	AT91F_PDC_EnableRx(pPDC);
peter
parents:
diff changeset
   360
	AT91F_PDC_EnableTx(pPDC);
peter
parents:
diff changeset
   361
}
peter
parents:
diff changeset
   362
peter
parents:
diff changeset
   363
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   364
//* \fn    AT91F_PDC_Close
peter
parents:
diff changeset
   365
//* \brief Close PDC: disable TX and RX reset transfer descriptors
peter
parents:
diff changeset
   366
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   367
__inline void AT91F_PDC_Close (
peter
parents:
diff changeset
   368
	AT91PS_PDC pPDC)       // \arg pointer to a PDC controller
peter
parents:
diff changeset
   369
{
peter
parents:
diff changeset
   370
    //* Disable the RX and TX PDC transfer requests
peter
parents:
diff changeset
   371
	AT91F_PDC_DisableRx(pPDC);
peter
parents:
diff changeset
   372
	AT91F_PDC_DisableTx(pPDC);
peter
parents:
diff changeset
   373
peter
parents:
diff changeset
   374
	//* Reset all Counter register Next buffer first
peter
parents:
diff changeset
   375
	AT91F_PDC_SetNextTx(pPDC, (char *) 0, 0);
peter
parents:
diff changeset
   376
	AT91F_PDC_SetNextRx(pPDC, (char *) 0, 0);
peter
parents:
diff changeset
   377
	AT91F_PDC_SetTx(pPDC, (char *) 0, 0);
peter
parents:
diff changeset
   378
	AT91F_PDC_SetRx(pPDC, (char *) 0, 0);
peter
parents:
diff changeset
   379
peter
parents:
diff changeset
   380
}
peter
parents:
diff changeset
   381
peter
parents:
diff changeset
   382
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   383
//* \fn    AT91F_PDC_SendFrame
peter
parents:
diff changeset
   384
//* \brief Close PDC: disable TX and RX reset transfer descriptors
peter
parents:
diff changeset
   385
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   386
__inline unsigned int AT91F_PDC_SendFrame(
peter
parents:
diff changeset
   387
	AT91PS_PDC pPDC,
peter
parents:
diff changeset
   388
	char *pBuffer,
peter
parents:
diff changeset
   389
	unsigned int szBuffer,
peter
parents:
diff changeset
   390
	char *pNextBuffer,
peter
parents:
diff changeset
   391
	unsigned int szNextBuffer )
peter
parents:
diff changeset
   392
{
peter
parents:
diff changeset
   393
	if (AT91F_PDC_IsTxEmpty(pPDC)) {
peter
parents:
diff changeset
   394
		//* Buffer and next buffer can be initialized
peter
parents:
diff changeset
   395
		AT91F_PDC_SetTx(pPDC, pBuffer, szBuffer);
peter
parents:
diff changeset
   396
		AT91F_PDC_SetNextTx(pPDC, pNextBuffer, szNextBuffer);
peter
parents:
diff changeset
   397
		return 2;
peter
parents:
diff changeset
   398
	}
peter
parents:
diff changeset
   399
	else if (AT91F_PDC_IsNextTxEmpty(pPDC)) {
peter
parents:
diff changeset
   400
		//* Only one buffer can be initialized
peter
parents:
diff changeset
   401
		AT91F_PDC_SetNextTx(pPDC, pBuffer, szBuffer);
peter
parents:
diff changeset
   402
		return 1;
peter
parents:
diff changeset
   403
	}
peter
parents:
diff changeset
   404
	else {
peter
parents:
diff changeset
   405
		//* All buffer are in use...
peter
parents:
diff changeset
   406
		return 0;
peter
parents:
diff changeset
   407
	}
peter
parents:
diff changeset
   408
}
peter
parents:
diff changeset
   409
peter
parents:
diff changeset
   410
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   411
//* \fn    AT91F_PDC_ReceiveFrame
peter
parents:
diff changeset
   412
//* \brief Close PDC: disable TX and RX reset transfer descriptors
peter
parents:
diff changeset
   413
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   414
__inline unsigned int AT91F_PDC_ReceiveFrame (
peter
parents:
diff changeset
   415
	AT91PS_PDC pPDC,
peter
parents:
diff changeset
   416
	char *pBuffer,
peter
parents:
diff changeset
   417
	unsigned int szBuffer,
peter
parents:
diff changeset
   418
	char *pNextBuffer,
peter
parents:
diff changeset
   419
	unsigned int szNextBuffer )
peter
parents:
diff changeset
   420
{
peter
parents:
diff changeset
   421
	if (AT91F_PDC_IsRxEmpty(pPDC)) {
peter
parents:
diff changeset
   422
		//* Buffer and next buffer can be initialized
peter
parents:
diff changeset
   423
		AT91F_PDC_SetRx(pPDC, pBuffer, szBuffer);
peter
parents:
diff changeset
   424
		AT91F_PDC_SetNextRx(pPDC, pNextBuffer, szNextBuffer);
peter
parents:
diff changeset
   425
		return 2;
peter
parents:
diff changeset
   426
	}
peter
parents:
diff changeset
   427
	else if (AT91F_PDC_IsNextRxEmpty(pPDC)) {
peter
parents:
diff changeset
   428
		//* Only one buffer can be initialized
peter
parents:
diff changeset
   429
		AT91F_PDC_SetNextRx(pPDC, pBuffer, szBuffer);
peter
parents:
diff changeset
   430
		return 1;
peter
parents:
diff changeset
   431
	}
peter
parents:
diff changeset
   432
	else {
peter
parents:
diff changeset
   433
		//* All buffer are in use...
peter
parents:
diff changeset
   434
		return 0;
peter
parents:
diff changeset
   435
	}
peter
parents:
diff changeset
   436
}
peter
parents:
diff changeset
   437
/* *****************************************************************************
peter
parents:
diff changeset
   438
                SOFTWARE API FOR DBGU
peter
parents:
diff changeset
   439
   ***************************************************************************** */
peter
parents:
diff changeset
   440
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   441
//* \fn    AT91F_DBGU_InterruptEnable
peter
parents:
diff changeset
   442
//* \brief Enable DBGU Interrupt
peter
parents:
diff changeset
   443
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   444
__inline void AT91F_DBGU_InterruptEnable(
peter
parents:
diff changeset
   445
        AT91PS_DBGU pDbgu,   // \arg  pointer to a DBGU controller
peter
parents:
diff changeset
   446
        unsigned int flag) // \arg  dbgu interrupt to be enabled
peter
parents:
diff changeset
   447
{
peter
parents:
diff changeset
   448
        pDbgu->DBGU_IER = flag;
peter
parents:
diff changeset
   449
}
peter
parents:
diff changeset
   450
peter
parents:
diff changeset
   451
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   452
//* \fn    AT91F_DBGU_InterruptDisable
peter
parents:
diff changeset
   453
//* \brief Disable DBGU Interrupt
peter
parents:
diff changeset
   454
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   455
__inline void AT91F_DBGU_InterruptDisable(
peter
parents:
diff changeset
   456
        AT91PS_DBGU pDbgu,   // \arg  pointer to a DBGU controller
peter
parents:
diff changeset
   457
        unsigned int flag) // \arg  dbgu interrupt to be disabled
peter
parents:
diff changeset
   458
{
peter
parents:
diff changeset
   459
        pDbgu->DBGU_IDR = flag;
peter
parents:
diff changeset
   460
}
peter
parents:
diff changeset
   461
peter
parents:
diff changeset
   462
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   463
//* \fn    AT91F_DBGU_GetInterruptMaskStatus
peter
parents:
diff changeset
   464
//* \brief Return DBGU Interrupt Mask Status
peter
parents:
diff changeset
   465
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   466
__inline unsigned int AT91F_DBGU_GetInterruptMaskStatus( // \return DBGU Interrupt Mask Status
peter
parents:
diff changeset
   467
        AT91PS_DBGU pDbgu) // \arg  pointer to a DBGU controller
peter
parents:
diff changeset
   468
{
peter
parents:
diff changeset
   469
        return pDbgu->DBGU_IMR;
peter
parents:
diff changeset
   470
}
peter
parents:
diff changeset
   471
peter
parents:
diff changeset
   472
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   473
//* \fn    AT91F_DBGU_IsInterruptMasked
peter
parents:
diff changeset
   474
//* \brief Test if DBGU Interrupt is Masked
peter
parents:
diff changeset
   475
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   476
__inline int AT91F_DBGU_IsInterruptMasked(
peter
parents:
diff changeset
   477
        AT91PS_DBGU pDbgu,   // \arg  pointer to a DBGU controller
peter
parents:
diff changeset
   478
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   479
{
peter
parents:
diff changeset
   480
        return (AT91F_DBGU_GetInterruptMaskStatus(pDbgu) & flag);
peter
parents:
diff changeset
   481
}
peter
parents:
diff changeset
   482
peter
parents:
diff changeset
   483
/* *****************************************************************************
peter
parents:
diff changeset
   484
                SOFTWARE API FOR PIO
peter
parents:
diff changeset
   485
   ***************************************************************************** */
peter
parents:
diff changeset
   486
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   487
//* \fn    AT91F_PIO_CfgPeriph
peter
parents:
diff changeset
   488
//* \brief Enable pins to be drived by peripheral
peter
parents:
diff changeset
   489
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   490
__inline void AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
   491
	AT91PS_PIO pPio,             // \arg pointer to a PIO controller
peter
parents:
diff changeset
   492
	unsigned int periphAEnable,  // \arg PERIPH A to enable
peter
parents:
diff changeset
   493
	unsigned int periphBEnable)  // \arg PERIPH B to enable
peter
parents:
diff changeset
   494
peter
parents:
diff changeset
   495
{
peter
parents:
diff changeset
   496
	pPio->PIO_ASR = periphAEnable;
peter
parents:
diff changeset
   497
	pPio->PIO_BSR = periphBEnable;
peter
parents:
diff changeset
   498
	pPio->PIO_PDR = (periphAEnable | periphBEnable); // Set in Periph mode
peter
parents:
diff changeset
   499
}
peter
parents:
diff changeset
   500
peter
parents:
diff changeset
   501
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   502
//* \fn    AT91F_PIO_CfgOutput
peter
parents:
diff changeset
   503
//* \brief Enable PIO in output mode
peter
parents:
diff changeset
   504
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   505
__inline void AT91F_PIO_CfgOutput(
peter
parents:
diff changeset
   506
	AT91PS_PIO pPio,             // \arg pointer to a PIO controller
peter
parents:
diff changeset
   507
	unsigned int pioEnable)      // \arg PIO to be enabled
peter
parents:
diff changeset
   508
{
peter
parents:
diff changeset
   509
	pPio->PIO_PER = pioEnable; // Set in PIO mode
peter
parents:
diff changeset
   510
	pPio->PIO_OER = pioEnable; // Configure in Output
peter
parents:
diff changeset
   511
}
peter
parents:
diff changeset
   512
peter
parents:
diff changeset
   513
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   514
//* \fn    AT91F_PIO_CfgInput
peter
parents:
diff changeset
   515
//* \brief Enable PIO in input mode
peter
parents:
diff changeset
   516
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   517
__inline void AT91F_PIO_CfgInput(
peter
parents:
diff changeset
   518
	AT91PS_PIO pPio,             // \arg pointer to a PIO controller
peter
parents:
diff changeset
   519
	unsigned int inputEnable)      // \arg PIO to be enabled
peter
parents:
diff changeset
   520
{
peter
parents:
diff changeset
   521
	// Disable output
peter
parents:
diff changeset
   522
	pPio->PIO_ODR  = inputEnable;
peter
parents:
diff changeset
   523
	pPio->PIO_PER  = inputEnable;
peter
parents:
diff changeset
   524
}
peter
parents:
diff changeset
   525
peter
parents:
diff changeset
   526
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   527
//* \fn    AT91F_PIO_CfgOpendrain
peter
parents:
diff changeset
   528
//* \brief Configure PIO in open drain
peter
parents:
diff changeset
   529
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   530
__inline void AT91F_PIO_CfgOpendrain(
peter
parents:
diff changeset
   531
	AT91PS_PIO pPio,             // \arg pointer to a PIO controller
peter
parents:
diff changeset
   532
	unsigned int multiDrvEnable) // \arg pio to be configured in open drain
peter
parents:
diff changeset
   533
{
peter
parents:
diff changeset
   534
	// Configure the multi-drive option
peter
parents:
diff changeset
   535
	pPio->PIO_MDDR = ~multiDrvEnable;
peter
parents:
diff changeset
   536
	pPio->PIO_MDER = multiDrvEnable;
peter
parents:
diff changeset
   537
}
peter
parents:
diff changeset
   538
peter
parents:
diff changeset
   539
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   540
//* \fn    AT91F_PIO_CfgPullup
peter
parents:
diff changeset
   541
//* \brief Enable pullup on PIO
peter
parents:
diff changeset
   542
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   543
__inline void AT91F_PIO_CfgPullup(
peter
parents:
diff changeset
   544
	AT91PS_PIO pPio,             // \arg pointer to a PIO controller
peter
parents:
diff changeset
   545
	unsigned int pullupEnable)   // \arg enable pullup on PIO
peter
parents:
diff changeset
   546
{
peter
parents:
diff changeset
   547
		// Connect or not Pullup
peter
parents:
diff changeset
   548
	pPio->PIO_PPUDR = ~pullupEnable;
peter
parents:
diff changeset
   549
	pPio->PIO_PPUER = pullupEnable;
peter
parents:
diff changeset
   550
}
peter
parents:
diff changeset
   551
peter
parents:
diff changeset
   552
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   553
//* \fn    AT91F_PIO_CfgDirectDrive
peter
parents:
diff changeset
   554
//* \brief Enable direct drive on PIO
peter
parents:
diff changeset
   555
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   556
__inline void AT91F_PIO_CfgDirectDrive(
peter
parents:
diff changeset
   557
	AT91PS_PIO pPio,             // \arg pointer to a PIO controller
peter
parents:
diff changeset
   558
	unsigned int directDrive)    // \arg PIO to be configured with direct drive
peter
parents:
diff changeset
   559
peter
parents:
diff changeset
   560
{
peter
parents:
diff changeset
   561
	// Configure the Direct Drive
peter
parents:
diff changeset
   562
	pPio->PIO_OWDR  = ~directDrive;
peter
parents:
diff changeset
   563
	pPio->PIO_OWER  = directDrive;
peter
parents:
diff changeset
   564
}
peter
parents:
diff changeset
   565
peter
parents:
diff changeset
   566
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   567
//* \fn    AT91F_PIO_CfgInputFilter
peter
parents:
diff changeset
   568
//* \brief Enable input filter on input PIO
peter
parents:
diff changeset
   569
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   570
__inline void AT91F_PIO_CfgInputFilter(
peter
parents:
diff changeset
   571
	AT91PS_PIO pPio,             // \arg pointer to a PIO controller
peter
parents:
diff changeset
   572
	unsigned int inputFilter)    // \arg PIO to be configured with input filter
peter
parents:
diff changeset
   573
peter
parents:
diff changeset
   574
{
peter
parents:
diff changeset
   575
	// Configure the Direct Drive
peter
parents:
diff changeset
   576
	pPio->PIO_IFDR  = ~inputFilter;
peter
parents:
diff changeset
   577
	pPio->PIO_IFER  = inputFilter;
peter
parents:
diff changeset
   578
}
peter
parents:
diff changeset
   579
peter
parents:
diff changeset
   580
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   581
//* \fn    AT91F_PIO_GetInput
peter
parents:
diff changeset
   582
//* \brief Return PIO input value
peter
parents:
diff changeset
   583
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   584
__inline unsigned int AT91F_PIO_GetInput( // \return PIO input
peter
parents:
diff changeset
   585
	AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   586
{
peter
parents:
diff changeset
   587
	return pPio->PIO_PDSR;
peter
parents:
diff changeset
   588
}
peter
parents:
diff changeset
   589
peter
parents:
diff changeset
   590
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   591
//* \fn    AT91F_PIO_IsInputSet
peter
parents:
diff changeset
   592
//* \brief Test if PIO is input flag is active
peter
parents:
diff changeset
   593
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   594
__inline int AT91F_PIO_IsInputSet(
peter
parents:
diff changeset
   595
	AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   596
	unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   597
{
peter
parents:
diff changeset
   598
	return (AT91F_PIO_GetInput(pPio) & flag);
peter
parents:
diff changeset
   599
}
peter
parents:
diff changeset
   600
peter
parents:
diff changeset
   601
peter
parents:
diff changeset
   602
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   603
//* \fn    AT91F_PIO_SetOutput
peter
parents:
diff changeset
   604
//* \brief Set to 1 output PIO
peter
parents:
diff changeset
   605
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   606
__inline void AT91F_PIO_SetOutput(
peter
parents:
diff changeset
   607
	AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   608
	unsigned int flag) // \arg  output to be set
peter
parents:
diff changeset
   609
{
peter
parents:
diff changeset
   610
	pPio->PIO_SODR = flag;
peter
parents:
diff changeset
   611
}
peter
parents:
diff changeset
   612
peter
parents:
diff changeset
   613
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   614
//* \fn    AT91F_PIO_ClearOutput
peter
parents:
diff changeset
   615
//* \brief Set to 0 output PIO
peter
parents:
diff changeset
   616
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   617
__inline void AT91F_PIO_ClearOutput(
peter
parents:
diff changeset
   618
	AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   619
	unsigned int flag) // \arg  output to be cleared
peter
parents:
diff changeset
   620
{
peter
parents:
diff changeset
   621
	pPio->PIO_CODR = flag;
peter
parents:
diff changeset
   622
}
peter
parents:
diff changeset
   623
peter
parents:
diff changeset
   624
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   625
//* \fn    AT91F_PIO_ForceOutput
peter
parents:
diff changeset
   626
//* \brief Force output when Direct drive option is enabled
peter
parents:
diff changeset
   627
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   628
__inline void AT91F_PIO_ForceOutput(
peter
parents:
diff changeset
   629
	AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   630
	unsigned int flag) // \arg  output to be forced
peter
parents:
diff changeset
   631
{
peter
parents:
diff changeset
   632
	pPio->PIO_ODSR = flag;
peter
parents:
diff changeset
   633
}
peter
parents:
diff changeset
   634
peter
parents:
diff changeset
   635
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   636
//* \fn    AT91F_PIO_Enable
peter
parents:
diff changeset
   637
//* \brief Enable PIO
peter
parents:
diff changeset
   638
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   639
__inline void AT91F_PIO_Enable(
peter
parents:
diff changeset
   640
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   641
        unsigned int flag) // \arg  pio to be enabled
peter
parents:
diff changeset
   642
{
peter
parents:
diff changeset
   643
        pPio->PIO_PER = flag;
peter
parents:
diff changeset
   644
}
peter
parents:
diff changeset
   645
peter
parents:
diff changeset
   646
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   647
//* \fn    AT91F_PIO_Disable
peter
parents:
diff changeset
   648
//* \brief Disable PIO
peter
parents:
diff changeset
   649
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   650
__inline void AT91F_PIO_Disable(
peter
parents:
diff changeset
   651
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   652
        unsigned int flag) // \arg  pio to be disabled
peter
parents:
diff changeset
   653
{
peter
parents:
diff changeset
   654
        pPio->PIO_PDR = flag;
peter
parents:
diff changeset
   655
}
peter
parents:
diff changeset
   656
peter
parents:
diff changeset
   657
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   658
//* \fn    AT91F_PIO_GetStatus
peter
parents:
diff changeset
   659
//* \brief Return PIO Status
peter
parents:
diff changeset
   660
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   661
__inline unsigned int AT91F_PIO_GetStatus( // \return PIO Status
peter
parents:
diff changeset
   662
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   663
{
peter
parents:
diff changeset
   664
        return pPio->PIO_PSR;
peter
parents:
diff changeset
   665
}
peter
parents:
diff changeset
   666
peter
parents:
diff changeset
   667
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   668
//* \fn    AT91F_PIO_IsSet
peter
parents:
diff changeset
   669
//* \brief Test if PIO is Set
peter
parents:
diff changeset
   670
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   671
__inline int AT91F_PIO_IsSet(
peter
parents:
diff changeset
   672
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   673
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   674
{
peter
parents:
diff changeset
   675
        return (AT91F_PIO_GetStatus(pPio) & flag);
peter
parents:
diff changeset
   676
}
peter
parents:
diff changeset
   677
peter
parents:
diff changeset
   678
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   679
//* \fn    AT91F_PIO_OutputEnable
peter
parents:
diff changeset
   680
//* \brief Output Enable PIO
peter
parents:
diff changeset
   681
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   682
__inline void AT91F_PIO_OutputEnable(
peter
parents:
diff changeset
   683
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   684
        unsigned int flag) // \arg  pio output to be enabled
peter
parents:
diff changeset
   685
{
peter
parents:
diff changeset
   686
        pPio->PIO_OER = flag;
peter
parents:
diff changeset
   687
}
peter
parents:
diff changeset
   688
peter
parents:
diff changeset
   689
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   690
//* \fn    AT91F_PIO_OutputDisable
peter
parents:
diff changeset
   691
//* \brief Output Enable PIO
peter
parents:
diff changeset
   692
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   693
__inline void AT91F_PIO_OutputDisable(
peter
parents:
diff changeset
   694
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   695
        unsigned int flag) // \arg  pio output to be disabled
peter
parents:
diff changeset
   696
{
peter
parents:
diff changeset
   697
        pPio->PIO_ODR = flag;
peter
parents:
diff changeset
   698
}
peter
parents:
diff changeset
   699
peter
parents:
diff changeset
   700
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   701
//* \fn    AT91F_PIO_GetOutputStatus
peter
parents:
diff changeset
   702
//* \brief Return PIO Output Status
peter
parents:
diff changeset
   703
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   704
__inline unsigned int AT91F_PIO_GetOutputStatus( // \return PIO Output Status
peter
parents:
diff changeset
   705
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   706
{
peter
parents:
diff changeset
   707
        return pPio->PIO_OSR;
peter
parents:
diff changeset
   708
}
peter
parents:
diff changeset
   709
peter
parents:
diff changeset
   710
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   711
//* \fn    AT91F_PIO_IsOuputSet
peter
parents:
diff changeset
   712
//* \brief Test if PIO Output is Set
peter
parents:
diff changeset
   713
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   714
__inline int AT91F_PIO_IsOutputSet(
peter
parents:
diff changeset
   715
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   716
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   717
{
peter
parents:
diff changeset
   718
        return (AT91F_PIO_GetOutputStatus(pPio) & flag);
peter
parents:
diff changeset
   719
}
peter
parents:
diff changeset
   720
peter
parents:
diff changeset
   721
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   722
//* \fn    AT91F_PIO_InputFilterEnable
peter
parents:
diff changeset
   723
//* \brief Input Filter Enable PIO
peter
parents:
diff changeset
   724
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   725
__inline void AT91F_PIO_InputFilterEnable(
peter
parents:
diff changeset
   726
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   727
        unsigned int flag) // \arg  pio input filter to be enabled
peter
parents:
diff changeset
   728
{
peter
parents:
diff changeset
   729
        pPio->PIO_IFER = flag;
peter
parents:
diff changeset
   730
}
peter
parents:
diff changeset
   731
peter
parents:
diff changeset
   732
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   733
//* \fn    AT91F_PIO_InputFilterDisable
peter
parents:
diff changeset
   734
//* \brief Input Filter Disable PIO
peter
parents:
diff changeset
   735
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   736
__inline void AT91F_PIO_InputFilterDisable(
peter
parents:
diff changeset
   737
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   738
        unsigned int flag) // \arg  pio input filter to be disabled
peter
parents:
diff changeset
   739
{
peter
parents:
diff changeset
   740
        pPio->PIO_IFDR = flag;
peter
parents:
diff changeset
   741
}
peter
parents:
diff changeset
   742
peter
parents:
diff changeset
   743
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   744
//* \fn    AT91F_PIO_GetInputFilterStatus
peter
parents:
diff changeset
   745
//* \brief Return PIO Input Filter Status
peter
parents:
diff changeset
   746
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   747
__inline unsigned int AT91F_PIO_GetInputFilterStatus( // \return PIO Input Filter Status
peter
parents:
diff changeset
   748
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   749
{
peter
parents:
diff changeset
   750
        return pPio->PIO_IFSR;
peter
parents:
diff changeset
   751
}
peter
parents:
diff changeset
   752
peter
parents:
diff changeset
   753
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   754
//* \fn    AT91F_PIO_IsInputFilterSet
peter
parents:
diff changeset
   755
//* \brief Test if PIO Input filter is Set
peter
parents:
diff changeset
   756
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   757
__inline int AT91F_PIO_IsInputFilterSet(
peter
parents:
diff changeset
   758
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   759
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   760
{
peter
parents:
diff changeset
   761
        return (AT91F_PIO_GetInputFilterStatus(pPio) & flag);
peter
parents:
diff changeset
   762
}
peter
parents:
diff changeset
   763
peter
parents:
diff changeset
   764
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   765
//* \fn    AT91F_PIO_GetOutputDataStatus
peter
parents:
diff changeset
   766
//* \brief Return PIO Output Data Status
peter
parents:
diff changeset
   767
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   768
__inline unsigned int AT91F_PIO_GetOutputDataStatus( // \return PIO Output Data Status
peter
parents:
diff changeset
   769
	AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   770
{
peter
parents:
diff changeset
   771
        return pPio->PIO_ODSR;
peter
parents:
diff changeset
   772
}
peter
parents:
diff changeset
   773
peter
parents:
diff changeset
   774
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   775
//* \fn    AT91F_PIO_InterruptEnable
peter
parents:
diff changeset
   776
//* \brief Enable PIO Interrupt
peter
parents:
diff changeset
   777
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   778
__inline void AT91F_PIO_InterruptEnable(
peter
parents:
diff changeset
   779
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   780
        unsigned int flag) // \arg  pio interrupt to be enabled
peter
parents:
diff changeset
   781
{
peter
parents:
diff changeset
   782
        pPio->PIO_IER = flag;
peter
parents:
diff changeset
   783
}
peter
parents:
diff changeset
   784
peter
parents:
diff changeset
   785
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   786
//* \fn    AT91F_PIO_InterruptDisable
peter
parents:
diff changeset
   787
//* \brief Disable PIO Interrupt
peter
parents:
diff changeset
   788
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   789
__inline void AT91F_PIO_InterruptDisable(
peter
parents:
diff changeset
   790
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   791
        unsigned int flag) // \arg  pio interrupt to be disabled
peter
parents:
diff changeset
   792
{
peter
parents:
diff changeset
   793
        pPio->PIO_IDR = flag;
peter
parents:
diff changeset
   794
}
peter
parents:
diff changeset
   795
peter
parents:
diff changeset
   796
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   797
//* \fn    AT91F_PIO_GetInterruptMaskStatus
peter
parents:
diff changeset
   798
//* \brief Return PIO Interrupt Mask Status
peter
parents:
diff changeset
   799
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   800
__inline unsigned int AT91F_PIO_GetInterruptMaskStatus( // \return PIO Interrupt Mask Status
peter
parents:
diff changeset
   801
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   802
{
peter
parents:
diff changeset
   803
        return pPio->PIO_IMR;
peter
parents:
diff changeset
   804
}
peter
parents:
diff changeset
   805
peter
parents:
diff changeset
   806
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   807
//* \fn    AT91F_PIO_GetInterruptStatus
peter
parents:
diff changeset
   808
//* \brief Return PIO Interrupt Status
peter
parents:
diff changeset
   809
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   810
__inline unsigned int AT91F_PIO_GetInterruptStatus( // \return PIO Interrupt Status
peter
parents:
diff changeset
   811
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   812
{
peter
parents:
diff changeset
   813
        return pPio->PIO_ISR;
peter
parents:
diff changeset
   814
}
peter
parents:
diff changeset
   815
peter
parents:
diff changeset
   816
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   817
//* \fn    AT91F_PIO_IsInterruptMasked
peter
parents:
diff changeset
   818
//* \brief Test if PIO Interrupt is Masked
peter
parents:
diff changeset
   819
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   820
__inline int AT91F_PIO_IsInterruptMasked(
peter
parents:
diff changeset
   821
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   822
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   823
{
peter
parents:
diff changeset
   824
        return (AT91F_PIO_GetInterruptMaskStatus(pPio) & flag);
peter
parents:
diff changeset
   825
}
peter
parents:
diff changeset
   826
peter
parents:
diff changeset
   827
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   828
//* \fn    AT91F_PIO_IsInterruptSet
peter
parents:
diff changeset
   829
//* \brief Test if PIO Interrupt is Set
peter
parents:
diff changeset
   830
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   831
__inline int AT91F_PIO_IsInterruptSet(
peter
parents:
diff changeset
   832
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   833
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   834
{
peter
parents:
diff changeset
   835
        return (AT91F_PIO_GetInterruptStatus(pPio) & flag);
peter
parents:
diff changeset
   836
}
peter
parents:
diff changeset
   837
peter
parents:
diff changeset
   838
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   839
//* \fn    AT91F_PIO_MultiDriverEnable
peter
parents:
diff changeset
   840
//* \brief Multi Driver Enable PIO
peter
parents:
diff changeset
   841
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   842
__inline void AT91F_PIO_MultiDriverEnable(
peter
parents:
diff changeset
   843
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   844
        unsigned int flag) // \arg  pio to be enabled
peter
parents:
diff changeset
   845
{
peter
parents:
diff changeset
   846
        pPio->PIO_MDER = flag;
peter
parents:
diff changeset
   847
}
peter
parents:
diff changeset
   848
peter
parents:
diff changeset
   849
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   850
//* \fn    AT91F_PIO_MultiDriverDisable
peter
parents:
diff changeset
   851
//* \brief Multi Driver Disable PIO
peter
parents:
diff changeset
   852
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   853
__inline void AT91F_PIO_MultiDriverDisable(
peter
parents:
diff changeset
   854
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   855
        unsigned int flag) // \arg  pio to be disabled
peter
parents:
diff changeset
   856
{
peter
parents:
diff changeset
   857
        pPio->PIO_MDDR = flag;
peter
parents:
diff changeset
   858
}
peter
parents:
diff changeset
   859
peter
parents:
diff changeset
   860
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   861
//* \fn    AT91F_PIO_GetMultiDriverStatus
peter
parents:
diff changeset
   862
//* \brief Return PIO Multi Driver Status
peter
parents:
diff changeset
   863
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   864
__inline unsigned int AT91F_PIO_GetMultiDriverStatus( // \return PIO Multi Driver Status
peter
parents:
diff changeset
   865
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   866
{
peter
parents:
diff changeset
   867
        return pPio->PIO_MDSR;
peter
parents:
diff changeset
   868
}
peter
parents:
diff changeset
   869
peter
parents:
diff changeset
   870
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   871
//* \fn    AT91F_PIO_IsMultiDriverSet
peter
parents:
diff changeset
   872
//* \brief Test if PIO MultiDriver is Set
peter
parents:
diff changeset
   873
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   874
__inline int AT91F_PIO_IsMultiDriverSet(
peter
parents:
diff changeset
   875
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   876
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   877
{
peter
parents:
diff changeset
   878
        return (AT91F_PIO_GetMultiDriverStatus(pPio) & flag);
peter
parents:
diff changeset
   879
}
peter
parents:
diff changeset
   880
peter
parents:
diff changeset
   881
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   882
//* \fn    AT91F_PIO_A_RegisterSelection
peter
parents:
diff changeset
   883
//* \brief PIO A Register Selection
peter
parents:
diff changeset
   884
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   885
__inline void AT91F_PIO_A_RegisterSelection(
peter
parents:
diff changeset
   886
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   887
        unsigned int flag) // \arg  pio A register selection
peter
parents:
diff changeset
   888
{
peter
parents:
diff changeset
   889
        pPio->PIO_ASR = flag;
peter
parents:
diff changeset
   890
}
peter
parents:
diff changeset
   891
peter
parents:
diff changeset
   892
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   893
//* \fn    AT91F_PIO_B_RegisterSelection
peter
parents:
diff changeset
   894
//* \brief PIO B Register Selection
peter
parents:
diff changeset
   895
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   896
__inline void AT91F_PIO_B_RegisterSelection(
peter
parents:
diff changeset
   897
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   898
        unsigned int flag) // \arg  pio B register selection
peter
parents:
diff changeset
   899
{
peter
parents:
diff changeset
   900
        pPio->PIO_BSR = flag;
peter
parents:
diff changeset
   901
}
peter
parents:
diff changeset
   902
peter
parents:
diff changeset
   903
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   904
//* \fn    AT91F_PIO_Get_AB_RegisterStatus
peter
parents:
diff changeset
   905
//* \brief Return PIO Interrupt Status
peter
parents:
diff changeset
   906
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   907
__inline unsigned int AT91F_PIO_Get_AB_RegisterStatus( // \return PIO AB Register Status
peter
parents:
diff changeset
   908
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   909
{
peter
parents:
diff changeset
   910
        return pPio->PIO_ABSR;
peter
parents:
diff changeset
   911
}
peter
parents:
diff changeset
   912
peter
parents:
diff changeset
   913
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   914
//* \fn    AT91F_PIO_IsAB_RegisterSet
peter
parents:
diff changeset
   915
//* \brief Test if PIO AB Register is Set
peter
parents:
diff changeset
   916
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   917
__inline int AT91F_PIO_IsAB_RegisterSet(
peter
parents:
diff changeset
   918
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   919
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   920
{
peter
parents:
diff changeset
   921
        return (AT91F_PIO_Get_AB_RegisterStatus(pPio) & flag);
peter
parents:
diff changeset
   922
}
peter
parents:
diff changeset
   923
peter
parents:
diff changeset
   924
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   925
//* \fn    AT91F_PIO_OutputWriteEnable
peter
parents:
diff changeset
   926
//* \brief Output Write Enable PIO
peter
parents:
diff changeset
   927
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   928
__inline void AT91F_PIO_OutputWriteEnable(
peter
parents:
diff changeset
   929
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   930
        unsigned int flag) // \arg  pio output write to be enabled
peter
parents:
diff changeset
   931
{
peter
parents:
diff changeset
   932
        pPio->PIO_OWER = flag;
peter
parents:
diff changeset
   933
}
peter
parents:
diff changeset
   934
peter
parents:
diff changeset
   935
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   936
//* \fn    AT91F_PIO_OutputWriteDisable
peter
parents:
diff changeset
   937
//* \brief Output Write Disable PIO
peter
parents:
diff changeset
   938
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   939
__inline void AT91F_PIO_OutputWriteDisable(
peter
parents:
diff changeset
   940
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   941
        unsigned int flag) // \arg  pio output write to be disabled
peter
parents:
diff changeset
   942
{
peter
parents:
diff changeset
   943
        pPio->PIO_OWDR = flag;
peter
parents:
diff changeset
   944
}
peter
parents:
diff changeset
   945
peter
parents:
diff changeset
   946
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   947
//* \fn    AT91F_PIO_GetOutputWriteStatus
peter
parents:
diff changeset
   948
//* \brief Return PIO Output Write Status
peter
parents:
diff changeset
   949
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   950
__inline unsigned int AT91F_PIO_GetOutputWriteStatus( // \return PIO Output Write Status
peter
parents:
diff changeset
   951
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   952
{
peter
parents:
diff changeset
   953
        return pPio->PIO_OWSR;
peter
parents:
diff changeset
   954
}
peter
parents:
diff changeset
   955
peter
parents:
diff changeset
   956
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   957
//* \fn    AT91F_PIO_IsOutputWriteSet
peter
parents:
diff changeset
   958
//* \brief Test if PIO OutputWrite is Set
peter
parents:
diff changeset
   959
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   960
__inline int AT91F_PIO_IsOutputWriteSet(
peter
parents:
diff changeset
   961
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   962
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   963
{
peter
parents:
diff changeset
   964
        return (AT91F_PIO_GetOutputWriteStatus(pPio) & flag);
peter
parents:
diff changeset
   965
}
peter
parents:
diff changeset
   966
peter
parents:
diff changeset
   967
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   968
//* \fn    AT91F_PIO_GetCfgPullup
peter
parents:
diff changeset
   969
//* \brief Return PIO Configuration Pullup
peter
parents:
diff changeset
   970
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   971
__inline unsigned int AT91F_PIO_GetCfgPullup( // \return PIO Configuration Pullup
peter
parents:
diff changeset
   972
        AT91PS_PIO pPio) // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   973
{
peter
parents:
diff changeset
   974
        return pPio->PIO_PPUSR;
peter
parents:
diff changeset
   975
}
peter
parents:
diff changeset
   976
peter
parents:
diff changeset
   977
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   978
//* \fn    AT91F_PIO_IsOutputDataStatusSet
peter
parents:
diff changeset
   979
//* \brief Test if PIO Output Data Status is Set
peter
parents:
diff changeset
   980
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   981
__inline int AT91F_PIO_IsOutputDataStatusSet(
peter
parents:
diff changeset
   982
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   983
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   984
{
peter
parents:
diff changeset
   985
        return (AT91F_PIO_GetOutputDataStatus(pPio) & flag);
peter
parents:
diff changeset
   986
}
peter
parents:
diff changeset
   987
peter
parents:
diff changeset
   988
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   989
//* \fn    AT91F_PIO_IsCfgPullupStatusSet
peter
parents:
diff changeset
   990
//* \brief Test if PIO Configuration Pullup Status is Set
peter
parents:
diff changeset
   991
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
   992
__inline int AT91F_PIO_IsCfgPullupStatusSet(
peter
parents:
diff changeset
   993
        AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
peter
parents:
diff changeset
   994
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
   995
{
peter
parents:
diff changeset
   996
        return (~AT91F_PIO_GetCfgPullup(pPio) & flag);
peter
parents:
diff changeset
   997
}
peter
parents:
diff changeset
   998
peter
parents:
diff changeset
   999
/* *****************************************************************************
peter
parents:
diff changeset
  1000
                SOFTWARE API FOR PMC
peter
parents:
diff changeset
  1001
   ***************************************************************************** */
peter
parents:
diff changeset
  1002
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1003
//* \fn    AT91F_PMC_CfgSysClkEnableReg
peter
parents:
diff changeset
  1004
//* \brief Configure the System Clock Enable Register of the PMC controller
peter
parents:
diff changeset
  1005
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1006
__inline void AT91F_PMC_CfgSysClkEnableReg (
peter
parents:
diff changeset
  1007
	AT91PS_PMC pPMC, // \arg pointer to PMC controller
peter
parents:
diff changeset
  1008
	unsigned int mode)
peter
parents:
diff changeset
  1009
{
peter
parents:
diff changeset
  1010
	//* Write to the SCER register
peter
parents:
diff changeset
  1011
	pPMC->PMC_SCER = mode;
peter
parents:
diff changeset
  1012
}
peter
parents:
diff changeset
  1013
peter
parents:
diff changeset
  1014
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1015
//* \fn    AT91F_PMC_CfgSysClkDisableReg
peter
parents:
diff changeset
  1016
//* \brief Configure the System Clock Disable Register of the PMC controller
peter
parents:
diff changeset
  1017
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1018
__inline void AT91F_PMC_CfgSysClkDisableReg (
peter
parents:
diff changeset
  1019
	AT91PS_PMC pPMC, // \arg pointer to PMC controller
peter
parents:
diff changeset
  1020
	unsigned int mode)
peter
parents:
diff changeset
  1021
{
peter
parents:
diff changeset
  1022
	//* Write to the SCDR register
peter
parents:
diff changeset
  1023
	pPMC->PMC_SCDR = mode;
peter
parents:
diff changeset
  1024
}
peter
parents:
diff changeset
  1025
peter
parents:
diff changeset
  1026
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1027
//* \fn    AT91F_PMC_GetSysClkStatusReg
peter
parents:
diff changeset
  1028
//* \brief Return the System Clock Status Register of the PMC controller
peter
parents:
diff changeset
  1029
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1030
__inline unsigned int AT91F_PMC_GetSysClkStatusReg (
peter
parents:
diff changeset
  1031
	AT91PS_PMC pPMC // pointer to a CAN controller
peter
parents:
diff changeset
  1032
	)
peter
parents:
diff changeset
  1033
{
peter
parents:
diff changeset
  1034
	return pPMC->PMC_SCSR;
peter
parents:
diff changeset
  1035
}
peter
parents:
diff changeset
  1036
peter
parents:
diff changeset
  1037
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1038
//* \fn    AT91F_PMC_EnablePeriphClock
peter
parents:
diff changeset
  1039
//* \brief Enable peripheral clock
peter
parents:
diff changeset
  1040
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1041
__inline void AT91F_PMC_EnablePeriphClock (
peter
parents:
diff changeset
  1042
	AT91PS_PMC pPMC, // \arg pointer to PMC controller
peter
parents:
diff changeset
  1043
	unsigned int periphIds)  // \arg IDs of peripherals to enable
peter
parents:
diff changeset
  1044
{
peter
parents:
diff changeset
  1045
	pPMC->PMC_PCER = periphIds;
peter
parents:
diff changeset
  1046
}
peter
parents:
diff changeset
  1047
peter
parents:
diff changeset
  1048
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1049
//* \fn    AT91F_PMC_DisablePeriphClock
peter
parents:
diff changeset
  1050
//* \brief Disable peripheral clock
peter
parents:
diff changeset
  1051
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1052
__inline void AT91F_PMC_DisablePeriphClock (
peter
parents:
diff changeset
  1053
	AT91PS_PMC pPMC, // \arg pointer to PMC controller
peter
parents:
diff changeset
  1054
	unsigned int periphIds)  // \arg IDs of peripherals to enable
peter
parents:
diff changeset
  1055
{
peter
parents:
diff changeset
  1056
	pPMC->PMC_PCDR = periphIds;
peter
parents:
diff changeset
  1057
}
peter
parents:
diff changeset
  1058
peter
parents:
diff changeset
  1059
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1060
//* \fn    AT91F_PMC_GetPeriphClock
peter
parents:
diff changeset
  1061
//* \brief Get peripheral clock status
peter
parents:
diff changeset
  1062
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1063
__inline unsigned int AT91F_PMC_GetPeriphClock (
peter
parents:
diff changeset
  1064
	AT91PS_PMC pPMC) // \arg pointer to PMC controller
peter
parents:
diff changeset
  1065
{
peter
parents:
diff changeset
  1066
	return pPMC->PMC_PCSR;
peter
parents:
diff changeset
  1067
}
peter
parents:
diff changeset
  1068
peter
parents:
diff changeset
  1069
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1070
//* \fn    AT91F_CKGR_CfgMainOscillatorReg
peter
parents:
diff changeset
  1071
//* \brief Cfg the main oscillator
peter
parents:
diff changeset
  1072
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1073
__inline void AT91F_CKGR_CfgMainOscillatorReg (
peter
parents:
diff changeset
  1074
	AT91PS_CKGR pCKGR, // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1075
	unsigned int mode)
peter
parents:
diff changeset
  1076
{
peter
parents:
diff changeset
  1077
	pCKGR->CKGR_MOR = mode;
peter
parents:
diff changeset
  1078
}
peter
parents:
diff changeset
  1079
peter
parents:
diff changeset
  1080
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1081
//* \fn    AT91F_CKGR_GetMainOscillatorReg
peter
parents:
diff changeset
  1082
//* \brief Cfg the main oscillator
peter
parents:
diff changeset
  1083
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1084
__inline unsigned int AT91F_CKGR_GetMainOscillatorReg (
peter
parents:
diff changeset
  1085
	AT91PS_CKGR pCKGR) // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1086
{
peter
parents:
diff changeset
  1087
	return pCKGR->CKGR_MOR;
peter
parents:
diff changeset
  1088
}
peter
parents:
diff changeset
  1089
peter
parents:
diff changeset
  1090
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1091
//* \fn    AT91F_CKGR_EnableMainOscillator
peter
parents:
diff changeset
  1092
//* \brief Enable the main oscillator
peter
parents:
diff changeset
  1093
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1094
__inline void AT91F_CKGR_EnableMainOscillator(
peter
parents:
diff changeset
  1095
	AT91PS_CKGR pCKGR) // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1096
{
peter
parents:
diff changeset
  1097
	pCKGR->CKGR_MOR |= AT91C_CKGR_MOSCEN;
peter
parents:
diff changeset
  1098
}
peter
parents:
diff changeset
  1099
peter
parents:
diff changeset
  1100
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1101
//* \fn    AT91F_CKGR_DisableMainOscillator
peter
parents:
diff changeset
  1102
//* \brief Disable the main oscillator
peter
parents:
diff changeset
  1103
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1104
__inline void AT91F_CKGR_DisableMainOscillator (
peter
parents:
diff changeset
  1105
	AT91PS_CKGR pCKGR) // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1106
{
peter
parents:
diff changeset
  1107
	pCKGR->CKGR_MOR &= ~AT91C_CKGR_MOSCEN;
peter
parents:
diff changeset
  1108
}
peter
parents:
diff changeset
  1109
peter
parents:
diff changeset
  1110
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1111
//* \fn    AT91F_CKGR_CfgMainOscStartUpTime
peter
parents:
diff changeset
  1112
//* \brief Cfg MOR Register according to the main osc startup time
peter
parents:
diff changeset
  1113
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1114
__inline void AT91F_CKGR_CfgMainOscStartUpTime (
peter
parents:
diff changeset
  1115
	AT91PS_CKGR pCKGR, // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1116
	unsigned int startup_time,  // \arg main osc startup time in microsecond (us)
peter
parents:
diff changeset
  1117
	unsigned int slowClock)  // \arg slowClock in Hz
peter
parents:
diff changeset
  1118
{
peter
parents:
diff changeset
  1119
	pCKGR->CKGR_MOR &= ~AT91C_CKGR_OSCOUNT;
peter
parents:
diff changeset
  1120
	pCKGR->CKGR_MOR |= ((slowClock * startup_time)/(8*1000000)) << 8;
peter
parents:
diff changeset
  1121
}
peter
parents:
diff changeset
  1122
peter
parents:
diff changeset
  1123
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1124
//* \fn    AT91F_CKGR_GetMainClockFreqReg
peter
parents:
diff changeset
  1125
//* \brief Cfg the main oscillator
peter
parents:
diff changeset
  1126
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1127
__inline unsigned int AT91F_CKGR_GetMainClockFreqReg (
peter
parents:
diff changeset
  1128
	AT91PS_CKGR pCKGR) // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1129
{
peter
parents:
diff changeset
  1130
	return pCKGR->CKGR_MCFR;
peter
parents:
diff changeset
  1131
}
peter
parents:
diff changeset
  1132
peter
parents:
diff changeset
  1133
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1134
//* \fn    AT91F_CKGR_GetMainClock
peter
parents:
diff changeset
  1135
//* \brief Return Main clock in Hz
peter
parents:
diff changeset
  1136
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1137
__inline unsigned int AT91F_CKGR_GetMainClock (
peter
parents:
diff changeset
  1138
	AT91PS_CKGR pCKGR, // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1139
	unsigned int slowClock)  // \arg slowClock in Hz
peter
parents:
diff changeset
  1140
{
peter
parents:
diff changeset
  1141
	return ((pCKGR->CKGR_MCFR  & AT91C_CKGR_MAINF) * slowClock) >> 4;
peter
parents:
diff changeset
  1142
}
peter
parents:
diff changeset
  1143
peter
parents:
diff changeset
  1144
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1145
//* \fn    AT91F_PMC_CfgMCKReg
peter
parents:
diff changeset
  1146
//* \brief Cfg Master Clock Register
peter
parents:
diff changeset
  1147
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1148
__inline void AT91F_PMC_CfgMCKReg (
peter
parents:
diff changeset
  1149
	AT91PS_PMC pPMC, // \arg pointer to PMC controller
peter
parents:
diff changeset
  1150
	unsigned int mode)
peter
parents:
diff changeset
  1151
{
peter
parents:
diff changeset
  1152
	pPMC->PMC_MCKR = mode;
peter
parents:
diff changeset
  1153
}
peter
parents:
diff changeset
  1154
peter
parents:
diff changeset
  1155
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1156
//* \fn    AT91F_PMC_GetMCKReg
peter
parents:
diff changeset
  1157
//* \brief Return Master Clock Register
peter
parents:
diff changeset
  1158
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1159
__inline unsigned int AT91F_PMC_GetMCKReg(
peter
parents:
diff changeset
  1160
	AT91PS_PMC pPMC) // \arg pointer to PMC controller
peter
parents:
diff changeset
  1161
{
peter
parents:
diff changeset
  1162
	return pPMC->PMC_MCKR;
peter
parents:
diff changeset
  1163
}
peter
parents:
diff changeset
  1164
peter
parents:
diff changeset
  1165
//*------------------------------------------------------------------------------
peter
parents:
diff changeset
  1166
//* \fn    AT91F_PMC_GetMasterClock
peter
parents:
diff changeset
  1167
//* \brief Return master clock in Hz which correponds to processor clock for ARM7
peter
parents:
diff changeset
  1168
//*------------------------------------------------------------------------------
peter
parents:
diff changeset
  1169
__inline unsigned int AT91F_PMC_GetMasterClock (
peter
parents:
diff changeset
  1170
	AT91PS_PMC pPMC, // \arg pointer to PMC controller
peter
parents:
diff changeset
  1171
	AT91PS_CKGR pCKGR, // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1172
	unsigned int slowClock)  // \arg slowClock in Hz
peter
parents:
diff changeset
  1173
{
peter
parents:
diff changeset
  1174
	unsigned int reg = pPMC->PMC_MCKR;
peter
parents:
diff changeset
  1175
	unsigned int prescaler = (1 << ((reg & AT91C_PMC_PRES) >> 2));
peter
parents:
diff changeset
  1176
	unsigned int pllDivider, pllMultiplier;
peter
parents:
diff changeset
  1177
peter
parents:
diff changeset
  1178
	switch (reg & AT91C_PMC_CSS) {
peter
parents:
diff changeset
  1179
		case AT91C_PMC_CSS_SLOW_CLK: // Slow clock selected
peter
parents:
diff changeset
  1180
			return slowClock / prescaler;
peter
parents:
diff changeset
  1181
		case AT91C_PMC_CSS_MAIN_CLK: // Main clock is selected
peter
parents:
diff changeset
  1182
			return AT91F_CKGR_GetMainClock(pCKGR, slowClock) / prescaler;
peter
parents:
diff changeset
  1183
		case AT91C_PMC_CSS_PLL_CLK: // PLLB clock is selected
peter
parents:
diff changeset
  1184
			reg = pCKGR->CKGR_PLLR;
peter
parents:
diff changeset
  1185
			pllDivider    = (reg  & AT91C_CKGR_DIV);
peter
parents:
diff changeset
  1186
			pllMultiplier = ((reg  & AT91C_CKGR_MUL) >> 16) + 1;
peter
parents:
diff changeset
  1187
			return AT91F_CKGR_GetMainClock(pCKGR, slowClock) / pllDivider * pllMultiplier / prescaler;
peter
parents:
diff changeset
  1188
	}
peter
parents:
diff changeset
  1189
	return 0;
peter
parents:
diff changeset
  1190
}
peter
parents:
diff changeset
  1191
peter
parents:
diff changeset
  1192
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1193
//* \fn    AT91F_PMC_EnablePCK
peter
parents:
diff changeset
  1194
//* \brief Enable peripheral clock
peter
parents:
diff changeset
  1195
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1196
__inline void AT91F_PMC_EnablePCK (
peter
parents:
diff changeset
  1197
	AT91PS_PMC pPMC, // \arg pointer to PMC controller
peter
parents:
diff changeset
  1198
	unsigned int pck,  // \arg Peripheral clock identifier 0 .. 7
peter
parents:
diff changeset
  1199
	unsigned int mode)
peter
parents:
diff changeset
  1200
{
peter
parents:
diff changeset
  1201
	pPMC->PMC_PCKR[pck] = mode;
peter
parents:
diff changeset
  1202
	pPMC->PMC_SCER = (1 << pck) << 8;
peter
parents:
diff changeset
  1203
}
peter
parents:
diff changeset
  1204
peter
parents:
diff changeset
  1205
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1206
//* \fn    AT91F_PMC_DisablePCK
peter
parents:
diff changeset
  1207
//* \brief Enable peripheral clock
peter
parents:
diff changeset
  1208
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1209
__inline void AT91F_PMC_DisablePCK (
peter
parents:
diff changeset
  1210
	AT91PS_PMC pPMC, // \arg pointer to PMC controller
peter
parents:
diff changeset
  1211
	unsigned int pck)  // \arg Peripheral clock identifier 0 .. 7
peter
parents:
diff changeset
  1212
{
peter
parents:
diff changeset
  1213
	pPMC->PMC_SCDR = (1 << pck) << 8;
peter
parents:
diff changeset
  1214
}
peter
parents:
diff changeset
  1215
peter
parents:
diff changeset
  1216
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1217
//* \fn    AT91F_PMC_EnableIt
peter
parents:
diff changeset
  1218
//* \brief Enable PMC interrupt
peter
parents:
diff changeset
  1219
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1220
__inline void AT91F_PMC_EnableIt (
peter
parents:
diff changeset
  1221
	AT91PS_PMC pPMC,     // pointer to a PMC controller
peter
parents:
diff changeset
  1222
	unsigned int flag)   // IT to be enabled
peter
parents:
diff changeset
  1223
{
peter
parents:
diff changeset
  1224
	//* Write to the IER register
peter
parents:
diff changeset
  1225
	pPMC->PMC_IER = flag;
peter
parents:
diff changeset
  1226
}
peter
parents:
diff changeset
  1227
peter
parents:
diff changeset
  1228
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1229
//* \fn    AT91F_PMC_DisableIt
peter
parents:
diff changeset
  1230
//* \brief Disable PMC interrupt
peter
parents:
diff changeset
  1231
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1232
__inline void AT91F_PMC_DisableIt (
peter
parents:
diff changeset
  1233
	AT91PS_PMC pPMC, // pointer to a PMC controller
peter
parents:
diff changeset
  1234
	unsigned int flag) // IT to be disabled
peter
parents:
diff changeset
  1235
{
peter
parents:
diff changeset
  1236
	//* Write to the IDR register
peter
parents:
diff changeset
  1237
	pPMC->PMC_IDR = flag;
peter
parents:
diff changeset
  1238
}
peter
parents:
diff changeset
  1239
peter
parents:
diff changeset
  1240
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1241
//* \fn    AT91F_PMC_GetStatus
peter
parents:
diff changeset
  1242
//* \brief Return PMC Interrupt Status
peter
parents:
diff changeset
  1243
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1244
__inline unsigned int AT91F_PMC_GetStatus( // \return PMC Interrupt Status
peter
parents:
diff changeset
  1245
	AT91PS_PMC pPMC) // pointer to a PMC controller
peter
parents:
diff changeset
  1246
{
peter
parents:
diff changeset
  1247
	return pPMC->PMC_SR;
peter
parents:
diff changeset
  1248
}
peter
parents:
diff changeset
  1249
peter
parents:
diff changeset
  1250
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1251
//* \fn    AT91F_PMC_GetInterruptMaskStatus
peter
parents:
diff changeset
  1252
//* \brief Return PMC Interrupt Mask Status
peter
parents:
diff changeset
  1253
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1254
__inline unsigned int AT91F_PMC_GetInterruptMaskStatus( // \return PMC Interrupt Mask Status
peter
parents:
diff changeset
  1255
	AT91PS_PMC pPMC) // pointer to a PMC controller
peter
parents:
diff changeset
  1256
{
peter
parents:
diff changeset
  1257
	return pPMC->PMC_IMR;
peter
parents:
diff changeset
  1258
}
peter
parents:
diff changeset
  1259
peter
parents:
diff changeset
  1260
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1261
//* \fn    AT91F_PMC_IsInterruptMasked
peter
parents:
diff changeset
  1262
//* \brief Test if PMC Interrupt is Masked
peter
parents:
diff changeset
  1263
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1264
__inline unsigned int AT91F_PMC_IsInterruptMasked(
peter
parents:
diff changeset
  1265
        AT91PS_PMC pPMC,   // \arg  pointer to a PMC controller
peter
parents:
diff changeset
  1266
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  1267
{
peter
parents:
diff changeset
  1268
	return (AT91F_PMC_GetInterruptMaskStatus(pPMC) & flag);
peter
parents:
diff changeset
  1269
}
peter
parents:
diff changeset
  1270
peter
parents:
diff changeset
  1271
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1272
//* \fn    AT91F_PMC_IsStatusSet
peter
parents:
diff changeset
  1273
//* \brief Test if PMC Status is Set
peter
parents:
diff changeset
  1274
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1275
__inline unsigned int AT91F_PMC_IsStatusSet(
peter
parents:
diff changeset
  1276
        AT91PS_PMC pPMC,   // \arg  pointer to a PMC controller
peter
parents:
diff changeset
  1277
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  1278
{
peter
parents:
diff changeset
  1279
	return (AT91F_PMC_GetStatus(pPMC) & flag);
peter
parents:
diff changeset
  1280
}
peter
parents:
diff changeset
  1281
peter
parents:
diff changeset
  1282
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  1283
//  \fn    AT91F_CKGR_CfgPLLReg
peter
parents:
diff changeset
  1284
//  \brief Cfg the PLL Register
peter
parents:
diff changeset
  1285
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  1286
__inline void AT91F_CKGR_CfgPLLReg (
peter
parents:
diff changeset
  1287
	AT91PS_CKGR pCKGR, // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1288
	unsigned int mode)
peter
parents:
diff changeset
  1289
{
peter
parents:
diff changeset
  1290
	pCKGR->CKGR_PLLR = mode;
peter
parents:
diff changeset
  1291
}
peter
parents:
diff changeset
  1292
peter
parents:
diff changeset
  1293
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  1294
//  \fn    AT91F_CKGR_GetPLLReg
peter
parents:
diff changeset
  1295
//  \brief Get the PLL Register
peter
parents:
diff changeset
  1296
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  1297
__inline unsigned int AT91F_CKGR_GetPLLReg (
peter
parents:
diff changeset
  1298
	AT91PS_CKGR pCKGR) // \arg pointer to CKGR controller
peter
parents:
diff changeset
  1299
{
peter
parents:
diff changeset
  1300
	return pCKGR->CKGR_PLLR;
peter
parents:
diff changeset
  1301
}
peter
parents:
diff changeset
  1302
peter
parents:
diff changeset
  1303
peter
parents:
diff changeset
  1304
/* *****************************************************************************
peter
parents:
diff changeset
  1305
                SOFTWARE API FOR RSTC
peter
parents:
diff changeset
  1306
   ***************************************************************************** */
peter
parents:
diff changeset
  1307
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1308
//* \fn    AT91F_RSTSoftReset
peter
parents:
diff changeset
  1309
//* \brief Start Software Reset
peter
parents:
diff changeset
  1310
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1311
__inline void AT91F_RSTSoftReset(
peter
parents:
diff changeset
  1312
        AT91PS_RSTC pRSTC,
peter
parents:
diff changeset
  1313
        unsigned int reset)
peter
parents:
diff changeset
  1314
{
peter
parents:
diff changeset
  1315
	pRSTC->RSTC_RCR = (0xA5000000 | reset);
peter
parents:
diff changeset
  1316
}
peter
parents:
diff changeset
  1317
peter
parents:
diff changeset
  1318
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1319
//* \fn    AT91F_RSTSetMode
peter
parents:
diff changeset
  1320
//* \brief Set Reset Mode
peter
parents:
diff changeset
  1321
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1322
__inline void AT91F_RSTSetMode(
peter
parents:
diff changeset
  1323
        AT91PS_RSTC pRSTC,
peter
parents:
diff changeset
  1324
        unsigned int mode)
peter
parents:
diff changeset
  1325
{
peter
parents:
diff changeset
  1326
	pRSTC->RSTC_RMR = (0xA5000000 | mode);
peter
parents:
diff changeset
  1327
}
peter
parents:
diff changeset
  1328
peter
parents:
diff changeset
  1329
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1330
//* \fn    AT91F_RSTGetMode
peter
parents:
diff changeset
  1331
//* \brief Get Reset Mode
peter
parents:
diff changeset
  1332
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1333
__inline unsigned int AT91F_RSTGetMode(
peter
parents:
diff changeset
  1334
        AT91PS_RSTC pRSTC)
peter
parents:
diff changeset
  1335
{
peter
parents:
diff changeset
  1336
	return (pRSTC->RSTC_RMR);
peter
parents:
diff changeset
  1337
}
peter
parents:
diff changeset
  1338
peter
parents:
diff changeset
  1339
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1340
//* \fn    AT91F_RSTGetStatus
peter
parents:
diff changeset
  1341
//* \brief Get Reset Status
peter
parents:
diff changeset
  1342
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1343
__inline unsigned int AT91F_RSTGetStatus(
peter
parents:
diff changeset
  1344
        AT91PS_RSTC pRSTC)
peter
parents:
diff changeset
  1345
{
peter
parents:
diff changeset
  1346
	return (pRSTC->RSTC_RSR);
peter
parents:
diff changeset
  1347
}
peter
parents:
diff changeset
  1348
peter
parents:
diff changeset
  1349
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1350
//* \fn    AT91F_RSTIsSoftRstActive
peter
parents:
diff changeset
  1351
//* \brief Return !=0 if software reset is still not completed
peter
parents:
diff changeset
  1352
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1353
__inline unsigned int AT91F_RSTIsSoftRstActive(
peter
parents:
diff changeset
  1354
        AT91PS_RSTC pRSTC)
peter
parents:
diff changeset
  1355
{
peter
parents:
diff changeset
  1356
	return ((pRSTC->RSTC_RSR) & AT91C_RSTC_SRCMP);
peter
parents:
diff changeset
  1357
}
peter
parents:
diff changeset
  1358
/* *****************************************************************************
peter
parents:
diff changeset
  1359
                SOFTWARE API FOR RTTC
peter
parents:
diff changeset
  1360
   ***************************************************************************** */
peter
parents:
diff changeset
  1361
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1362
//* \fn     AT91F_SetRTT_TimeBase()
peter
parents:
diff changeset
  1363
//* \brief  Set the RTT prescaler according to the TimeBase in ms
peter
parents:
diff changeset
  1364
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1365
__inline unsigned int AT91F_RTTSetTimeBase(
peter
parents:
diff changeset
  1366
        AT91PS_RTTC pRTTC,
peter
parents:
diff changeset
  1367
        unsigned int ms)
peter
parents:
diff changeset
  1368
{
peter
parents:
diff changeset
  1369
	if (ms > 2000)
peter
parents:
diff changeset
  1370
		return 1;   // AT91C_TIME_OUT_OF_RANGE
peter
parents:
diff changeset
  1371
	pRTTC->RTTC_RTMR &= ~0xFFFF;	
peter
parents:
diff changeset
  1372
	pRTTC->RTTC_RTMR |= (((ms << 15) /1000) & 0xFFFF);	
peter
parents:
diff changeset
  1373
	return 0;
peter
parents:
diff changeset
  1374
}
peter
parents:
diff changeset
  1375
peter
parents:
diff changeset
  1376
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1377
//* \fn     AT91F_RTTSetPrescaler()
peter
parents:
diff changeset
  1378
//* \brief  Set the new prescaler value
peter
parents:
diff changeset
  1379
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1380
__inline unsigned int AT91F_RTTSetPrescaler(
peter
parents:
diff changeset
  1381
        AT91PS_RTTC pRTTC,
peter
parents:
diff changeset
  1382
        unsigned int rtpres)
peter
parents:
diff changeset
  1383
{
peter
parents:
diff changeset
  1384
	pRTTC->RTTC_RTMR &= ~0xFFFF;	
peter
parents:
diff changeset
  1385
	pRTTC->RTTC_RTMR |= (rtpres & 0xFFFF);	
peter
parents:
diff changeset
  1386
	return (pRTTC->RTTC_RTMR);
peter
parents:
diff changeset
  1387
}
peter
parents:
diff changeset
  1388
peter
parents:
diff changeset
  1389
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1390
//* \fn     AT91F_RTTRestart()
peter
parents:
diff changeset
  1391
//* \brief  Restart the RTT prescaler
peter
parents:
diff changeset
  1392
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1393
__inline void AT91F_RTTRestart(
peter
parents:
diff changeset
  1394
        AT91PS_RTTC pRTTC)
peter
parents:
diff changeset
  1395
{
peter
parents:
diff changeset
  1396
	pRTTC->RTTC_RTMR |= AT91C_RTTC_RTTRST;	
peter
parents:
diff changeset
  1397
}
peter
parents:
diff changeset
  1398
peter
parents:
diff changeset
  1399
peter
parents:
diff changeset
  1400
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1401
//* \fn     AT91F_RTT_SetAlarmINT()
peter
parents:
diff changeset
  1402
//* \brief  Enable RTT Alarm Interrupt
peter
parents:
diff changeset
  1403
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1404
__inline void AT91F_RTTSetAlarmINT(
peter
parents:
diff changeset
  1405
        AT91PS_RTTC pRTTC)
peter
parents:
diff changeset
  1406
{
peter
parents:
diff changeset
  1407
	pRTTC->RTTC_RTMR |= AT91C_RTTC_ALMIEN;
peter
parents:
diff changeset
  1408
}
peter
parents:
diff changeset
  1409
peter
parents:
diff changeset
  1410
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1411
//* \fn     AT91F_RTT_ClearAlarmINT()
peter
parents:
diff changeset
  1412
//* \brief  Disable RTT Alarm Interrupt
peter
parents:
diff changeset
  1413
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1414
__inline void AT91F_RTTClearAlarmINT(
peter
parents:
diff changeset
  1415
        AT91PS_RTTC pRTTC)
peter
parents:
diff changeset
  1416
{
peter
parents:
diff changeset
  1417
	pRTTC->RTTC_RTMR &= ~AT91C_RTTC_ALMIEN;
peter
parents:
diff changeset
  1418
}
peter
parents:
diff changeset
  1419
peter
parents:
diff changeset
  1420
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1421
//* \fn     AT91F_RTT_SetRttIncINT()
peter
parents:
diff changeset
  1422
//* \brief  Enable RTT INC Interrupt
peter
parents:
diff changeset
  1423
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1424
__inline void AT91F_RTTSetRttIncINT(
peter
parents:
diff changeset
  1425
        AT91PS_RTTC pRTTC)
peter
parents:
diff changeset
  1426
{
peter
parents:
diff changeset
  1427
	pRTTC->RTTC_RTMR |= AT91C_RTTC_RTTINCIEN;
peter
parents:
diff changeset
  1428
}
peter
parents:
diff changeset
  1429
peter
parents:
diff changeset
  1430
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1431
//* \fn     AT91F_RTT_ClearRttIncINT()
peter
parents:
diff changeset
  1432
//* \brief  Disable RTT INC Interrupt
peter
parents:
diff changeset
  1433
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1434
__inline void AT91F_RTTClearRttIncINT(
peter
parents:
diff changeset
  1435
        AT91PS_RTTC pRTTC)
peter
parents:
diff changeset
  1436
{
peter
parents:
diff changeset
  1437
	pRTTC->RTTC_RTMR &= ~AT91C_RTTC_RTTINCIEN;
peter
parents:
diff changeset
  1438
}
peter
parents:
diff changeset
  1439
peter
parents:
diff changeset
  1440
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1441
//* \fn     AT91F_RTT_SetAlarmValue()
peter
parents:
diff changeset
  1442
//* \brief  Set RTT Alarm Value
peter
parents:
diff changeset
  1443
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1444
__inline void AT91F_RTTSetAlarmValue(
peter
parents:
diff changeset
  1445
        AT91PS_RTTC pRTTC, unsigned int alarm)
peter
parents:
diff changeset
  1446
{
peter
parents:
diff changeset
  1447
	pRTTC->RTTC_RTAR = alarm;
peter
parents:
diff changeset
  1448
}
peter
parents:
diff changeset
  1449
peter
parents:
diff changeset
  1450
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1451
//* \fn     AT91F_RTT_GetAlarmValue()
peter
parents:
diff changeset
  1452
//* \brief  Get RTT Alarm Value
peter
parents:
diff changeset
  1453
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1454
__inline unsigned int AT91F_RTTGetAlarmValue(
peter
parents:
diff changeset
  1455
        AT91PS_RTTC pRTTC)
peter
parents:
diff changeset
  1456
{
peter
parents:
diff changeset
  1457
	return(pRTTC->RTTC_RTAR);
peter
parents:
diff changeset
  1458
}
peter
parents:
diff changeset
  1459
peter
parents:
diff changeset
  1460
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1461
//* \fn     AT91F_RTTGetStatus()
peter
parents:
diff changeset
  1462
//* \brief  Read the RTT status
peter
parents:
diff changeset
  1463
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1464
__inline unsigned int AT91F_RTTGetStatus(
peter
parents:
diff changeset
  1465
        AT91PS_RTTC pRTTC)
peter
parents:
diff changeset
  1466
{
peter
parents:
diff changeset
  1467
	return(pRTTC->RTTC_RTSR);
peter
parents:
diff changeset
  1468
}
peter
parents:
diff changeset
  1469
peter
parents:
diff changeset
  1470
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1471
//* \fn     AT91F_RTT_ReadValue()
peter
parents:
diff changeset
  1472
//* \brief  Read the RTT value
peter
parents:
diff changeset
  1473
//*--------------------------------------------------------------------------------------
peter
parents:
diff changeset
  1474
__inline unsigned int AT91F_RTTReadValue(
peter
parents:
diff changeset
  1475
        AT91PS_RTTC pRTTC)
peter
parents:
diff changeset
  1476
{
peter
parents:
diff changeset
  1477
        register volatile unsigned int val1,val2;
peter
parents:
diff changeset
  1478
	do
peter
parents:
diff changeset
  1479
	{
peter
parents:
diff changeset
  1480
		val1 = pRTTC->RTTC_RTVR;
peter
parents:
diff changeset
  1481
		val2 = pRTTC->RTTC_RTVR;
peter
parents:
diff changeset
  1482
	}	
peter
parents:
diff changeset
  1483
	while(val1 != val2);
peter
parents:
diff changeset
  1484
	return(val1);
peter
parents:
diff changeset
  1485
}
peter
parents:
diff changeset
  1486
/* *****************************************************************************
peter
parents:
diff changeset
  1487
                SOFTWARE API FOR PITC
peter
parents:
diff changeset
  1488
   ***************************************************************************** */
peter
parents:
diff changeset
  1489
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1490
//* \fn    AT91F_PITInit
peter
parents:
diff changeset
  1491
//* \brief System timer init : period in µsecond, system clock freq in MHz
peter
parents:
diff changeset
  1492
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1493
__inline void AT91F_PITInit(
peter
parents:
diff changeset
  1494
        AT91PS_PITC pPITC,
peter
parents:
diff changeset
  1495
        unsigned int period,
peter
parents:
diff changeset
  1496
        unsigned int pit_frequency)
peter
parents:
diff changeset
  1497
{
peter
parents:
diff changeset
  1498
	pPITC->PITC_PIMR = period? (period * pit_frequency + 8) >> 4 : 0; // +8 to avoid %10 and /10
peter
parents:
diff changeset
  1499
	pPITC->PITC_PIMR |= AT91C_PITC_PITEN;	
peter
parents:
diff changeset
  1500
}
peter
parents:
diff changeset
  1501
peter
parents:
diff changeset
  1502
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1503
//* \fn    AT91F_PITSetPIV
peter
parents:
diff changeset
  1504
//* \brief Set the PIT Periodic Interval Value
peter
parents:
diff changeset
  1505
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1506
__inline void AT91F_PITSetPIV(
peter
parents:
diff changeset
  1507
        AT91PS_PITC pPITC,
peter
parents:
diff changeset
  1508
        unsigned int piv)
peter
parents:
diff changeset
  1509
{
peter
parents:
diff changeset
  1510
	pPITC->PITC_PIMR = piv | (pPITC->PITC_PIMR & (AT91C_PITC_PITEN | AT91C_PITC_PITIEN));
peter
parents:
diff changeset
  1511
}
peter
parents:
diff changeset
  1512
peter
parents:
diff changeset
  1513
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1514
//* \fn    AT91F_PITEnableInt
peter
parents:
diff changeset
  1515
//* \brief Enable PIT periodic interrupt
peter
parents:
diff changeset
  1516
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1517
__inline void AT91F_PITEnableInt(
peter
parents:
diff changeset
  1518
        AT91PS_PITC pPITC)
peter
parents:
diff changeset
  1519
{
peter
parents:
diff changeset
  1520
	pPITC->PITC_PIMR |= AT91C_PITC_PITIEN;	
peter
parents:
diff changeset
  1521
}
peter
parents:
diff changeset
  1522
peter
parents:
diff changeset
  1523
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1524
//* \fn    AT91F_PITDisableInt
peter
parents:
diff changeset
  1525
//* \brief Disable PIT periodic interrupt
peter
parents:
diff changeset
  1526
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1527
__inline void AT91F_PITDisableInt(
peter
parents:
diff changeset
  1528
        AT91PS_PITC pPITC)
peter
parents:
diff changeset
  1529
{
peter
parents:
diff changeset
  1530
	pPITC->PITC_PIMR &= ~AT91C_PITC_PITIEN;	
peter
parents:
diff changeset
  1531
}
peter
parents:
diff changeset
  1532
peter
parents:
diff changeset
  1533
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1534
//* \fn    AT91F_PITGetMode
peter
parents:
diff changeset
  1535
//* \brief Read PIT mode register
peter
parents:
diff changeset
  1536
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1537
__inline unsigned int AT91F_PITGetMode(
peter
parents:
diff changeset
  1538
        AT91PS_PITC pPITC)
peter
parents:
diff changeset
  1539
{
peter
parents:
diff changeset
  1540
	return(pPITC->PITC_PIMR);
peter
parents:
diff changeset
  1541
}
peter
parents:
diff changeset
  1542
peter
parents:
diff changeset
  1543
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1544
//* \fn    AT91F_PITGetStatus
peter
parents:
diff changeset
  1545
//* \brief Read PIT status register
peter
parents:
diff changeset
  1546
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1547
__inline unsigned int AT91F_PITGetStatus(
peter
parents:
diff changeset
  1548
        AT91PS_PITC pPITC)
peter
parents:
diff changeset
  1549
{
peter
parents:
diff changeset
  1550
	return(pPITC->PITC_PISR);
peter
parents:
diff changeset
  1551
}
peter
parents:
diff changeset
  1552
peter
parents:
diff changeset
  1553
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1554
//* \fn    AT91F_PITGetPIIR
peter
parents:
diff changeset
  1555
//* \brief Read PIT CPIV and PICNT without ressetting the counters
peter
parents:
diff changeset
  1556
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1557
__inline unsigned int AT91F_PITGetPIIR(
peter
parents:
diff changeset
  1558
        AT91PS_PITC pPITC)
peter
parents:
diff changeset
  1559
{
peter
parents:
diff changeset
  1560
	return(pPITC->PITC_PIIR);
peter
parents:
diff changeset
  1561
}
peter
parents:
diff changeset
  1562
peter
parents:
diff changeset
  1563
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1564
//* \fn    AT91F_PITGetPIVR
peter
parents:
diff changeset
  1565
//* \brief Read System timer CPIV and PICNT without ressetting the counters
peter
parents:
diff changeset
  1566
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1567
__inline unsigned int AT91F_PITGetPIVR(
peter
parents:
diff changeset
  1568
        AT91PS_PITC pPITC)
peter
parents:
diff changeset
  1569
{
peter
parents:
diff changeset
  1570
	return(pPITC->PITC_PIVR);
peter
parents:
diff changeset
  1571
}
peter
parents:
diff changeset
  1572
/* *****************************************************************************
peter
parents:
diff changeset
  1573
                SOFTWARE API FOR WDTC
peter
parents:
diff changeset
  1574
   ***************************************************************************** */
peter
parents:
diff changeset
  1575
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1576
//* \fn    AT91F_WDTSetMode
peter
parents:
diff changeset
  1577
//* \brief Set Watchdog Mode Register
peter
parents:
diff changeset
  1578
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1579
__inline void AT91F_WDTSetMode(
peter
parents:
diff changeset
  1580
        AT91PS_WDTC pWDTC,
peter
parents:
diff changeset
  1581
        unsigned int Mode)
peter
parents:
diff changeset
  1582
{
peter
parents:
diff changeset
  1583
	pWDTC->WDTC_WDMR = Mode;
peter
parents:
diff changeset
  1584
}
peter
parents:
diff changeset
  1585
peter
parents:
diff changeset
  1586
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1587
//* \fn    AT91F_WDTRestart
peter
parents:
diff changeset
  1588
//* \brief Restart Watchdog
peter
parents:
diff changeset
  1589
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1590
__inline void AT91F_WDTRestart(
peter
parents:
diff changeset
  1591
        AT91PS_WDTC pWDTC)
peter
parents:
diff changeset
  1592
{
peter
parents:
diff changeset
  1593
	pWDTC->WDTC_WDCR = 0xA5000001;
peter
parents:
diff changeset
  1594
}
peter
parents:
diff changeset
  1595
peter
parents:
diff changeset
  1596
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1597
//* \fn    AT91F_WDTSGettatus
peter
parents:
diff changeset
  1598
//* \brief Get Watchdog Status
peter
parents:
diff changeset
  1599
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1600
__inline unsigned int AT91F_WDTSGettatus(
peter
parents:
diff changeset
  1601
        AT91PS_WDTC pWDTC)
peter
parents:
diff changeset
  1602
{
peter
parents:
diff changeset
  1603
	return(pWDTC->WDTC_WDSR & 0x3);
peter
parents:
diff changeset
  1604
}
peter
parents:
diff changeset
  1605
peter
parents:
diff changeset
  1606
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1607
//* \fn    AT91F_WDTGetPeriod
peter
parents:
diff changeset
  1608
//* \brief Translate ms into Watchdog Compatible value
peter
parents:
diff changeset
  1609
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1610
__inline unsigned int AT91F_WDTGetPeriod(unsigned int ms)
peter
parents:
diff changeset
  1611
{
peter
parents:
diff changeset
  1612
	if ((ms < 4) || (ms > 16000))
peter
parents:
diff changeset
  1613
		return 0;
peter
parents:
diff changeset
  1614
	return((ms << 8) / 1000);
peter
parents:
diff changeset
  1615
}
peter
parents:
diff changeset
  1616
/* *****************************************************************************
peter
parents:
diff changeset
  1617
                SOFTWARE API FOR VREG
peter
parents:
diff changeset
  1618
   ***************************************************************************** */
peter
parents:
diff changeset
  1619
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1620
//* \fn    AT91F_VREG_Enable_LowPowerMode
peter
parents:
diff changeset
  1621
//* \brief Enable VREG Low Power Mode
peter
parents:
diff changeset
  1622
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1623
__inline void AT91F_VREG_Enable_LowPowerMode(
peter
parents:
diff changeset
  1624
        AT91PS_VREG pVREG)
peter
parents:
diff changeset
  1625
{
peter
parents:
diff changeset
  1626
	pVREG->VREG_MR |= AT91C_VREG_PSTDBY;	
peter
parents:
diff changeset
  1627
}
peter
parents:
diff changeset
  1628
peter
parents:
diff changeset
  1629
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1630
//* \fn    AT91F_VREG_Disable_LowPowerMode
peter
parents:
diff changeset
  1631
//* \brief Disable VREG Low Power Mode
peter
parents:
diff changeset
  1632
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1633
__inline void AT91F_VREG_Disable_LowPowerMode(
peter
parents:
diff changeset
  1634
        AT91PS_VREG pVREG)
peter
parents:
diff changeset
  1635
{
peter
parents:
diff changeset
  1636
	pVREG->VREG_MR &= ~AT91C_VREG_PSTDBY;	
peter
parents:
diff changeset
  1637
}/* *****************************************************************************
peter
parents:
diff changeset
  1638
                SOFTWARE API FOR MC
peter
parents:
diff changeset
  1639
   ***************************************************************************** */
peter
parents:
diff changeset
  1640
peter
parents:
diff changeset
  1641
#define AT91C_MC_CORRECT_KEY  ((unsigned int) 0x5A << 24) // (MC) Correct Protect Key
peter
parents:
diff changeset
  1642
peter
parents:
diff changeset
  1643
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1644
//* \fn    AT91F_MC_Remap
peter
parents:
diff changeset
  1645
//* \brief Make Remap
peter
parents:
diff changeset
  1646
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1647
__inline void AT91F_MC_Remap (void)     //
peter
parents:
diff changeset
  1648
{
peter
parents:
diff changeset
  1649
    AT91PS_MC pMC = (AT91PS_MC) AT91C_BASE_MC;
peter
parents:
diff changeset
  1650
peter
parents:
diff changeset
  1651
    pMC->MC_RCR = AT91C_MC_RCB;
peter
parents:
diff changeset
  1652
}
peter
parents:
diff changeset
  1653
peter
parents:
diff changeset
  1654
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1655
//* \fn    AT91F_MC_EFC_CfgModeReg
peter
parents:
diff changeset
  1656
//* \brief Configure the EFC Mode Register of the MC controller
peter
parents:
diff changeset
  1657
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1658
__inline void AT91F_MC_EFC_CfgModeReg (
peter
parents:
diff changeset
  1659
	AT91PS_MC pMC, // pointer to a MC controller
peter
parents:
diff changeset
  1660
	unsigned int mode)        // mode register
peter
parents:
diff changeset
  1661
{
peter
parents:
diff changeset
  1662
	// Write to the FMR register
peter
parents:
diff changeset
  1663
	pMC->MC_FMR = mode;
peter
parents:
diff changeset
  1664
}
peter
parents:
diff changeset
  1665
peter
parents:
diff changeset
  1666
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1667
//* \fn    AT91F_MC_EFC_GetModeReg
peter
parents:
diff changeset
  1668
//* \brief Return MC EFC Mode Regsiter
peter
parents:
diff changeset
  1669
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1670
__inline unsigned int AT91F_MC_EFC_GetModeReg(
peter
parents:
diff changeset
  1671
	AT91PS_MC pMC) // pointer to a MC controller
peter
parents:
diff changeset
  1672
{
peter
parents:
diff changeset
  1673
	return pMC->MC_FMR;
peter
parents:
diff changeset
  1674
}
peter
parents:
diff changeset
  1675
peter
parents:
diff changeset
  1676
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1677
//* \fn    AT91F_MC_EFC_ComputeFMCN
peter
parents:
diff changeset
  1678
//* \brief Return MC EFC Mode Regsiter
peter
parents:
diff changeset
  1679
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1680
__inline unsigned int AT91F_MC_EFC_ComputeFMCN(
peter
parents:
diff changeset
  1681
	int master_clock) // master clock in Hz
peter
parents:
diff changeset
  1682
{
peter
parents:
diff changeset
  1683
	return (master_clock/1000000 +2);
peter
parents:
diff changeset
  1684
}
peter
parents:
diff changeset
  1685
peter
parents:
diff changeset
  1686
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1687
//* \fn    AT91F_MC_EFC_PerformCmd
peter
parents:
diff changeset
  1688
//* \brief Perform EFC Command
peter
parents:
diff changeset
  1689
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1690
__inline void AT91F_MC_EFC_PerformCmd (
peter
parents:
diff changeset
  1691
	AT91PS_MC pMC, // pointer to a MC controller
peter
parents:
diff changeset
  1692
    unsigned int transfer_cmd)
peter
parents:
diff changeset
  1693
{
peter
parents:
diff changeset
  1694
	pMC->MC_FCR = transfer_cmd;	
peter
parents:
diff changeset
  1695
}
peter
parents:
diff changeset
  1696
peter
parents:
diff changeset
  1697
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1698
//* \fn    AT91F_MC_EFC_GetStatus
peter
parents:
diff changeset
  1699
//* \brief Return MC EFC Status
peter
parents:
diff changeset
  1700
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1701
__inline unsigned int AT91F_MC_EFC_GetStatus(
peter
parents:
diff changeset
  1702
	AT91PS_MC pMC) // pointer to a MC controller
peter
parents:
diff changeset
  1703
{
peter
parents:
diff changeset
  1704
	return pMC->MC_FSR;
peter
parents:
diff changeset
  1705
}
peter
parents:
diff changeset
  1706
peter
parents:
diff changeset
  1707
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1708
//* \fn    AT91F_MC_EFC_IsInterruptMasked
peter
parents:
diff changeset
  1709
//* \brief Test if EFC MC Interrupt is Masked
peter
parents:
diff changeset
  1710
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1711
__inline unsigned int AT91F_MC_EFC_IsInterruptMasked(
peter
parents:
diff changeset
  1712
        AT91PS_MC pMC,   // \arg  pointer to a MC controller
peter
parents:
diff changeset
  1713
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  1714
{
peter
parents:
diff changeset
  1715
	return (AT91F_MC_EFC_GetModeReg(pMC) & flag);
peter
parents:
diff changeset
  1716
}
peter
parents:
diff changeset
  1717
peter
parents:
diff changeset
  1718
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1719
//* \fn    AT91F_MC_EFC_IsInterruptSet
peter
parents:
diff changeset
  1720
//* \brief Test if EFC MC Interrupt is Set
peter
parents:
diff changeset
  1721
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1722
__inline unsigned int AT91F_MC_EFC_IsInterruptSet(
peter
parents:
diff changeset
  1723
        AT91PS_MC pMC,   // \arg  pointer to a MC controller
peter
parents:
diff changeset
  1724
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  1725
{
peter
parents:
diff changeset
  1726
	return (AT91F_MC_EFC_GetStatus(pMC) & flag);
peter
parents:
diff changeset
  1727
}
peter
parents:
diff changeset
  1728
peter
parents:
diff changeset
  1729
/* *****************************************************************************
peter
parents:
diff changeset
  1730
                SOFTWARE API FOR SPI
peter
parents:
diff changeset
  1731
   ***************************************************************************** */
peter
parents:
diff changeset
  1732
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1733
//* \fn    AT91F_SPI_CfgCs
peter
parents:
diff changeset
  1734
//* \brief Configure SPI chip select register
peter
parents:
diff changeset
  1735
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1736
__inline void AT91F_SPI_CfgCs (
peter
parents:
diff changeset
  1737
	AT91PS_SPI pSPI,     // pointer to a SPI controller
peter
parents:
diff changeset
  1738
	int cs,     // SPI cs number (0 to 3)
peter
parents:
diff changeset
  1739
 	int val)   //  chip select register
peter
parents:
diff changeset
  1740
{
peter
parents:
diff changeset
  1741
	//* Write to the CSR register
peter
parents:
diff changeset
  1742
	*(pSPI->SPI_CSR + cs) = val;
peter
parents:
diff changeset
  1743
}
peter
parents:
diff changeset
  1744
peter
parents:
diff changeset
  1745
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1746
//* \fn    AT91F_SPI_EnableIt
peter
parents:
diff changeset
  1747
//* \brief Enable SPI interrupt
peter
parents:
diff changeset
  1748
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1749
__inline void AT91F_SPI_EnableIt (
peter
parents:
diff changeset
  1750
	AT91PS_SPI pSPI,     // pointer to a SPI controller
peter
parents:
diff changeset
  1751
	unsigned int flag)   // IT to be enabled
peter
parents:
diff changeset
  1752
{
peter
parents:
diff changeset
  1753
	//* Write to the IER register
peter
parents:
diff changeset
  1754
	pSPI->SPI_IER = flag;
peter
parents:
diff changeset
  1755
}
peter
parents:
diff changeset
  1756
peter
parents:
diff changeset
  1757
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1758
//* \fn    AT91F_SPI_DisableIt
peter
parents:
diff changeset
  1759
//* \brief Disable SPI interrupt
peter
parents:
diff changeset
  1760
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1761
__inline void AT91F_SPI_DisableIt (
peter
parents:
diff changeset
  1762
	AT91PS_SPI pSPI, // pointer to a SPI controller
peter
parents:
diff changeset
  1763
	unsigned int flag) // IT to be disabled
peter
parents:
diff changeset
  1764
{
peter
parents:
diff changeset
  1765
	//* Write to the IDR register
peter
parents:
diff changeset
  1766
	pSPI->SPI_IDR = flag;
peter
parents:
diff changeset
  1767
}
peter
parents:
diff changeset
  1768
peter
parents:
diff changeset
  1769
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1770
//* \fn    AT91F_SPI_Reset
peter
parents:
diff changeset
  1771
//* \brief Reset the SPI controller
peter
parents:
diff changeset
  1772
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1773
__inline void AT91F_SPI_Reset (
peter
parents:
diff changeset
  1774
	AT91PS_SPI pSPI // pointer to a SPI controller
peter
parents:
diff changeset
  1775
	)
peter
parents:
diff changeset
  1776
{
peter
parents:
diff changeset
  1777
	//* Write to the CR register
peter
parents:
diff changeset
  1778
	pSPI->SPI_CR = AT91C_SPI_SWRST;
peter
parents:
diff changeset
  1779
}
peter
parents:
diff changeset
  1780
peter
parents:
diff changeset
  1781
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1782
//* \fn    AT91F_SPI_Enable
peter
parents:
diff changeset
  1783
//* \brief Enable the SPI controller
peter
parents:
diff changeset
  1784
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1785
__inline void AT91F_SPI_Enable (
peter
parents:
diff changeset
  1786
	AT91PS_SPI pSPI // pointer to a SPI controller
peter
parents:
diff changeset
  1787
	)
peter
parents:
diff changeset
  1788
{
peter
parents:
diff changeset
  1789
	//* Write to the CR register
peter
parents:
diff changeset
  1790
	pSPI->SPI_CR = AT91C_SPI_SPIEN;
peter
parents:
diff changeset
  1791
}
peter
parents:
diff changeset
  1792
peter
parents:
diff changeset
  1793
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1794
//* \fn    AT91F_SPI_Disable
peter
parents:
diff changeset
  1795
//* \brief Disable the SPI controller
peter
parents:
diff changeset
  1796
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1797
__inline void AT91F_SPI_Disable (
peter
parents:
diff changeset
  1798
	AT91PS_SPI pSPI // pointer to a SPI controller
peter
parents:
diff changeset
  1799
	)
peter
parents:
diff changeset
  1800
{
peter
parents:
diff changeset
  1801
	//* Write to the CR register
peter
parents:
diff changeset
  1802
	pSPI->SPI_CR = AT91C_SPI_SPIDIS;
peter
parents:
diff changeset
  1803
}
peter
parents:
diff changeset
  1804
peter
parents:
diff changeset
  1805
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1806
//* \fn    AT91F_SPI_CfgMode
peter
parents:
diff changeset
  1807
//* \brief Enable the SPI controller
peter
parents:
diff changeset
  1808
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1809
__inline void AT91F_SPI_CfgMode (
peter
parents:
diff changeset
  1810
	AT91PS_SPI pSPI, // pointer to a SPI controller
peter
parents:
diff changeset
  1811
	int mode)        // mode register
peter
parents:
diff changeset
  1812
{
peter
parents:
diff changeset
  1813
	//* Write to the MR register
peter
parents:
diff changeset
  1814
	pSPI->SPI_MR = mode;
peter
parents:
diff changeset
  1815
}
peter
parents:
diff changeset
  1816
peter
parents:
diff changeset
  1817
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1818
//* \fn    AT91F_SPI_CfgPCS
peter
parents:
diff changeset
  1819
//* \brief Switch to the correct PCS of SPI Mode Register : Fixed Peripheral Selected
peter
parents:
diff changeset
  1820
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1821
__inline void AT91F_SPI_CfgPCS (
peter
parents:
diff changeset
  1822
	AT91PS_SPI pSPI, // pointer to a SPI controller
peter
parents:
diff changeset
  1823
	char PCS_Device) // PCS of the Device
peter
parents:
diff changeset
  1824
{	
peter
parents:
diff changeset
  1825
 	//* Write to the MR register
peter
parents:
diff changeset
  1826
	pSPI->SPI_MR &= 0xFFF0FFFF;
peter
parents:
diff changeset
  1827
	pSPI->SPI_MR |= ( (PCS_Device<<16) & AT91C_SPI_PCS );
peter
parents:
diff changeset
  1828
}
peter
parents:
diff changeset
  1829
peter
parents:
diff changeset
  1830
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1831
//* \fn    AT91F_SPI_ReceiveFrame
peter
parents:
diff changeset
  1832
//* \brief Return 2 if PDC has been initialized with Buffer and Next Buffer, 1 if PDC has been initializaed with Next Buffer, 0 if PDC is busy
peter
parents:
diff changeset
  1833
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1834
__inline unsigned int AT91F_SPI_ReceiveFrame (
peter
parents:
diff changeset
  1835
	AT91PS_SPI pSPI,
peter
parents:
diff changeset
  1836
	char *pBuffer,
peter
parents:
diff changeset
  1837
	unsigned int szBuffer,
peter
parents:
diff changeset
  1838
	char *pNextBuffer,
peter
parents:
diff changeset
  1839
	unsigned int szNextBuffer )
peter
parents:
diff changeset
  1840
{
peter
parents:
diff changeset
  1841
	return AT91F_PDC_ReceiveFrame(
peter
parents:
diff changeset
  1842
		(AT91PS_PDC) &(pSPI->SPI_RPR),
peter
parents:
diff changeset
  1843
		pBuffer,
peter
parents:
diff changeset
  1844
		szBuffer,
peter
parents:
diff changeset
  1845
		pNextBuffer,
peter
parents:
diff changeset
  1846
		szNextBuffer);
peter
parents:
diff changeset
  1847
}
peter
parents:
diff changeset
  1848
peter
parents:
diff changeset
  1849
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1850
//* \fn    AT91F_SPI_SendFrame
peter
parents:
diff changeset
  1851
//* \brief Return 2 if PDC has been initialized with Buffer and Next Buffer, 1 if PDC has been initializaed with Next Buffer, 0 if PDC is bSPIy
peter
parents:
diff changeset
  1852
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1853
__inline unsigned int AT91F_SPI_SendFrame(
peter
parents:
diff changeset
  1854
	AT91PS_SPI pSPI,
peter
parents:
diff changeset
  1855
	char *pBuffer,
peter
parents:
diff changeset
  1856
	unsigned int szBuffer,
peter
parents:
diff changeset
  1857
	char *pNextBuffer,
peter
parents:
diff changeset
  1858
	unsigned int szNextBuffer )
peter
parents:
diff changeset
  1859
{
peter
parents:
diff changeset
  1860
	return AT91F_PDC_SendFrame(
peter
parents:
diff changeset
  1861
		(AT91PS_PDC) &(pSPI->SPI_RPR),
peter
parents:
diff changeset
  1862
		pBuffer,
peter
parents:
diff changeset
  1863
		szBuffer,
peter
parents:
diff changeset
  1864
		pNextBuffer,
peter
parents:
diff changeset
  1865
		szNextBuffer);
peter
parents:
diff changeset
  1866
}
peter
parents:
diff changeset
  1867
peter
parents:
diff changeset
  1868
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1869
//* \fn    AT91F_SPI_Close
peter
parents:
diff changeset
  1870
//* \brief Close SPI: disable IT disable transfert, close PDC
peter
parents:
diff changeset
  1871
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1872
__inline void AT91F_SPI_Close (
peter
parents:
diff changeset
  1873
	AT91PS_SPI pSPI)     // \arg pointer to a SPI controller
peter
parents:
diff changeset
  1874
{
peter
parents:
diff changeset
  1875
    //* Reset all the Chip Select register
peter
parents:
diff changeset
  1876
    pSPI->SPI_CSR[0] = 0 ;
peter
parents:
diff changeset
  1877
    pSPI->SPI_CSR[1] = 0 ;
peter
parents:
diff changeset
  1878
    pSPI->SPI_CSR[2] = 0 ;
peter
parents:
diff changeset
  1879
    pSPI->SPI_CSR[3] = 0 ;
peter
parents:
diff changeset
  1880
peter
parents:
diff changeset
  1881
    //* Reset the SPI mode
peter
parents:
diff changeset
  1882
    pSPI->SPI_MR = 0  ;
peter
parents:
diff changeset
  1883
peter
parents:
diff changeset
  1884
    //* Disable all interrupts
peter
parents:
diff changeset
  1885
    pSPI->SPI_IDR = 0xFFFFFFFF ;
peter
parents:
diff changeset
  1886
peter
parents:
diff changeset
  1887
    //* Abort the Peripheral Data Transfers
peter
parents:
diff changeset
  1888
    AT91F_PDC_Close((AT91PS_PDC) &(pSPI->SPI_RPR));
peter
parents:
diff changeset
  1889
peter
parents:
diff changeset
  1890
    //* Disable receiver and transmitter and stop any activity immediately
peter
parents:
diff changeset
  1891
    pSPI->SPI_CR = AT91C_SPI_SPIDIS;
peter
parents:
diff changeset
  1892
}
peter
parents:
diff changeset
  1893
peter
parents:
diff changeset
  1894
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1895
//* \fn    AT91F_SPI_PutChar
peter
parents:
diff changeset
  1896
//* \brief Send a character,does not check if ready to send
peter
parents:
diff changeset
  1897
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1898
__inline void AT91F_SPI_PutChar (
peter
parents:
diff changeset
  1899
	AT91PS_SPI pSPI,
peter
parents:
diff changeset
  1900
	unsigned int character,
peter
parents:
diff changeset
  1901
             unsigned int cs_number )
peter
parents:
diff changeset
  1902
{
peter
parents:
diff changeset
  1903
    unsigned int value_for_cs;
peter
parents:
diff changeset
  1904
    value_for_cs = (~(1 << cs_number)) & 0xF;  //Place a zero among a 4 ONEs number
peter
parents:
diff changeset
  1905
    pSPI->SPI_TDR = (character & 0xFFFF) | (value_for_cs << 16);
peter
parents:
diff changeset
  1906
}
peter
parents:
diff changeset
  1907
peter
parents:
diff changeset
  1908
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1909
//* \fn    AT91F_SPI_GetChar
peter
parents:
diff changeset
  1910
//* \brief Receive a character,does not check if a character is available
peter
parents:
diff changeset
  1911
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1912
__inline int AT91F_SPI_GetChar (
peter
parents:
diff changeset
  1913
	const AT91PS_SPI pSPI)
peter
parents:
diff changeset
  1914
{
peter
parents:
diff changeset
  1915
    return((pSPI->SPI_RDR) & 0xFFFF);
peter
parents:
diff changeset
  1916
}
peter
parents:
diff changeset
  1917
peter
parents:
diff changeset
  1918
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1919
//* \fn    AT91F_SPI_GetInterruptMaskStatus
peter
parents:
diff changeset
  1920
//* \brief Return SPI Interrupt Mask Status
peter
parents:
diff changeset
  1921
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1922
__inline unsigned int AT91F_SPI_GetInterruptMaskStatus( // \return SPI Interrupt Mask Status
peter
parents:
diff changeset
  1923
        AT91PS_SPI pSpi) // \arg  pointer to a SPI controller
peter
parents:
diff changeset
  1924
{
peter
parents:
diff changeset
  1925
        return pSpi->SPI_IMR;
peter
parents:
diff changeset
  1926
}
peter
parents:
diff changeset
  1927
peter
parents:
diff changeset
  1928
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1929
//* \fn    AT91F_SPI_IsInterruptMasked
peter
parents:
diff changeset
  1930
//* \brief Test if SPI Interrupt is Masked
peter
parents:
diff changeset
  1931
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1932
__inline int AT91F_SPI_IsInterruptMasked(
peter
parents:
diff changeset
  1933
        AT91PS_SPI pSpi,   // \arg  pointer to a SPI controller
peter
parents:
diff changeset
  1934
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  1935
{
peter
parents:
diff changeset
  1936
        return (AT91F_SPI_GetInterruptMaskStatus(pSpi) & flag);
peter
parents:
diff changeset
  1937
}
peter
parents:
diff changeset
  1938
peter
parents:
diff changeset
  1939
/* *****************************************************************************
peter
parents:
diff changeset
  1940
                SOFTWARE API FOR USART
peter
parents:
diff changeset
  1941
   ***************************************************************************** */
peter
parents:
diff changeset
  1942
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1943
//* \fn    AT91F_US_Baudrate
peter
parents:
diff changeset
  1944
//* \brief Calculate the baudrate
peter
parents:
diff changeset
  1945
//* Standard Asynchronous Mode : 8 bits , 1 stop , no parity
peter
parents:
diff changeset
  1946
#define AT91C_US_ASYNC_MODE ( AT91C_US_USMODE_NORMAL + \
peter
parents:
diff changeset
  1947
                        AT91C_US_NBSTOP_1_BIT + \
peter
parents:
diff changeset
  1948
                        AT91C_US_PAR_NONE + \
peter
parents:
diff changeset
  1949
                        AT91C_US_CHRL_8_BITS + \
peter
parents:
diff changeset
  1950
                        AT91C_US_CLKS_CLOCK )
peter
parents:
diff changeset
  1951
peter
parents:
diff changeset
  1952
//* Standard External Asynchronous Mode : 8 bits , 1 stop , no parity
peter
parents:
diff changeset
  1953
#define AT91C_US_ASYNC_SCK_MODE ( AT91C_US_USMODE_NORMAL + \
peter
parents:
diff changeset
  1954
                            AT91C_US_NBSTOP_1_BIT + \
peter
parents:
diff changeset
  1955
                            AT91C_US_PAR_NONE + \
peter
parents:
diff changeset
  1956
                            AT91C_US_CHRL_8_BITS + \
peter
parents:
diff changeset
  1957
                            AT91C_US_CLKS_EXT )
peter
parents:
diff changeset
  1958
peter
parents:
diff changeset
  1959
//* Standard Synchronous Mode : 8 bits , 1 stop , no parity
peter
parents:
diff changeset
  1960
#define AT91C_US_SYNC_MODE ( AT91C_US_SYNC + \
peter
parents:
diff changeset
  1961
                       AT91C_US_USMODE_NORMAL + \
peter
parents:
diff changeset
  1962
                       AT91C_US_NBSTOP_1_BIT + \
peter
parents:
diff changeset
  1963
                       AT91C_US_PAR_NONE + \
peter
parents:
diff changeset
  1964
                       AT91C_US_CHRL_8_BITS + \
peter
parents:
diff changeset
  1965
                       AT91C_US_CLKS_CLOCK )
peter
parents:
diff changeset
  1966
peter
parents:
diff changeset
  1967
//* SCK used Label
peter
parents:
diff changeset
  1968
#define AT91C_US_SCK_USED (AT91C_US_CKLO | AT91C_US_CLKS_EXT)
peter
parents:
diff changeset
  1969
peter
parents:
diff changeset
  1970
//* Standard ISO T=0 Mode : 8 bits , 1 stop , parity
peter
parents:
diff changeset
  1971
#define AT91C_US_ISO_READER_MODE ( AT91C_US_USMODE_ISO7816_0 + \
peter
parents:
diff changeset
  1972
					   		 AT91C_US_CLKS_CLOCK +\
peter
parents:
diff changeset
  1973
                       		 AT91C_US_NBSTOP_1_BIT + \
peter
parents:
diff changeset
  1974
                       		 AT91C_US_PAR_EVEN + \
peter
parents:
diff changeset
  1975
                       		 AT91C_US_CHRL_8_BITS + \
peter
parents:
diff changeset
  1976
                       		 AT91C_US_CKLO +\
peter
parents:
diff changeset
  1977
                       		 AT91C_US_OVER)
peter
parents:
diff changeset
  1978
peter
parents:
diff changeset
  1979
//* Standard IRDA mode
peter
parents:
diff changeset
  1980
#define AT91C_US_ASYNC_IRDA_MODE (  AT91C_US_USMODE_IRDA + \
peter
parents:
diff changeset
  1981
                            AT91C_US_NBSTOP_1_BIT + \
peter
parents:
diff changeset
  1982
                            AT91C_US_PAR_NONE + \
peter
parents:
diff changeset
  1983
                            AT91C_US_CHRL_8_BITS + \
peter
parents:
diff changeset
  1984
                            AT91C_US_CLKS_CLOCK )
peter
parents:
diff changeset
  1985
peter
parents:
diff changeset
  1986
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1987
//* \fn    AT91F_US_Baudrate
peter
parents:
diff changeset
  1988
//* \brief Caluculate baud_value according to the main clock and the baud rate
peter
parents:
diff changeset
  1989
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  1990
__inline unsigned int AT91F_US_Baudrate (
peter
parents:
diff changeset
  1991
	const unsigned int main_clock, // \arg peripheral clock
peter
parents:
diff changeset
  1992
	const unsigned int baud_rate)  // \arg UART baudrate
peter
parents:
diff changeset
  1993
{
peter
parents:
diff changeset
  1994
	unsigned int baud_value = ((main_clock*10)/(baud_rate * 16));
peter
parents:
diff changeset
  1995
	if ((baud_value % 10) >= 5)
peter
parents:
diff changeset
  1996
		baud_value = (baud_value / 10) + 1;
peter
parents:
diff changeset
  1997
	else
peter
parents:
diff changeset
  1998
		baud_value /= 10;
peter
parents:
diff changeset
  1999
	return baud_value;
peter
parents:
diff changeset
  2000
}
peter
parents:
diff changeset
  2001
peter
parents:
diff changeset
  2002
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2003
//* \fn    AT91F_US_SetBaudrate
peter
parents:
diff changeset
  2004
//* \brief Set the baudrate according to the CPU clock
peter
parents:
diff changeset
  2005
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2006
__inline void AT91F_US_SetBaudrate (
peter
parents:
diff changeset
  2007
	AT91PS_USART pUSART,    // \arg pointer to a USART controller
peter
parents:
diff changeset
  2008
	unsigned int mainClock, // \arg peripheral clock
peter
parents:
diff changeset
  2009
	unsigned int speed)     // \arg UART baudrate
peter
parents:
diff changeset
  2010
{
peter
parents:
diff changeset
  2011
	//* Define the baud rate divisor register
peter
parents:
diff changeset
  2012
	pUSART->US_BRGR = AT91F_US_Baudrate(mainClock, speed);
peter
parents:
diff changeset
  2013
}
peter
parents:
diff changeset
  2014
peter
parents:
diff changeset
  2015
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2016
//* \fn    AT91F_US_SetTimeguard
peter
parents:
diff changeset
  2017
//* \brief Set USART timeguard
peter
parents:
diff changeset
  2018
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2019
__inline void AT91F_US_SetTimeguard (
peter
parents:
diff changeset
  2020
	AT91PS_USART pUSART,    // \arg pointer to a USART controller
peter
parents:
diff changeset
  2021
	unsigned int timeguard) // \arg timeguard value
peter
parents:
diff changeset
  2022
{
peter
parents:
diff changeset
  2023
	//* Write the Timeguard Register
peter
parents:
diff changeset
  2024
	pUSART->US_TTGR = timeguard ;
peter
parents:
diff changeset
  2025
}
peter
parents:
diff changeset
  2026
peter
parents:
diff changeset
  2027
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2028
//* \fn    AT91F_US_EnableIt
peter
parents:
diff changeset
  2029
//* \brief Enable USART IT
peter
parents:
diff changeset
  2030
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2031
__inline void AT91F_US_EnableIt (
peter
parents:
diff changeset
  2032
	AT91PS_USART pUSART, // \arg pointer to a USART controller
peter
parents:
diff changeset
  2033
	unsigned int flag)   // \arg IT to be enabled
peter
parents:
diff changeset
  2034
{
peter
parents:
diff changeset
  2035
	//* Write to the IER register
peter
parents:
diff changeset
  2036
	pUSART->US_IER = flag;
peter
parents:
diff changeset
  2037
}
peter
parents:
diff changeset
  2038
peter
parents:
diff changeset
  2039
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2040
//* \fn    AT91F_US_DisableIt
peter
parents:
diff changeset
  2041
//* \brief Disable USART IT
peter
parents:
diff changeset
  2042
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2043
__inline void AT91F_US_DisableIt (
peter
parents:
diff changeset
  2044
	AT91PS_USART pUSART, // \arg pointer to a USART controller
peter
parents:
diff changeset
  2045
	unsigned int flag)   // \arg IT to be disabled
peter
parents:
diff changeset
  2046
{
peter
parents:
diff changeset
  2047
	//* Write to the IER register
peter
parents:
diff changeset
  2048
	pUSART->US_IDR = flag;
peter
parents:
diff changeset
  2049
}
peter
parents:
diff changeset
  2050
peter
parents:
diff changeset
  2051
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2052
//* \fn    AT91F_US_Configure
peter
parents:
diff changeset
  2053
//* \brief Configure USART
peter
parents:
diff changeset
  2054
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2055
__inline void AT91F_US_Configure (
peter
parents:
diff changeset
  2056
	AT91PS_USART pUSART,     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2057
	unsigned int mainClock,  // \arg peripheral clock
peter
parents:
diff changeset
  2058
	unsigned int mode ,      // \arg mode Register to be programmed
peter
parents:
diff changeset
  2059
	unsigned int baudRate ,  // \arg baudrate to be programmed
peter
parents:
diff changeset
  2060
	unsigned int timeguard ) // \arg timeguard to be programmed
peter
parents:
diff changeset
  2061
{
peter
parents:
diff changeset
  2062
    //* Disable interrupts
peter
parents:
diff changeset
  2063
    pUSART->US_IDR = (unsigned int) -1;
peter
parents:
diff changeset
  2064
peter
parents:
diff changeset
  2065
    //* Reset receiver and transmitter
peter
parents:
diff changeset
  2066
    pUSART->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS ;
peter
parents:
diff changeset
  2067
peter
parents:
diff changeset
  2068
	//* Define the baud rate divisor register
peter
parents:
diff changeset
  2069
	AT91F_US_SetBaudrate(pUSART, mainClock, baudRate);
peter
parents:
diff changeset
  2070
peter
parents:
diff changeset
  2071
	//* Write the Timeguard Register
peter
parents:
diff changeset
  2072
	AT91F_US_SetTimeguard(pUSART, timeguard);
peter
parents:
diff changeset
  2073
peter
parents:
diff changeset
  2074
    //* Clear Transmit and Receive Counters
peter
parents:
diff changeset
  2075
    AT91F_PDC_Open((AT91PS_PDC) &(pUSART->US_RPR));
peter
parents:
diff changeset
  2076
peter
parents:
diff changeset
  2077
    //* Define the USART mode
peter
parents:
diff changeset
  2078
    pUSART->US_MR = mode  ;
peter
parents:
diff changeset
  2079
peter
parents:
diff changeset
  2080
}
peter
parents:
diff changeset
  2081
peter
parents:
diff changeset
  2082
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2083
//* \fn    AT91F_US_EnableRx
peter
parents:
diff changeset
  2084
//* \brief Enable receiving characters
peter
parents:
diff changeset
  2085
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2086
__inline void AT91F_US_EnableRx (
peter
parents:
diff changeset
  2087
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2088
{
peter
parents:
diff changeset
  2089
    //* Enable receiver
peter
parents:
diff changeset
  2090
    pUSART->US_CR = AT91C_US_RXEN;
peter
parents:
diff changeset
  2091
}
peter
parents:
diff changeset
  2092
peter
parents:
diff changeset
  2093
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2094
//* \fn    AT91F_US_EnableTx
peter
parents:
diff changeset
  2095
//* \brief Enable sending characters
peter
parents:
diff changeset
  2096
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2097
__inline void AT91F_US_EnableTx (
peter
parents:
diff changeset
  2098
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2099
{
peter
parents:
diff changeset
  2100
    //* Enable  transmitter
peter
parents:
diff changeset
  2101
    pUSART->US_CR = AT91C_US_TXEN;
peter
parents:
diff changeset
  2102
}
peter
parents:
diff changeset
  2103
peter
parents:
diff changeset
  2104
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2105
//* \fn    AT91F_US_ResetRx
peter
parents:
diff changeset
  2106
//* \brief Reset Receiver and re-enable it
peter
parents:
diff changeset
  2107
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2108
__inline void AT91F_US_ResetRx (
peter
parents:
diff changeset
  2109
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2110
{
peter
parents:
diff changeset
  2111
	//* Reset receiver
peter
parents:
diff changeset
  2112
	pUSART->US_CR = AT91C_US_RSTRX;
peter
parents:
diff changeset
  2113
    //* Re-Enable receiver
peter
parents:
diff changeset
  2114
    pUSART->US_CR = AT91C_US_RXEN;
peter
parents:
diff changeset
  2115
}
peter
parents:
diff changeset
  2116
peter
parents:
diff changeset
  2117
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2118
//* \fn    AT91F_US_ResetTx
peter
parents:
diff changeset
  2119
//* \brief Reset Transmitter and re-enable it
peter
parents:
diff changeset
  2120
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2121
__inline void AT91F_US_ResetTx (
peter
parents:
diff changeset
  2122
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2123
{
peter
parents:
diff changeset
  2124
	//* Reset transmitter
peter
parents:
diff changeset
  2125
	pUSART->US_CR = AT91C_US_RSTTX;
peter
parents:
diff changeset
  2126
    //* Enable transmitter
peter
parents:
diff changeset
  2127
    pUSART->US_CR = AT91C_US_TXEN;
peter
parents:
diff changeset
  2128
}
peter
parents:
diff changeset
  2129
peter
parents:
diff changeset
  2130
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2131
//* \fn    AT91F_US_DisableRx
peter
parents:
diff changeset
  2132
//* \brief Disable Receiver
peter
parents:
diff changeset
  2133
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2134
__inline void AT91F_US_DisableRx (
peter
parents:
diff changeset
  2135
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2136
{
peter
parents:
diff changeset
  2137
    //* Disable receiver
peter
parents:
diff changeset
  2138
    pUSART->US_CR = AT91C_US_RXDIS;
peter
parents:
diff changeset
  2139
}
peter
parents:
diff changeset
  2140
peter
parents:
diff changeset
  2141
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2142
//* \fn    AT91F_US_DisableTx
peter
parents:
diff changeset
  2143
//* \brief Disable Transmitter
peter
parents:
diff changeset
  2144
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2145
__inline void AT91F_US_DisableTx (
peter
parents:
diff changeset
  2146
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2147
{
peter
parents:
diff changeset
  2148
    //* Disable transmitter
peter
parents:
diff changeset
  2149
    pUSART->US_CR = AT91C_US_TXDIS;
peter
parents:
diff changeset
  2150
}
peter
parents:
diff changeset
  2151
peter
parents:
diff changeset
  2152
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2153
//* \fn    AT91F_US_Close
peter
parents:
diff changeset
  2154
//* \brief Close USART: disable IT disable receiver and transmitter, close PDC
peter
parents:
diff changeset
  2155
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2156
__inline void AT91F_US_Close (
peter
parents:
diff changeset
  2157
	AT91PS_USART pUSART)     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2158
{
peter
parents:
diff changeset
  2159
    //* Reset the baud rate divisor register
peter
parents:
diff changeset
  2160
    pUSART->US_BRGR = 0 ;
peter
parents:
diff changeset
  2161
peter
parents:
diff changeset
  2162
    //* Reset the USART mode
peter
parents:
diff changeset
  2163
    pUSART->US_MR = 0  ;
peter
parents:
diff changeset
  2164
peter
parents:
diff changeset
  2165
    //* Reset the Timeguard Register
peter
parents:
diff changeset
  2166
    pUSART->US_TTGR = 0;
peter
parents:
diff changeset
  2167
peter
parents:
diff changeset
  2168
    //* Disable all interrupts
peter
parents:
diff changeset
  2169
    pUSART->US_IDR = 0xFFFFFFFF ;
peter
parents:
diff changeset
  2170
peter
parents:
diff changeset
  2171
    //* Abort the Peripheral Data Transfers
peter
parents:
diff changeset
  2172
    AT91F_PDC_Close((AT91PS_PDC) &(pUSART->US_RPR));
peter
parents:
diff changeset
  2173
peter
parents:
diff changeset
  2174
    //* Disable receiver and transmitter and stop any activity immediately
peter
parents:
diff changeset
  2175
    pUSART->US_CR = AT91C_US_TXDIS | AT91C_US_RXDIS | AT91C_US_RSTTX | AT91C_US_RSTRX ;
peter
parents:
diff changeset
  2176
}
peter
parents:
diff changeset
  2177
peter
parents:
diff changeset
  2178
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2179
//* \fn    AT91F_US_TxReady
peter
parents:
diff changeset
  2180
//* \brief Return 1 if a character can be written in US_THR
peter
parents:
diff changeset
  2181
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2182
__inline unsigned int AT91F_US_TxReady (
peter
parents:
diff changeset
  2183
	AT91PS_USART pUSART )     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2184
{
peter
parents:
diff changeset
  2185
    return (pUSART->US_CSR & AT91C_US_TXRDY);
peter
parents:
diff changeset
  2186
}
peter
parents:
diff changeset
  2187
peter
parents:
diff changeset
  2188
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2189
//* \fn    AT91F_US_RxReady
peter
parents:
diff changeset
  2190
//* \brief Return 1 if a character can be read in US_RHR
peter
parents:
diff changeset
  2191
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2192
__inline unsigned int AT91F_US_RxReady (
peter
parents:
diff changeset
  2193
	AT91PS_USART pUSART )     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2194
{
peter
parents:
diff changeset
  2195
    return (pUSART->US_CSR & AT91C_US_RXRDY);
peter
parents:
diff changeset
  2196
}
peter
parents:
diff changeset
  2197
peter
parents:
diff changeset
  2198
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2199
//* \fn    AT91F_US_Error
peter
parents:
diff changeset
  2200
//* \brief Return the error flag
peter
parents:
diff changeset
  2201
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2202
__inline unsigned int AT91F_US_Error (
peter
parents:
diff changeset
  2203
	AT91PS_USART pUSART )     // \arg pointer to a USART controller
peter
parents:
diff changeset
  2204
{
peter
parents:
diff changeset
  2205
    return (pUSART->US_CSR &
peter
parents:
diff changeset
  2206
    	(AT91C_US_OVRE |  // Overrun error
peter
parents:
diff changeset
  2207
    	 AT91C_US_FRAME | // Framing error
peter
parents:
diff changeset
  2208
    	 AT91C_US_PARE));  // Parity error
peter
parents:
diff changeset
  2209
}
peter
parents:
diff changeset
  2210
peter
parents:
diff changeset
  2211
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2212
//* \fn    AT91F_US_PutChar
peter
parents:
diff changeset
  2213
//* \brief Send a character,does not check if ready to send
peter
parents:
diff changeset
  2214
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2215
__inline void AT91F_US_PutChar (
peter
parents:
diff changeset
  2216
	AT91PS_USART pUSART,
peter
parents:
diff changeset
  2217
	int character )
peter
parents:
diff changeset
  2218
{
peter
parents:
diff changeset
  2219
    pUSART->US_THR = (character & 0x1FF);
peter
parents:
diff changeset
  2220
}
peter
parents:
diff changeset
  2221
peter
parents:
diff changeset
  2222
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2223
//* \fn    AT91F_US_GetChar
peter
parents:
diff changeset
  2224
//* \brief Receive a character,does not check if a character is available
peter
parents:
diff changeset
  2225
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2226
__inline int AT91F_US_GetChar (
peter
parents:
diff changeset
  2227
	const AT91PS_USART pUSART)
peter
parents:
diff changeset
  2228
{
peter
parents:
diff changeset
  2229
    return((pUSART->US_RHR) & 0x1FF);
peter
parents:
diff changeset
  2230
}
peter
parents:
diff changeset
  2231
peter
parents:
diff changeset
  2232
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2233
//* \fn    AT91F_US_SendFrame
peter
parents:
diff changeset
  2234
//* \brief Return 2 if PDC has been initialized with Buffer and Next Buffer, 1 if PDC has been initializaed with Next Buffer, 0 if PDC is busy
peter
parents:
diff changeset
  2235
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2236
__inline unsigned int AT91F_US_SendFrame(
peter
parents:
diff changeset
  2237
	AT91PS_USART pUSART,
peter
parents:
diff changeset
  2238
	char *pBuffer,
peter
parents:
diff changeset
  2239
	unsigned int szBuffer,
peter
parents:
diff changeset
  2240
	char *pNextBuffer,
peter
parents:
diff changeset
  2241
	unsigned int szNextBuffer )
peter
parents:
diff changeset
  2242
{
peter
parents:
diff changeset
  2243
	return AT91F_PDC_SendFrame(
peter
parents:
diff changeset
  2244
		(AT91PS_PDC) &(pUSART->US_RPR),
peter
parents:
diff changeset
  2245
		pBuffer,
peter
parents:
diff changeset
  2246
		szBuffer,
peter
parents:
diff changeset
  2247
		pNextBuffer,
peter
parents:
diff changeset
  2248
		szNextBuffer);
peter
parents:
diff changeset
  2249
}
peter
parents:
diff changeset
  2250
peter
parents:
diff changeset
  2251
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2252
//* \fn    AT91F_US_ReceiveFrame
peter
parents:
diff changeset
  2253
//* \brief Return 2 if PDC has been initialized with Buffer and Next Buffer, 1 if PDC has been initializaed with Next Buffer, 0 if PDC is busy
peter
parents:
diff changeset
  2254
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2255
__inline unsigned int AT91F_US_ReceiveFrame (
peter
parents:
diff changeset
  2256
	AT91PS_USART pUSART,
peter
parents:
diff changeset
  2257
	char *pBuffer,
peter
parents:
diff changeset
  2258
	unsigned int szBuffer,
peter
parents:
diff changeset
  2259
	char *pNextBuffer,
peter
parents:
diff changeset
  2260
	unsigned int szNextBuffer )
peter
parents:
diff changeset
  2261
{
peter
parents:
diff changeset
  2262
	return AT91F_PDC_ReceiveFrame(
peter
parents:
diff changeset
  2263
		(AT91PS_PDC) &(pUSART->US_RPR),
peter
parents:
diff changeset
  2264
		pBuffer,
peter
parents:
diff changeset
  2265
		szBuffer,
peter
parents:
diff changeset
  2266
		pNextBuffer,
peter
parents:
diff changeset
  2267
		szNextBuffer);
peter
parents:
diff changeset
  2268
}
peter
parents:
diff changeset
  2269
peter
parents:
diff changeset
  2270
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2271
//* \fn    AT91F_US_SetIrdaFilter
peter
parents:
diff changeset
  2272
//* \brief Set the value of IrDa filter tregister
peter
parents:
diff changeset
  2273
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2274
__inline void AT91F_US_SetIrdaFilter (
peter
parents:
diff changeset
  2275
	AT91PS_USART pUSART,
peter
parents:
diff changeset
  2276
	unsigned char value
peter
parents:
diff changeset
  2277
)
peter
parents:
diff changeset
  2278
{
peter
parents:
diff changeset
  2279
	pUSART->US_IF = value;
peter
parents:
diff changeset
  2280
}
peter
parents:
diff changeset
  2281
peter
parents:
diff changeset
  2282
/* *****************************************************************************
peter
parents:
diff changeset
  2283
                SOFTWARE API FOR SSC
peter
parents:
diff changeset
  2284
   ***************************************************************************** */
peter
parents:
diff changeset
  2285
//* Define the standard I2S mode configuration
peter
parents:
diff changeset
  2286
peter
parents:
diff changeset
  2287
//* Configuration to set in the SSC Transmit Clock Mode Register
peter
parents:
diff changeset
  2288
//* Parameters :  nb_bit_by_slot : 8, 16 or 32 bits
peter
parents:
diff changeset
  2289
//* 			  nb_slot_by_frame : number of channels
peter
parents:
diff changeset
  2290
#define AT91C_I2S_ASY_MASTER_TX_SETTING(nb_bit_by_slot, nb_slot_by_frame)( +\
peter
parents:
diff changeset
  2291
									   AT91C_SSC_CKS_DIV   +\
peter
parents:
diff changeset
  2292
                            		   AT91C_SSC_CKO_CONTINOUS      +\
peter
parents:
diff changeset
  2293
                            		   AT91C_SSC_CKG_NONE    +\
peter
parents:
diff changeset
  2294
                                       AT91C_SSC_START_FALL_RF +\
peter
parents:
diff changeset
  2295
                           			   AT91C_SSC_STTOUT  +\
peter
parents:
diff changeset
  2296
                            		   ((1<<16) & AT91C_SSC_STTDLY) +\
peter
parents:
diff changeset
  2297
                            		   ((((nb_bit_by_slot*nb_slot_by_frame)/2)-1) <<24))
peter
parents:
diff changeset
  2298
peter
parents:
diff changeset
  2299
peter
parents:
diff changeset
  2300
//* Configuration to set in the SSC Transmit Frame Mode Register
peter
parents:
diff changeset
  2301
//* Parameters : nb_bit_by_slot : 8, 16 or 32 bits
peter
parents:
diff changeset
  2302
//* 			 nb_slot_by_frame : number of channels
peter
parents:
diff changeset
  2303
#define AT91C_I2S_ASY_TX_FRAME_SETTING(nb_bit_by_slot, nb_slot_by_frame)( +\
peter
parents:
diff changeset
  2304
									(nb_bit_by_slot-1)  +\
peter
parents:
diff changeset
  2305
                            		AT91C_SSC_MSBF   +\
peter
parents:
diff changeset
  2306
                            		(((nb_slot_by_frame-1)<<8) & AT91C_SSC_DATNB)  +\
peter
parents:
diff changeset
  2307
                            		(((nb_bit_by_slot-1)<<16) & AT91C_SSC_FSLEN) +\
peter
parents:
diff changeset
  2308
                            		AT91C_SSC_FSOS_NEGATIVE)
peter
parents:
diff changeset
  2309
peter
parents:
diff changeset
  2310
peter
parents:
diff changeset
  2311
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2312
//* \fn    AT91F_SSC_SetBaudrate
peter
parents:
diff changeset
  2313
//* \brief Set the baudrate according to the CPU clock
peter
parents:
diff changeset
  2314
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2315
__inline void AT91F_SSC_SetBaudrate (
peter
parents:
diff changeset
  2316
        AT91PS_SSC pSSC,        // \arg pointer to a SSC controller
peter
parents:
diff changeset
  2317
        unsigned int mainClock, // \arg peripheral clock
peter
parents:
diff changeset
  2318
        unsigned int speed)     // \arg SSC baudrate
peter
parents:
diff changeset
  2319
{
peter
parents:
diff changeset
  2320
        unsigned int baud_value;
peter
parents:
diff changeset
  2321
        //* Define the baud rate divisor register
peter
parents:
diff changeset
  2322
        if (speed == 0)
peter
parents:
diff changeset
  2323
           baud_value = 0;
peter
parents:
diff changeset
  2324
        else
peter
parents:
diff changeset
  2325
        {
peter
parents:
diff changeset
  2326
           baud_value = (unsigned int) (mainClock * 10)/(2*speed);
peter
parents:
diff changeset
  2327
           if ((baud_value % 10) >= 5)
peter
parents:
diff changeset
  2328
                  baud_value = (baud_value / 10) + 1;
peter
parents:
diff changeset
  2329
           else
peter
parents:
diff changeset
  2330
                  baud_value /= 10;
peter
parents:
diff changeset
  2331
        }
peter
parents:
diff changeset
  2332
peter
parents:
diff changeset
  2333
        pSSC->SSC_CMR = baud_value;
peter
parents:
diff changeset
  2334
}
peter
parents:
diff changeset
  2335
peter
parents:
diff changeset
  2336
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2337
//* \fn    AT91F_SSC_Configure
peter
parents:
diff changeset
  2338
//* \brief Configure SSC
peter
parents:
diff changeset
  2339
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2340
__inline void AT91F_SSC_Configure (
peter
parents:
diff changeset
  2341
             AT91PS_SSC pSSC,          // \arg pointer to a SSC controller
peter
parents:
diff changeset
  2342
             unsigned int syst_clock,  // \arg System Clock Frequency
peter
parents:
diff changeset
  2343
             unsigned int baud_rate,   // \arg Expected Baud Rate Frequency
peter
parents:
diff changeset
  2344
             unsigned int clock_rx,    // \arg Receiver Clock Parameters
peter
parents:
diff changeset
  2345
             unsigned int mode_rx,     // \arg mode Register to be programmed
peter
parents:
diff changeset
  2346
             unsigned int clock_tx,    // \arg Transmitter Clock Parameters
peter
parents:
diff changeset
  2347
             unsigned int mode_tx)     // \arg mode Register to be programmed
peter
parents:
diff changeset
  2348
{
peter
parents:
diff changeset
  2349
    //* Disable interrupts
peter
parents:
diff changeset
  2350
	pSSC->SSC_IDR = (unsigned int) -1;
peter
parents:
diff changeset
  2351
peter
parents:
diff changeset
  2352
    //* Reset receiver and transmitter
peter
parents:
diff changeset
  2353
	pSSC->SSC_CR = AT91C_SSC_SWRST | AT91C_SSC_RXDIS | AT91C_SSC_TXDIS ;
peter
parents:
diff changeset
  2354
peter
parents:
diff changeset
  2355
    //* Define the Clock Mode Register
peter
parents:
diff changeset
  2356
	AT91F_SSC_SetBaudrate(pSSC, syst_clock, baud_rate);
peter
parents:
diff changeset
  2357
peter
parents:
diff changeset
  2358
     //* Write the Receive Clock Mode Register
peter
parents:
diff changeset
  2359
	pSSC->SSC_RCMR =  clock_rx;
peter
parents:
diff changeset
  2360
peter
parents:
diff changeset
  2361
     //* Write the Transmit Clock Mode Register
peter
parents:
diff changeset
  2362
	pSSC->SSC_TCMR =  clock_tx;
peter
parents:
diff changeset
  2363
peter
parents:
diff changeset
  2364
     //* Write the Receive Frame Mode Register
peter
parents:
diff changeset
  2365
	pSSC->SSC_RFMR =  mode_rx;
peter
parents:
diff changeset
  2366
peter
parents:
diff changeset
  2367
     //* Write the Transmit Frame Mode Register
peter
parents:
diff changeset
  2368
	pSSC->SSC_TFMR =  mode_tx;
peter
parents:
diff changeset
  2369
peter
parents:
diff changeset
  2370
    //* Clear Transmit and Receive Counters
peter
parents:
diff changeset
  2371
	AT91F_PDC_Open((AT91PS_PDC) &(pSSC->SSC_RPR));
peter
parents:
diff changeset
  2372
peter
parents:
diff changeset
  2373
peter
parents:
diff changeset
  2374
}
peter
parents:
diff changeset
  2375
peter
parents:
diff changeset
  2376
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2377
//* \fn    AT91F_SSC_EnableRx
peter
parents:
diff changeset
  2378
//* \brief Enable receiving datas
peter
parents:
diff changeset
  2379
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2380
__inline void AT91F_SSC_EnableRx (
peter
parents:
diff changeset
  2381
	AT91PS_SSC pSSC)     // \arg pointer to a SSC controller
peter
parents:
diff changeset
  2382
{
peter
parents:
diff changeset
  2383
    //* Enable receiver
peter
parents:
diff changeset
  2384
    pSSC->SSC_CR = AT91C_SSC_RXEN;
peter
parents:
diff changeset
  2385
}
peter
parents:
diff changeset
  2386
peter
parents:
diff changeset
  2387
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2388
//* \fn    AT91F_SSC_DisableRx
peter
parents:
diff changeset
  2389
//* \brief Disable receiving datas
peter
parents:
diff changeset
  2390
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2391
__inline void AT91F_SSC_DisableRx (
peter
parents:
diff changeset
  2392
	AT91PS_SSC pSSC)     // \arg pointer to a SSC controller
peter
parents:
diff changeset
  2393
{
peter
parents:
diff changeset
  2394
    //* Disable receiver
peter
parents:
diff changeset
  2395
    pSSC->SSC_CR = AT91C_SSC_RXDIS;
peter
parents:
diff changeset
  2396
}
peter
parents:
diff changeset
  2397
peter
parents:
diff changeset
  2398
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2399
//* \fn    AT91F_SSC_EnableTx
peter
parents:
diff changeset
  2400
//* \brief Enable sending datas
peter
parents:
diff changeset
  2401
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2402
__inline void AT91F_SSC_EnableTx (
peter
parents:
diff changeset
  2403
	AT91PS_SSC pSSC)     // \arg pointer to a SSC controller
peter
parents:
diff changeset
  2404
{
peter
parents:
diff changeset
  2405
    //* Enable  transmitter
peter
parents:
diff changeset
  2406
    pSSC->SSC_CR = AT91C_SSC_TXEN;
peter
parents:
diff changeset
  2407
}
peter
parents:
diff changeset
  2408
peter
parents:
diff changeset
  2409
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2410
//* \fn    AT91F_SSC_DisableTx
peter
parents:
diff changeset
  2411
//* \brief Disable sending datas
peter
parents:
diff changeset
  2412
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2413
__inline void AT91F_SSC_DisableTx (
peter
parents:
diff changeset
  2414
	AT91PS_SSC pSSC)     // \arg pointer to a SSC controller
peter
parents:
diff changeset
  2415
{
peter
parents:
diff changeset
  2416
    //* Disable  transmitter
peter
parents:
diff changeset
  2417
    pSSC->SSC_CR = AT91C_SSC_TXDIS;
peter
parents:
diff changeset
  2418
}
peter
parents:
diff changeset
  2419
peter
parents:
diff changeset
  2420
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2421
//* \fn    AT91F_SSC_EnableIt
peter
parents:
diff changeset
  2422
//* \brief Enable SSC IT
peter
parents:
diff changeset
  2423
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2424
__inline void AT91F_SSC_EnableIt (
peter
parents:
diff changeset
  2425
	AT91PS_SSC pSSC, // \arg pointer to a SSC controller
peter
parents:
diff changeset
  2426
	unsigned int flag)   // \arg IT to be enabled
peter
parents:
diff changeset
  2427
{
peter
parents:
diff changeset
  2428
	//* Write to the IER register
peter
parents:
diff changeset
  2429
	pSSC->SSC_IER = flag;
peter
parents:
diff changeset
  2430
}
peter
parents:
diff changeset
  2431
peter
parents:
diff changeset
  2432
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2433
//* \fn    AT91F_SSC_DisableIt
peter
parents:
diff changeset
  2434
//* \brief Disable SSC IT
peter
parents:
diff changeset
  2435
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2436
__inline void AT91F_SSC_DisableIt (
peter
parents:
diff changeset
  2437
	AT91PS_SSC pSSC, // \arg pointer to a SSC controller
peter
parents:
diff changeset
  2438
	unsigned int flag)   // \arg IT to be disabled
peter
parents:
diff changeset
  2439
{
peter
parents:
diff changeset
  2440
	//* Write to the IDR register
peter
parents:
diff changeset
  2441
	pSSC->SSC_IDR = flag;
peter
parents:
diff changeset
  2442
}
peter
parents:
diff changeset
  2443
peter
parents:
diff changeset
  2444
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2445
//* \fn    AT91F_SSC_ReceiveFrame
peter
parents:
diff changeset
  2446
//* \brief Return 2 if PDC has been initialized with Buffer and Next Buffer, 1 if PDC has been initialized with Next Buffer, 0 if PDC is busy
peter
parents:
diff changeset
  2447
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2448
__inline unsigned int AT91F_SSC_ReceiveFrame (
peter
parents:
diff changeset
  2449
	AT91PS_SSC pSSC,
peter
parents:
diff changeset
  2450
	char *pBuffer,
peter
parents:
diff changeset
  2451
	unsigned int szBuffer,
peter
parents:
diff changeset
  2452
	char *pNextBuffer,
peter
parents:
diff changeset
  2453
	unsigned int szNextBuffer )
peter
parents:
diff changeset
  2454
{
peter
parents:
diff changeset
  2455
	return AT91F_PDC_ReceiveFrame(
peter
parents:
diff changeset
  2456
		(AT91PS_PDC) &(pSSC->SSC_RPR),
peter
parents:
diff changeset
  2457
		pBuffer,
peter
parents:
diff changeset
  2458
		szBuffer,
peter
parents:
diff changeset
  2459
		pNextBuffer,
peter
parents:
diff changeset
  2460
		szNextBuffer);
peter
parents:
diff changeset
  2461
}
peter
parents:
diff changeset
  2462
peter
parents:
diff changeset
  2463
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2464
//* \fn    AT91F_SSC_SendFrame
peter
parents:
diff changeset
  2465
//* \brief Return 2 if PDC has been initialized with Buffer and Next Buffer, 1 if PDC has been initialized with Next Buffer, 0 if PDC is busy
peter
parents:
diff changeset
  2466
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2467
__inline unsigned int AT91F_SSC_SendFrame(
peter
parents:
diff changeset
  2468
	AT91PS_SSC pSSC,
peter
parents:
diff changeset
  2469
	char *pBuffer,
peter
parents:
diff changeset
  2470
	unsigned int szBuffer,
peter
parents:
diff changeset
  2471
	char *pNextBuffer,
peter
parents:
diff changeset
  2472
	unsigned int szNextBuffer )
peter
parents:
diff changeset
  2473
{
peter
parents:
diff changeset
  2474
	return AT91F_PDC_SendFrame(
peter
parents:
diff changeset
  2475
		(AT91PS_PDC) &(pSSC->SSC_RPR),
peter
parents:
diff changeset
  2476
		pBuffer,
peter
parents:
diff changeset
  2477
		szBuffer,
peter
parents:
diff changeset
  2478
		pNextBuffer,
peter
parents:
diff changeset
  2479
		szNextBuffer);
peter
parents:
diff changeset
  2480
}
peter
parents:
diff changeset
  2481
peter
parents:
diff changeset
  2482
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2483
//* \fn    AT91F_SSC_GetInterruptMaskStatus
peter
parents:
diff changeset
  2484
//* \brief Return SSC Interrupt Mask Status
peter
parents:
diff changeset
  2485
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2486
__inline unsigned int AT91F_SSC_GetInterruptMaskStatus( // \return SSC Interrupt Mask Status
peter
parents:
diff changeset
  2487
        AT91PS_SSC pSsc) // \arg  pointer to a SSC controller
peter
parents:
diff changeset
  2488
{
peter
parents:
diff changeset
  2489
        return pSsc->SSC_IMR;
peter
parents:
diff changeset
  2490
}
peter
parents:
diff changeset
  2491
peter
parents:
diff changeset
  2492
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2493
//* \fn    AT91F_SSC_IsInterruptMasked
peter
parents:
diff changeset
  2494
//* \brief Test if SSC Interrupt is Masked
peter
parents:
diff changeset
  2495
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2496
__inline int AT91F_SSC_IsInterruptMasked(
peter
parents:
diff changeset
  2497
        AT91PS_SSC pSsc,   // \arg  pointer to a SSC controller
peter
parents:
diff changeset
  2498
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  2499
{
peter
parents:
diff changeset
  2500
        return (AT91F_SSC_GetInterruptMaskStatus(pSsc) & flag);
peter
parents:
diff changeset
  2501
}
peter
parents:
diff changeset
  2502
peter
parents:
diff changeset
  2503
/* *****************************************************************************
peter
parents:
diff changeset
  2504
                SOFTWARE API FOR TWI
peter
parents:
diff changeset
  2505
   ***************************************************************************** */
peter
parents:
diff changeset
  2506
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2507
//* \fn    AT91F_TWI_EnableIt
peter
parents:
diff changeset
  2508
//* \brief Enable TWI IT
peter
parents:
diff changeset
  2509
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2510
__inline void AT91F_TWI_EnableIt (
peter
parents:
diff changeset
  2511
	AT91PS_TWI pTWI, // \arg pointer to a TWI controller
peter
parents:
diff changeset
  2512
	unsigned int flag)   // \arg IT to be enabled
peter
parents:
diff changeset
  2513
{
peter
parents:
diff changeset
  2514
	//* Write to the IER register
peter
parents:
diff changeset
  2515
	pTWI->TWI_IER = flag;
peter
parents:
diff changeset
  2516
}
peter
parents:
diff changeset
  2517
peter
parents:
diff changeset
  2518
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2519
//* \fn    AT91F_TWI_DisableIt
peter
parents:
diff changeset
  2520
//* \brief Disable TWI IT
peter
parents:
diff changeset
  2521
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2522
__inline void AT91F_TWI_DisableIt (
peter
parents:
diff changeset
  2523
	AT91PS_TWI pTWI, // \arg pointer to a TWI controller
peter
parents:
diff changeset
  2524
	unsigned int flag)   // \arg IT to be disabled
peter
parents:
diff changeset
  2525
{
peter
parents:
diff changeset
  2526
	//* Write to the IDR register
peter
parents:
diff changeset
  2527
	pTWI->TWI_IDR = flag;
peter
parents:
diff changeset
  2528
}
peter
parents:
diff changeset
  2529
peter
parents:
diff changeset
  2530
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2531
//* \fn    AT91F_TWI_Configure
peter
parents:
diff changeset
  2532
//* \brief Configure TWI in master mode
peter
parents:
diff changeset
  2533
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2534
__inline void AT91F_TWI_Configure ( AT91PS_TWI pTWI )          // \arg pointer to a TWI controller
peter
parents:
diff changeset
  2535
{
peter
parents:
diff changeset
  2536
    //* Disable interrupts
peter
parents:
diff changeset
  2537
	pTWI->TWI_IDR = (unsigned int) -1;
peter
parents:
diff changeset
  2538
peter
parents:
diff changeset
  2539
    //* Reset peripheral
peter
parents:
diff changeset
  2540
	pTWI->TWI_CR = AT91C_TWI_SWRST;
peter
parents:
diff changeset
  2541
peter
parents:
diff changeset
  2542
	//* Set Master mode
peter
parents:
diff changeset
  2543
	pTWI->TWI_CR = AT91C_TWI_MSEN;
peter
parents:
diff changeset
  2544
peter
parents:
diff changeset
  2545
}
peter
parents:
diff changeset
  2546
peter
parents:
diff changeset
  2547
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2548
//* \fn    AT91F_TWI_GetInterruptMaskStatus
peter
parents:
diff changeset
  2549
//* \brief Return TWI Interrupt Mask Status
peter
parents:
diff changeset
  2550
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2551
__inline unsigned int AT91F_TWI_GetInterruptMaskStatus( // \return TWI Interrupt Mask Status
peter
parents:
diff changeset
  2552
        AT91PS_TWI pTwi) // \arg  pointer to a TWI controller
peter
parents:
diff changeset
  2553
{
peter
parents:
diff changeset
  2554
        return pTwi->TWI_IMR;
peter
parents:
diff changeset
  2555
}
peter
parents:
diff changeset
  2556
peter
parents:
diff changeset
  2557
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2558
//* \fn    AT91F_TWI_IsInterruptMasked
peter
parents:
diff changeset
  2559
//* \brief Test if TWI Interrupt is Masked
peter
parents:
diff changeset
  2560
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2561
__inline int AT91F_TWI_IsInterruptMasked(
peter
parents:
diff changeset
  2562
        AT91PS_TWI pTwi,   // \arg  pointer to a TWI controller
peter
parents:
diff changeset
  2563
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  2564
{
peter
parents:
diff changeset
  2565
        return (AT91F_TWI_GetInterruptMaskStatus(pTwi) & flag);
peter
parents:
diff changeset
  2566
}
peter
parents:
diff changeset
  2567
peter
parents:
diff changeset
  2568
/* *****************************************************************************
peter
parents:
diff changeset
  2569
                SOFTWARE API FOR PWMC
peter
parents:
diff changeset
  2570
   ***************************************************************************** */
peter
parents:
diff changeset
  2571
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2572
//* \fn    AT91F_PWM_GetStatus
peter
parents:
diff changeset
  2573
//* \brief Return PWM Interrupt Status
peter
parents:
diff changeset
  2574
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2575
__inline unsigned int AT91F_PWMC_GetStatus( // \return PWM Interrupt Status
peter
parents:
diff changeset
  2576
	AT91PS_PWMC pPWM) // pointer to a PWM controller
peter
parents:
diff changeset
  2577
{
peter
parents:
diff changeset
  2578
	return pPWM->PWMC_SR;
peter
parents:
diff changeset
  2579
}
peter
parents:
diff changeset
  2580
peter
parents:
diff changeset
  2581
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2582
//* \fn    AT91F_PWM_InterruptEnable
peter
parents:
diff changeset
  2583
//* \brief Enable PWM Interrupt
peter
parents:
diff changeset
  2584
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2585
__inline void AT91F_PWMC_InterruptEnable(
peter
parents:
diff changeset
  2586
        AT91PS_PWMC pPwm,   // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2587
        unsigned int flag) // \arg  PWM interrupt to be enabled
peter
parents:
diff changeset
  2588
{
peter
parents:
diff changeset
  2589
        pPwm->PWMC_IER = flag;
peter
parents:
diff changeset
  2590
}
peter
parents:
diff changeset
  2591
peter
parents:
diff changeset
  2592
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2593
//* \fn    AT91F_PWM_InterruptDisable
peter
parents:
diff changeset
  2594
//* \brief Disable PWM Interrupt
peter
parents:
diff changeset
  2595
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2596
__inline void AT91F_PWMC_InterruptDisable(
peter
parents:
diff changeset
  2597
        AT91PS_PWMC pPwm,   // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2598
        unsigned int flag) // \arg  PWM interrupt to be disabled
peter
parents:
diff changeset
  2599
{
peter
parents:
diff changeset
  2600
        pPwm->PWMC_IDR = flag;
peter
parents:
diff changeset
  2601
}
peter
parents:
diff changeset
  2602
peter
parents:
diff changeset
  2603
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2604
//* \fn    AT91F_PWM_GetInterruptMaskStatus
peter
parents:
diff changeset
  2605
//* \brief Return PWM Interrupt Mask Status
peter
parents:
diff changeset
  2606
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2607
__inline unsigned int AT91F_PWMC_GetInterruptMaskStatus( // \return PWM Interrupt Mask Status
peter
parents:
diff changeset
  2608
        AT91PS_PWMC pPwm) // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2609
{
peter
parents:
diff changeset
  2610
        return pPwm->PWMC_IMR;
peter
parents:
diff changeset
  2611
}
peter
parents:
diff changeset
  2612
peter
parents:
diff changeset
  2613
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2614
//* \fn    AT91F_PWM_IsInterruptMasked
peter
parents:
diff changeset
  2615
//* \brief Test if PWM Interrupt is Masked
peter
parents:
diff changeset
  2616
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2617
__inline unsigned int AT91F_PWMC_IsInterruptMasked(
peter
parents:
diff changeset
  2618
        AT91PS_PWMC pPWM,   // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2619
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  2620
{
peter
parents:
diff changeset
  2621
	return (AT91F_PWMC_GetInterruptMaskStatus(pPWM) & flag);
peter
parents:
diff changeset
  2622
}
peter
parents:
diff changeset
  2623
peter
parents:
diff changeset
  2624
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2625
//* \fn    AT91F_PWM_IsStatusSet
peter
parents:
diff changeset
  2626
//* \brief Test if PWM Interrupt is Set
peter
parents:
diff changeset
  2627
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2628
__inline unsigned int AT91F_PWMC_IsStatusSet(
peter
parents:
diff changeset
  2629
        AT91PS_PWMC pPWM,   // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2630
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  2631
{
peter
parents:
diff changeset
  2632
	return (AT91F_PWMC_GetStatus(pPWM) & flag);
peter
parents:
diff changeset
  2633
}
peter
parents:
diff changeset
  2634
peter
parents:
diff changeset
  2635
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2636
//* \fn    AT91F_PWM_CfgChannel
peter
parents:
diff changeset
  2637
//* \brief Test if PWM Interrupt is Set
peter
parents:
diff changeset
  2638
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2639
__inline void AT91F_PWMC_CfgChannel(
peter
parents:
diff changeset
  2640
        AT91PS_PWMC pPWM,   // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2641
        unsigned int channelId, // \arg PWM channel ID
peter
parents:
diff changeset
  2642
        unsigned int mode, // \arg  PWM mode
peter
parents:
diff changeset
  2643
        unsigned int period, // \arg PWM period
peter
parents:
diff changeset
  2644
        unsigned int duty) // \arg PWM duty cycle
peter
parents:
diff changeset
  2645
{
peter
parents:
diff changeset
  2646
	pPWM->PWMC_CH[channelId].PWMC_CMR = mode;
peter
parents:
diff changeset
  2647
	pPWM->PWMC_CH[channelId].PWMC_CDTYR = duty;
peter
parents:
diff changeset
  2648
	pPWM->PWMC_CH[channelId].PWMC_CPRDR = period;
peter
parents:
diff changeset
  2649
}
peter
parents:
diff changeset
  2650
peter
parents:
diff changeset
  2651
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2652
//* \fn    AT91F_PWM_StartChannel
peter
parents:
diff changeset
  2653
//* \brief Enable channel
peter
parents:
diff changeset
  2654
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2655
__inline void AT91F_PWMC_StartChannel(
peter
parents:
diff changeset
  2656
        AT91PS_PWMC pPWM,   // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2657
        unsigned int flag) // \arg  Channels IDs to be enabled
peter
parents:
diff changeset
  2658
{
peter
parents:
diff changeset
  2659
	pPWM->PWMC_ENA = flag;
peter
parents:
diff changeset
  2660
}
peter
parents:
diff changeset
  2661
peter
parents:
diff changeset
  2662
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2663
//* \fn    AT91F_PWM_StopChannel
peter
parents:
diff changeset
  2664
//* \brief Disable channel
peter
parents:
diff changeset
  2665
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2666
__inline void AT91F_PWMC_StopChannel(
peter
parents:
diff changeset
  2667
        AT91PS_PWMC pPWM,   // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2668
        unsigned int flag) // \arg  Channels IDs to be enabled
peter
parents:
diff changeset
  2669
{
peter
parents:
diff changeset
  2670
	pPWM->PWMC_DIS = flag;
peter
parents:
diff changeset
  2671
}
peter
parents:
diff changeset
  2672
peter
parents:
diff changeset
  2673
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2674
//* \fn    AT91F_PWM_UpdateChannel
peter
parents:
diff changeset
  2675
//* \brief Update Period or Duty Cycle
peter
parents:
diff changeset
  2676
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2677
__inline void AT91F_PWMC_UpdateChannel(
peter
parents:
diff changeset
  2678
        AT91PS_PWMC pPWM,   // \arg  pointer to a PWM controller
peter
parents:
diff changeset
  2679
        unsigned int channelId, // \arg PWM channel ID
peter
parents:
diff changeset
  2680
        unsigned int update) // \arg  Channels IDs to be enabled
peter
parents:
diff changeset
  2681
{
peter
parents:
diff changeset
  2682
	pPWM->PWMC_CH[channelId].PWMC_CUPDR = update;
peter
parents:
diff changeset
  2683
}
peter
parents:
diff changeset
  2684
peter
parents:
diff changeset
  2685
/* *****************************************************************************
peter
parents:
diff changeset
  2686
                SOFTWARE API FOR UDP
peter
parents:
diff changeset
  2687
   ***************************************************************************** */
peter
parents:
diff changeset
  2688
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2689
//* \fn    AT91F_UDP_EnableIt
peter
parents:
diff changeset
  2690
//* \brief Enable UDP IT
peter
parents:
diff changeset
  2691
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2692
__inline void AT91F_UDP_EnableIt (
peter
parents:
diff changeset
  2693
	AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2694
	unsigned int flag)   // \arg IT to be enabled
peter
parents:
diff changeset
  2695
{
peter
parents:
diff changeset
  2696
	//* Write to the IER register
peter
parents:
diff changeset
  2697
	pUDP->UDP_IER = flag;
peter
parents:
diff changeset
  2698
}
peter
parents:
diff changeset
  2699
peter
parents:
diff changeset
  2700
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2701
//* \fn    AT91F_UDP_DisableIt
peter
parents:
diff changeset
  2702
//* \brief Disable UDP IT
peter
parents:
diff changeset
  2703
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2704
__inline void AT91F_UDP_DisableIt (
peter
parents:
diff changeset
  2705
	AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2706
	unsigned int flag)   // \arg IT to be disabled
peter
parents:
diff changeset
  2707
{
peter
parents:
diff changeset
  2708
	//* Write to the IDR register
peter
parents:
diff changeset
  2709
	pUDP->UDP_IDR = flag;
peter
parents:
diff changeset
  2710
}
peter
parents:
diff changeset
  2711
peter
parents:
diff changeset
  2712
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2713
//* \fn    AT91F_UDP_SetAddress
peter
parents:
diff changeset
  2714
//* \brief Set UDP functional address
peter
parents:
diff changeset
  2715
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2716
__inline void AT91F_UDP_SetAddress (
peter
parents:
diff changeset
  2717
	AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2718
	unsigned char address)   // \arg new UDP address
peter
parents:
diff changeset
  2719
{
peter
parents:
diff changeset
  2720
	pUDP->UDP_FADDR = (AT91C_UDP_FEN | address);
peter
parents:
diff changeset
  2721
}
peter
parents:
diff changeset
  2722
peter
parents:
diff changeset
  2723
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2724
//* \fn    AT91F_UDP_EnableEp
peter
parents:
diff changeset
  2725
//* \brief Enable Endpoint
peter
parents:
diff changeset
  2726
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2727
__inline void AT91F_UDP_EnableEp (
peter
parents:
diff changeset
  2728
	AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2729
	unsigned char endpoint)   // \arg endpoint number
peter
parents:
diff changeset
  2730
{
peter
parents:
diff changeset
  2731
	pUDP->UDP_CSR[endpoint] |= AT91C_UDP_EPEDS;
peter
parents:
diff changeset
  2732
}
peter
parents:
diff changeset
  2733
peter
parents:
diff changeset
  2734
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2735
//* \fn    AT91F_UDP_DisableEp
peter
parents:
diff changeset
  2736
//* \brief Enable Endpoint
peter
parents:
diff changeset
  2737
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2738
__inline void AT91F_UDP_DisableEp (
peter
parents:
diff changeset
  2739
	AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2740
	unsigned char endpoint)   // \arg endpoint number
peter
parents:
diff changeset
  2741
{
peter
parents:
diff changeset
  2742
	pUDP->UDP_CSR[endpoint] &= ~AT91C_UDP_EPEDS;
peter
parents:
diff changeset
  2743
}
peter
parents:
diff changeset
  2744
peter
parents:
diff changeset
  2745
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2746
//* \fn    AT91F_UDP_SetState
peter
parents:
diff changeset
  2747
//* \brief Set UDP Device state
peter
parents:
diff changeset
  2748
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2749
__inline void AT91F_UDP_SetState (
peter
parents:
diff changeset
  2750
	AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2751
	unsigned int flag)   // \arg new UDP address
peter
parents:
diff changeset
  2752
{
peter
parents:
diff changeset
  2753
	pUDP->UDP_GLBSTATE  &= ~(AT91C_UDP_FADDEN | AT91C_UDP_CONFG);
peter
parents:
diff changeset
  2754
	pUDP->UDP_GLBSTATE  |= flag;
peter
parents:
diff changeset
  2755
}
peter
parents:
diff changeset
  2756
peter
parents:
diff changeset
  2757
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2758
//* \fn    AT91F_UDP_GetState
peter
parents:
diff changeset
  2759
//* \brief return UDP Device state
peter
parents:
diff changeset
  2760
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2761
__inline unsigned int AT91F_UDP_GetState ( // \return the UDP device state
peter
parents:
diff changeset
  2762
	AT91PS_UDP pUDP)     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2763
{
peter
parents:
diff changeset
  2764
	return (pUDP->UDP_GLBSTATE  & (AT91C_UDP_FADDEN | AT91C_UDP_CONFG));
peter
parents:
diff changeset
  2765
}
peter
parents:
diff changeset
  2766
peter
parents:
diff changeset
  2767
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2768
//* \fn    AT91F_UDP_ResetEp
peter
parents:
diff changeset
  2769
//* \brief Reset UDP endpoint
peter
parents:
diff changeset
  2770
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2771
__inline void AT91F_UDP_ResetEp ( // \return the UDP device state
peter
parents:
diff changeset
  2772
	AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2773
	unsigned int flag)   // \arg Endpoints to be reset
peter
parents:
diff changeset
  2774
{
peter
parents:
diff changeset
  2775
	pUDP->UDP_RSTEP = flag;
peter
parents:
diff changeset
  2776
	pUDP->UDP_RSTEP = 0;
peter
parents:
diff changeset
  2777
}
peter
parents:
diff changeset
  2778
peter
parents:
diff changeset
  2779
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2780
//* \fn    AT91F_UDP_EpStall
peter
parents:
diff changeset
  2781
//* \brief Endpoint will STALL requests
peter
parents:
diff changeset
  2782
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2783
__inline void AT91F_UDP_EpStall(
peter
parents:
diff changeset
  2784
	AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2785
	unsigned char endpoint)   // \arg endpoint number
peter
parents:
diff changeset
  2786
{
peter
parents:
diff changeset
  2787
	pUDP->UDP_CSR[endpoint] |= AT91C_UDP_FORCESTALL;
peter
parents:
diff changeset
  2788
}
peter
parents:
diff changeset
  2789
peter
parents:
diff changeset
  2790
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2791
//* \fn    AT91F_UDP_EpWrite
peter
parents:
diff changeset
  2792
//* \brief Write value in the DPR
peter
parents:
diff changeset
  2793
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2794
__inline void AT91F_UDP_EpWrite(
peter
parents:
diff changeset
  2795
	AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2796
	unsigned char endpoint,  // \arg endpoint number
peter
parents:
diff changeset
  2797
	unsigned char value)     // \arg value to be written in the DPR
peter
parents:
diff changeset
  2798
{
peter
parents:
diff changeset
  2799
	pUDP->UDP_FDR[endpoint] = value;
peter
parents:
diff changeset
  2800
}
peter
parents:
diff changeset
  2801
peter
parents:
diff changeset
  2802
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2803
//* \fn    AT91F_UDP_EpRead
peter
parents:
diff changeset
  2804
//* \brief Return value from the DPR
peter
parents:
diff changeset
  2805
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2806
__inline unsigned int AT91F_UDP_EpRead(
peter
parents:
diff changeset
  2807
	AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2808
	unsigned char endpoint)  // \arg endpoint number
peter
parents:
diff changeset
  2809
{
peter
parents:
diff changeset
  2810
	return pUDP->UDP_FDR[endpoint];
peter
parents:
diff changeset
  2811
}
peter
parents:
diff changeset
  2812
peter
parents:
diff changeset
  2813
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2814
//* \fn    AT91F_UDP_EpEndOfWr
peter
parents:
diff changeset
  2815
//* \brief Notify the UDP that values in DPR are ready to be sent
peter
parents:
diff changeset
  2816
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2817
__inline void AT91F_UDP_EpEndOfWr(
peter
parents:
diff changeset
  2818
	AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2819
	unsigned char endpoint)  // \arg endpoint number
peter
parents:
diff changeset
  2820
{
peter
parents:
diff changeset
  2821
	pUDP->UDP_CSR[endpoint] |= AT91C_UDP_TXPKTRDY;
peter
parents:
diff changeset
  2822
}
peter
parents:
diff changeset
  2823
peter
parents:
diff changeset
  2824
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2825
//* \fn    AT91F_UDP_EpClear
peter
parents:
diff changeset
  2826
//* \brief Clear flag in the endpoint CSR register
peter
parents:
diff changeset
  2827
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2828
__inline void AT91F_UDP_EpClear(
peter
parents:
diff changeset
  2829
	AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2830
	unsigned char endpoint,  // \arg endpoint number
peter
parents:
diff changeset
  2831
	unsigned int flag)       // \arg flag to be cleared
peter
parents:
diff changeset
  2832
{
peter
parents:
diff changeset
  2833
	pUDP->UDP_CSR[endpoint] &= ~(flag);
peter
parents:
diff changeset
  2834
}
peter
parents:
diff changeset
  2835
peter
parents:
diff changeset
  2836
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2837
//* \fn    AT91F_UDP_EpSet
peter
parents:
diff changeset
  2838
//* \brief Set flag in the endpoint CSR register
peter
parents:
diff changeset
  2839
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2840
__inline void AT91F_UDP_EpSet(
peter
parents:
diff changeset
  2841
	AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2842
	unsigned char endpoint,  // \arg endpoint number
peter
parents:
diff changeset
  2843
	unsigned int flag)       // \arg flag to be cleared
peter
parents:
diff changeset
  2844
{
peter
parents:
diff changeset
  2845
	pUDP->UDP_CSR[endpoint] |= flag;
peter
parents:
diff changeset
  2846
}
peter
parents:
diff changeset
  2847
peter
parents:
diff changeset
  2848
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2849
//* \fn    AT91F_UDP_EpStatus
peter
parents:
diff changeset
  2850
//* \brief Return the endpoint CSR register
peter
parents:
diff changeset
  2851
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2852
__inline unsigned int AT91F_UDP_EpStatus(
peter
parents:
diff changeset
  2853
	AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
peter
parents:
diff changeset
  2854
	unsigned char endpoint)  // \arg endpoint number
peter
parents:
diff changeset
  2855
{
peter
parents:
diff changeset
  2856
	return pUDP->UDP_CSR[endpoint];
peter
parents:
diff changeset
  2857
}
peter
parents:
diff changeset
  2858
peter
parents:
diff changeset
  2859
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2860
//* \fn    AT91F_UDP_GetInterruptMaskStatus
peter
parents:
diff changeset
  2861
//* \brief Return UDP Interrupt Mask Status
peter
parents:
diff changeset
  2862
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2863
__inline unsigned int AT91F_UDP_GetInterruptMaskStatus(
peter
parents:
diff changeset
  2864
  AT91PS_UDP pUdp)        // \arg  pointer to a UDP controller
peter
parents:
diff changeset
  2865
{
peter
parents:
diff changeset
  2866
  return pUdp->UDP_IMR;
peter
parents:
diff changeset
  2867
}
peter
parents:
diff changeset
  2868
peter
parents:
diff changeset
  2869
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2870
//* \fn    AT91F_UDP_IsInterruptMasked
peter
parents:
diff changeset
  2871
//* \brief Test if UDP Interrupt is Masked
peter
parents:
diff changeset
  2872
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2873
__inline int AT91F_UDP_IsInterruptMasked(
peter
parents:
diff changeset
  2874
  AT91PS_UDP pUdp,       // \arg  pointer to a UDP controller
peter
parents:
diff changeset
  2875
  unsigned int flag)     // \arg  flag to be tested
peter
parents:
diff changeset
  2876
{
peter
parents:
diff changeset
  2877
  return (AT91F_UDP_GetInterruptMaskStatus(pUdp) & flag);
peter
parents:
diff changeset
  2878
}
peter
parents:
diff changeset
  2879
peter
parents:
diff changeset
  2880
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  2881
//  \fn    AT91F_UDP_InterruptStatusRegister
peter
parents:
diff changeset
  2882
//  \brief Return the Interrupt Status Register
peter
parents:
diff changeset
  2883
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  2884
__inline unsigned int AT91F_UDP_InterruptStatusRegister(
peter
parents:
diff changeset
  2885
  AT91PS_UDP pUDP )      // \arg  pointer to a UDP controller
peter
parents:
diff changeset
  2886
{
peter
parents:
diff changeset
  2887
  return pUDP->UDP_ISR;
peter
parents:
diff changeset
  2888
}
peter
parents:
diff changeset
  2889
peter
parents:
diff changeset
  2890
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  2891
//  \fn    AT91F_UDP_InterruptClearRegister
peter
parents:
diff changeset
  2892
//  \brief Clear Interrupt Register
peter
parents:
diff changeset
  2893
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  2894
__inline void AT91F_UDP_InterruptClearRegister (
peter
parents:
diff changeset
  2895
  AT91PS_UDP pUDP,       // \arg pointer to UDP controller
peter
parents:
diff changeset
  2896
  unsigned int flag)     // \arg IT to be cleat
peter
parents:
diff changeset
  2897
{
peter
parents:
diff changeset
  2898
  pUDP->UDP_ICR = flag;
peter
parents:
diff changeset
  2899
}
peter
parents:
diff changeset
  2900
peter
parents:
diff changeset
  2901
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  2902
//  \fn    AT91F_UDP_EnableTransceiver
peter
parents:
diff changeset
  2903
//  \brief Enable transceiver
peter
parents:
diff changeset
  2904
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  2905
__inline void AT91F_UDP_EnableTransceiver(
peter
parents:
diff changeset
  2906
  AT91PS_UDP pUDP )      // \arg  pointer to a UDP controller
peter
parents:
diff changeset
  2907
{
peter
parents:
diff changeset
  2908
    pUDP->UDP_TXVC &= ~AT91C_UDP_TXVDIS;
peter
parents:
diff changeset
  2909
}
peter
parents:
diff changeset
  2910
peter
parents:
diff changeset
  2911
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  2912
//  \fn    AT91F_UDP_DisableTransceiver
peter
parents:
diff changeset
  2913
//  \brief Disable transceiver
peter
parents:
diff changeset
  2914
// ----------------------------------------------------------------------------
peter
parents:
diff changeset
  2915
__inline void AT91F_UDP_DisableTransceiver(
peter
parents:
diff changeset
  2916
  AT91PS_UDP pUDP )      // \arg  pointer to a UDP controller
peter
parents:
diff changeset
  2917
{
peter
parents:
diff changeset
  2918
    pUDP->UDP_TXVC = AT91C_UDP_TXVDIS;
peter
parents:
diff changeset
  2919
}
peter
parents:
diff changeset
  2920
peter
parents:
diff changeset
  2921
/* *****************************************************************************
peter
parents:
diff changeset
  2922
                SOFTWARE API FOR TC
peter
parents:
diff changeset
  2923
   ***************************************************************************** */
peter
parents:
diff changeset
  2924
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2925
//* \fn    AT91F_TC_InterruptEnable
peter
parents:
diff changeset
  2926
//* \brief Enable TC Interrupt
peter
parents:
diff changeset
  2927
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2928
__inline void AT91F_TC_InterruptEnable(
peter
parents:
diff changeset
  2929
        AT91PS_TC pTc,   // \arg  pointer to a TC controller
peter
parents:
diff changeset
  2930
        unsigned int flag) // \arg  TC interrupt to be enabled
peter
parents:
diff changeset
  2931
{
peter
parents:
diff changeset
  2932
        pTc->TC_IER = flag;
peter
parents:
diff changeset
  2933
}
peter
parents:
diff changeset
  2934
peter
parents:
diff changeset
  2935
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2936
//* \fn    AT91F_TC_InterruptDisable
peter
parents:
diff changeset
  2937
//* \brief Disable TC Interrupt
peter
parents:
diff changeset
  2938
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2939
__inline void AT91F_TC_InterruptDisable(
peter
parents:
diff changeset
  2940
        AT91PS_TC pTc,   // \arg  pointer to a TC controller
peter
parents:
diff changeset
  2941
        unsigned int flag) // \arg  TC interrupt to be disabled
peter
parents:
diff changeset
  2942
{
peter
parents:
diff changeset
  2943
        pTc->TC_IDR = flag;
peter
parents:
diff changeset
  2944
}
peter
parents:
diff changeset
  2945
peter
parents:
diff changeset
  2946
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2947
//* \fn    AT91F_TC_GetInterruptMaskStatus
peter
parents:
diff changeset
  2948
//* \brief Return TC Interrupt Mask Status
peter
parents:
diff changeset
  2949
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2950
__inline unsigned int AT91F_TC_GetInterruptMaskStatus( // \return TC Interrupt Mask Status
peter
parents:
diff changeset
  2951
        AT91PS_TC pTc) // \arg  pointer to a TC controller
peter
parents:
diff changeset
  2952
{
peter
parents:
diff changeset
  2953
        return pTc->TC_IMR;
peter
parents:
diff changeset
  2954
}
peter
parents:
diff changeset
  2955
peter
parents:
diff changeset
  2956
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2957
//* \fn    AT91F_TC_IsInterruptMasked
peter
parents:
diff changeset
  2958
//* \brief Test if TC Interrupt is Masked
peter
parents:
diff changeset
  2959
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2960
__inline int AT91F_TC_IsInterruptMasked(
peter
parents:
diff changeset
  2961
        AT91PS_TC pTc,   // \arg  pointer to a TC controller
peter
parents:
diff changeset
  2962
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  2963
{
peter
parents:
diff changeset
  2964
        return (AT91F_TC_GetInterruptMaskStatus(pTc) & flag);
peter
parents:
diff changeset
  2965
}
peter
parents:
diff changeset
  2966
peter
parents:
diff changeset
  2967
/* *****************************************************************************
peter
parents:
diff changeset
  2968
                SOFTWARE API FOR CAN
peter
parents:
diff changeset
  2969
   ***************************************************************************** */
peter
parents:
diff changeset
  2970
#define	STANDARD_FORMAT 0
peter
parents:
diff changeset
  2971
#define	EXTENDED_FORMAT 1
peter
parents:
diff changeset
  2972
peter
parents:
diff changeset
  2973
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2974
//* \fn    AT91F_InitMailboxRegisters()
peter
parents:
diff changeset
  2975
//* \brief Configure the corresponding mailbox
peter
parents:
diff changeset
  2976
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2977
__inline void AT91F_InitMailboxRegisters(AT91PS_CAN_MB	CAN_Mailbox,
peter
parents:
diff changeset
  2978
								int  			mode_reg,
peter
parents:
diff changeset
  2979
								int 			acceptance_mask_reg,
peter
parents:
diff changeset
  2980
								int  			id_reg,
peter
parents:
diff changeset
  2981
								int  			data_low_reg,
peter
parents:
diff changeset
  2982
								int  			data_high_reg,
peter
parents:
diff changeset
  2983
								int  			control_reg)
peter
parents:
diff changeset
  2984
{
peter
parents:
diff changeset
  2985
	CAN_Mailbox->CAN_MB_MCR 	= 0x0;
peter
parents:
diff changeset
  2986
	CAN_Mailbox->CAN_MB_MMR 	= mode_reg;
peter
parents:
diff changeset
  2987
	CAN_Mailbox->CAN_MB_MAM 	= acceptance_mask_reg;
peter
parents:
diff changeset
  2988
	CAN_Mailbox->CAN_MB_MID 	= id_reg;
peter
parents:
diff changeset
  2989
	CAN_Mailbox->CAN_MB_MDL 	= data_low_reg; 		
peter
parents:
diff changeset
  2990
	CAN_Mailbox->CAN_MB_MDH 	= data_high_reg;
peter
parents:
diff changeset
  2991
	CAN_Mailbox->CAN_MB_MCR 	= control_reg;
peter
parents:
diff changeset
  2992
}
peter
parents:
diff changeset
  2993
peter
parents:
diff changeset
  2994
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2995
//* \fn    AT91F_EnableCAN()
peter
parents:
diff changeset
  2996
//* \brief
peter
parents:
diff changeset
  2997
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  2998
__inline void AT91F_EnableCAN(
peter
parents:
diff changeset
  2999
	AT91PS_CAN pCAN)     // pointer to a CAN controller
peter
parents:
diff changeset
  3000
{
peter
parents:
diff changeset
  3001
	pCAN->CAN_MR |= AT91C_CAN_CANEN;
peter
parents:
diff changeset
  3002
peter
parents:
diff changeset
  3003
	// Wait for WAKEUP flag raising <=> 11-recessive-bit were scanned by the transceiver
peter
parents:
diff changeset
  3004
	while( (pCAN->CAN_SR & AT91C_CAN_WAKEUP) != AT91C_CAN_WAKEUP );
peter
parents:
diff changeset
  3005
}
peter
parents:
diff changeset
  3006
peter
parents:
diff changeset
  3007
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3008
//* \fn    AT91F_DisableCAN()
peter
parents:
diff changeset
  3009
//* \brief
peter
parents:
diff changeset
  3010
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3011
__inline void AT91F_DisableCAN(
peter
parents:
diff changeset
  3012
	AT91PS_CAN pCAN)     // pointer to a CAN controller
peter
parents:
diff changeset
  3013
{
peter
parents:
diff changeset
  3014
	pCAN->CAN_MR &= ~AT91C_CAN_CANEN;
peter
parents:
diff changeset
  3015
}
peter
parents:
diff changeset
  3016
peter
parents:
diff changeset
  3017
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3018
//* \fn    AT91F_CAN_EnableIt
peter
parents:
diff changeset
  3019
//* \brief Enable CAN interrupt
peter
parents:
diff changeset
  3020
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3021
__inline void AT91F_CAN_EnableIt (
peter
parents:
diff changeset
  3022
	AT91PS_CAN pCAN,     // pointer to a CAN controller
peter
parents:
diff changeset
  3023
	unsigned int flag)   // IT to be enabled
peter
parents:
diff changeset
  3024
{
peter
parents:
diff changeset
  3025
	//* Write to the IER register
peter
parents:
diff changeset
  3026
	pCAN->CAN_IER = flag;
peter
parents:
diff changeset
  3027
}
peter
parents:
diff changeset
  3028
peter
parents:
diff changeset
  3029
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3030
//* \fn    AT91F_CAN_DisableIt
peter
parents:
diff changeset
  3031
//* \brief Disable CAN interrupt
peter
parents:
diff changeset
  3032
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3033
__inline void AT91F_CAN_DisableIt (
peter
parents:
diff changeset
  3034
	AT91PS_CAN pCAN, // pointer to a CAN controller
peter
parents:
diff changeset
  3035
	unsigned int flag) // IT to be disabled
peter
parents:
diff changeset
  3036
{
peter
parents:
diff changeset
  3037
	//* Write to the IDR register
peter
parents:
diff changeset
  3038
	pCAN->CAN_IDR = flag;
peter
parents:
diff changeset
  3039
}
peter
parents:
diff changeset
  3040
peter
parents:
diff changeset
  3041
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3042
//* \fn    AT91F_CAN_GetStatus
peter
parents:
diff changeset
  3043
//* \brief Return CAN Interrupt Status
peter
parents:
diff changeset
  3044
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3045
__inline unsigned int AT91F_CAN_GetStatus( // \return CAN Interrupt Status
peter
parents:
diff changeset
  3046
	AT91PS_CAN pCAN) // pointer to a CAN controller
peter
parents:
diff changeset
  3047
{
peter
parents:
diff changeset
  3048
	return pCAN->CAN_SR;
peter
parents:
diff changeset
  3049
}
peter
parents:
diff changeset
  3050
peter
parents:
diff changeset
  3051
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3052
//* \fn    AT91F_CAN_GetInterruptMaskStatus
peter
parents:
diff changeset
  3053
//* \brief Return CAN Interrupt Mask Status
peter
parents:
diff changeset
  3054
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3055
__inline unsigned int AT91F_CAN_GetInterruptMaskStatus( // \return CAN Interrupt Mask Status
peter
parents:
diff changeset
  3056
	AT91PS_CAN pCAN) // pointer to a CAN controller
peter
parents:
diff changeset
  3057
{
peter
parents:
diff changeset
  3058
	return pCAN->CAN_IMR;
peter
parents:
diff changeset
  3059
}
peter
parents:
diff changeset
  3060
peter
parents:
diff changeset
  3061
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3062
//* \fn    AT91F_CAN_IsInterruptMasked
peter
parents:
diff changeset
  3063
//* \brief Test if CAN Interrupt is Masked
peter
parents:
diff changeset
  3064
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3065
__inline unsigned int AT91F_CAN_IsInterruptMasked(
peter
parents:
diff changeset
  3066
        AT91PS_CAN pCAN,   // \arg  pointer to a CAN controller
peter
parents:
diff changeset
  3067
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  3068
{
peter
parents:
diff changeset
  3069
	return (AT91F_CAN_GetInterruptMaskStatus(pCAN) & flag);
peter
parents:
diff changeset
  3070
}
peter
parents:
diff changeset
  3071
peter
parents:
diff changeset
  3072
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3073
//* \fn    AT91F_CAN_IsStatusSet
peter
parents:
diff changeset
  3074
//* \brief Test if CAN Interrupt is Set
peter
parents:
diff changeset
  3075
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3076
__inline unsigned int AT91F_CAN_IsStatusSet(
peter
parents:
diff changeset
  3077
        AT91PS_CAN pCAN,   // \arg  pointer to a CAN controller
peter
parents:
diff changeset
  3078
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  3079
{
peter
parents:
diff changeset
  3080
	return (AT91F_CAN_GetStatus(pCAN) & flag);
peter
parents:
diff changeset
  3081
}
peter
parents:
diff changeset
  3082
peter
parents:
diff changeset
  3083
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3084
//* \fn    AT91F_CAN_CfgModeReg
peter
parents:
diff changeset
  3085
//* \brief Configure the Mode Register of the CAN controller
peter
parents:
diff changeset
  3086
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3087
__inline void AT91F_CAN_CfgModeReg (
peter
parents:
diff changeset
  3088
	AT91PS_CAN pCAN, // pointer to a CAN controller
peter
parents:
diff changeset
  3089
	unsigned int mode)        // mode register
peter
parents:
diff changeset
  3090
{
peter
parents:
diff changeset
  3091
	//* Write to the MR register
peter
parents:
diff changeset
  3092
	pCAN->CAN_MR = mode;
peter
parents:
diff changeset
  3093
}
peter
parents:
diff changeset
  3094
peter
parents:
diff changeset
  3095
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3096
//* \fn    AT91F_CAN_GetModeReg
peter
parents:
diff changeset
  3097
//* \brief Return the Mode Register of the CAN controller value
peter
parents:
diff changeset
  3098
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3099
__inline unsigned int AT91F_CAN_GetModeReg (
peter
parents:
diff changeset
  3100
	AT91PS_CAN pCAN // pointer to a CAN controller
peter
parents:
diff changeset
  3101
	)
peter
parents:
diff changeset
  3102
{
peter
parents:
diff changeset
  3103
	return pCAN->CAN_MR;	
peter
parents:
diff changeset
  3104
}
peter
parents:
diff changeset
  3105
peter
parents:
diff changeset
  3106
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3107
//* \fn    AT91F_CAN_CfgBaudrateReg
peter
parents:
diff changeset
  3108
//* \brief Configure the Baudrate of the CAN controller for the network
peter
parents:
diff changeset
  3109
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3110
__inline void AT91F_CAN_CfgBaudrateReg (
peter
parents:
diff changeset
  3111
	AT91PS_CAN pCAN, // pointer to a CAN controller
peter
parents:
diff changeset
  3112
	unsigned int baudrate_cfg)
peter
parents:
diff changeset
  3113
{
peter
parents:
diff changeset
  3114
	//* Write to the BR register
peter
parents:
diff changeset
  3115
	pCAN->CAN_BR = baudrate_cfg;	
peter
parents:
diff changeset
  3116
}
peter
parents:
diff changeset
  3117
peter
parents:
diff changeset
  3118
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3119
//* \fn    AT91F_CAN_GetBaudrate
peter
parents:
diff changeset
  3120
//* \brief Return the Baudrate of the CAN controller for the network value
peter
parents:
diff changeset
  3121
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3122
__inline unsigned int AT91F_CAN_GetBaudrate (
peter
parents:
diff changeset
  3123
	AT91PS_CAN pCAN // pointer to a CAN controller
peter
parents:
diff changeset
  3124
	)
peter
parents:
diff changeset
  3125
{
peter
parents:
diff changeset
  3126
	return pCAN->CAN_BR;	
peter
parents:
diff changeset
  3127
}
peter
parents:
diff changeset
  3128
peter
parents:
diff changeset
  3129
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3130
//* \fn    AT91F_CAN_GetInternalCounter
peter
parents:
diff changeset
  3131
//* \brief Return CAN Timer Regsiter Value
peter
parents:
diff changeset
  3132
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3133
__inline unsigned int AT91F_CAN_GetInternalCounter (
peter
parents:
diff changeset
  3134
	AT91PS_CAN pCAN // pointer to a CAN controller
peter
parents:
diff changeset
  3135
	)
peter
parents:
diff changeset
  3136
{
peter
parents:
diff changeset
  3137
	return pCAN->CAN_TIM;	
peter
parents:
diff changeset
  3138
}
peter
parents:
diff changeset
  3139
peter
parents:
diff changeset
  3140
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3141
//* \fn    AT91F_CAN_GetTimestamp
peter
parents:
diff changeset
  3142
//* \brief Return CAN Timestamp Register Value
peter
parents:
diff changeset
  3143
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3144
__inline unsigned int AT91F_CAN_GetTimestamp (
peter
parents:
diff changeset
  3145
	AT91PS_CAN pCAN // pointer to a CAN controller
peter
parents:
diff changeset
  3146
	)
peter
parents:
diff changeset
  3147
{
peter
parents:
diff changeset
  3148
	return pCAN->CAN_TIMESTP;	
peter
parents:
diff changeset
  3149
}
peter
parents:
diff changeset
  3150
peter
parents:
diff changeset
  3151
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3152
//* \fn    AT91F_CAN_GetErrorCounter
peter
parents:
diff changeset
  3153
//* \brief Return CAN Error Counter Register Value
peter
parents:
diff changeset
  3154
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3155
__inline unsigned int AT91F_CAN_GetErrorCounter (
peter
parents:
diff changeset
  3156
	AT91PS_CAN pCAN // pointer to a CAN controller
peter
parents:
diff changeset
  3157
	)
peter
parents:
diff changeset
  3158
{
peter
parents:
diff changeset
  3159
	return pCAN->CAN_ECR;	
peter
parents:
diff changeset
  3160
}
peter
parents:
diff changeset
  3161
peter
parents:
diff changeset
  3162
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3163
//* \fn    AT91F_CAN_InitTransferRequest
peter
parents:
diff changeset
  3164
//* \brief Request for a transfer on the corresponding mailboxes
peter
parents:
diff changeset
  3165
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3166
__inline void AT91F_CAN_InitTransferRequest (
peter
parents:
diff changeset
  3167
	AT91PS_CAN pCAN, // pointer to a CAN controller
peter
parents:
diff changeset
  3168
    unsigned int transfer_cmd)
peter
parents:
diff changeset
  3169
{
peter
parents:
diff changeset
  3170
	pCAN->CAN_TCR = transfer_cmd;	
peter
parents:
diff changeset
  3171
}
peter
parents:
diff changeset
  3172
peter
parents:
diff changeset
  3173
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3174
//* \fn    AT91F_CAN_InitAbortRequest
peter
parents:
diff changeset
  3175
//* \brief Abort the corresponding mailboxes
peter
parents:
diff changeset
  3176
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3177
__inline void AT91F_CAN_InitAbortRequest (
peter
parents:
diff changeset
  3178
	AT91PS_CAN pCAN, // pointer to a CAN controller
peter
parents:
diff changeset
  3179
    unsigned int abort_cmd)
peter
parents:
diff changeset
  3180
{
peter
parents:
diff changeset
  3181
	pCAN->CAN_ACR = abort_cmd;	
peter
parents:
diff changeset
  3182
}
peter
parents:
diff changeset
  3183
peter
parents:
diff changeset
  3184
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3185
//* \fn    AT91F_CAN_CfgMessageModeReg
peter
parents:
diff changeset
  3186
//* \brief Program the Message Mode Register
peter
parents:
diff changeset
  3187
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3188
__inline void AT91F_CAN_CfgMessageModeReg (
peter
parents:
diff changeset
  3189
	AT91PS_CAN_MB	CAN_Mailbox, // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3190
    unsigned int mode)
peter
parents:
diff changeset
  3191
{
peter
parents:
diff changeset
  3192
	CAN_Mailbox->CAN_MB_MMR = mode;	
peter
parents:
diff changeset
  3193
}
peter
parents:
diff changeset
  3194
peter
parents:
diff changeset
  3195
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3196
//* \fn    AT91F_CAN_GetMessageModeReg
peter
parents:
diff changeset
  3197
//* \brief Return the Message Mode Register
peter
parents:
diff changeset
  3198
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3199
__inline unsigned int AT91F_CAN_GetMessageModeReg (
peter
parents:
diff changeset
  3200
	AT91PS_CAN_MB	CAN_Mailbox) // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3201
{
peter
parents:
diff changeset
  3202
	return CAN_Mailbox->CAN_MB_MMR;	
peter
parents:
diff changeset
  3203
}
peter
parents:
diff changeset
  3204
peter
parents:
diff changeset
  3205
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3206
//* \fn    AT91F_CAN_CfgMessageIDReg
peter
parents:
diff changeset
  3207
//* \brief Program the Message ID Register
peter
parents:
diff changeset
  3208
//* \brief Version == 0 for Standard messsage, Version == 1 for Extended
peter
parents:
diff changeset
  3209
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3210
__inline void AT91F_CAN_CfgMessageIDReg (
peter
parents:
diff changeset
  3211
	AT91PS_CAN_MB	CAN_Mailbox, // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3212
    unsigned int id,
peter
parents:
diff changeset
  3213
    unsigned char version)
peter
parents:
diff changeset
  3214
{
peter
parents:
diff changeset
  3215
	if(version==0)	// IDvA Standard Format
peter
parents:
diff changeset
  3216
		CAN_Mailbox->CAN_MB_MID = id<<18;
peter
parents:
diff changeset
  3217
	else	// IDvB Extended Format
peter
parents:
diff changeset
  3218
		CAN_Mailbox->CAN_MB_MID = id | (1<<29);	// set MIDE bit
peter
parents:
diff changeset
  3219
}
peter
parents:
diff changeset
  3220
peter
parents:
diff changeset
  3221
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3222
//* \fn    AT91F_CAN_GetMessageIDReg
peter
parents:
diff changeset
  3223
//* \brief Return the Message ID Register
peter
parents:
diff changeset
  3224
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3225
__inline unsigned int AT91F_CAN_GetMessageIDReg (
peter
parents:
diff changeset
  3226
	AT91PS_CAN_MB	CAN_Mailbox) // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3227
{
peter
parents:
diff changeset
  3228
	return CAN_Mailbox->CAN_MB_MID;
peter
parents:
diff changeset
  3229
}
peter
parents:
diff changeset
  3230
peter
parents:
diff changeset
  3231
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3232
//* \fn    AT91F_CAN_CfgMessageAcceptanceMaskReg
peter
parents:
diff changeset
  3233
//* \brief Program the Message Acceptance Mask Register
peter
parents:
diff changeset
  3234
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3235
__inline void AT91F_CAN_CfgMessageAcceptanceMaskReg (
peter
parents:
diff changeset
  3236
	AT91PS_CAN_MB	CAN_Mailbox, // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3237
    unsigned int mask)
peter
parents:
diff changeset
  3238
{
peter
parents:
diff changeset
  3239
	CAN_Mailbox->CAN_MB_MAM = mask;
peter
parents:
diff changeset
  3240
}
peter
parents:
diff changeset
  3241
peter
parents:
diff changeset
  3242
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3243
//* \fn    AT91F_CAN_GetMessageAcceptanceMaskReg
peter
parents:
diff changeset
  3244
//* \brief Return the Message Acceptance Mask Register
peter
parents:
diff changeset
  3245
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3246
__inline unsigned int AT91F_CAN_GetMessageAcceptanceMaskReg (
peter
parents:
diff changeset
  3247
	AT91PS_CAN_MB	CAN_Mailbox) // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3248
{
peter
parents:
diff changeset
  3249
	return CAN_Mailbox->CAN_MB_MAM;
peter
parents:
diff changeset
  3250
}
peter
parents:
diff changeset
  3251
peter
parents:
diff changeset
  3252
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3253
//* \fn    AT91F_CAN_GetFamilyID
peter
parents:
diff changeset
  3254
//* \brief Return the Message ID Register
peter
parents:
diff changeset
  3255
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3256
__inline unsigned int AT91F_CAN_GetFamilyID (
peter
parents:
diff changeset
  3257
	AT91PS_CAN_MB	CAN_Mailbox) // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3258
{
peter
parents:
diff changeset
  3259
	return CAN_Mailbox->CAN_MB_MFID;	
peter
parents:
diff changeset
  3260
}
peter
parents:
diff changeset
  3261
peter
parents:
diff changeset
  3262
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3263
//* \fn    AT91F_CAN_CfgMessageCtrlReg
peter
parents:
diff changeset
  3264
//* \brief Request and config for a transfer on the corresponding mailbox
peter
parents:
diff changeset
  3265
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3266
__inline void AT91F_CAN_CfgMessageCtrlReg (
peter
parents:
diff changeset
  3267
	AT91PS_CAN_MB	CAN_Mailbox, // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3268
    unsigned int message_ctrl_cmd)
peter
parents:
diff changeset
  3269
{
peter
parents:
diff changeset
  3270
	CAN_Mailbox->CAN_MB_MCR = message_ctrl_cmd;	
peter
parents:
diff changeset
  3271
}
peter
parents:
diff changeset
  3272
peter
parents:
diff changeset
  3273
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3274
//* \fn    AT91F_CAN_GetMessageStatus
peter
parents:
diff changeset
  3275
//* \brief Return CAN Mailbox Status
peter
parents:
diff changeset
  3276
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3277
__inline unsigned int AT91F_CAN_GetMessageStatus (
peter
parents:
diff changeset
  3278
	AT91PS_CAN_MB	CAN_Mailbox) // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3279
{
peter
parents:
diff changeset
  3280
	return CAN_Mailbox->CAN_MB_MSR;	
peter
parents:
diff changeset
  3281
}
peter
parents:
diff changeset
  3282
peter
parents:
diff changeset
  3283
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3284
//* \fn    AT91F_CAN_CfgMessageDataLow
peter
parents:
diff changeset
  3285
//* \brief Program data low value
peter
parents:
diff changeset
  3286
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3287
__inline void AT91F_CAN_CfgMessageDataLow (
peter
parents:
diff changeset
  3288
	AT91PS_CAN_MB	CAN_Mailbox, // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3289
    unsigned int data)
peter
parents:
diff changeset
  3290
{
peter
parents:
diff changeset
  3291
	CAN_Mailbox->CAN_MB_MDL = data;	
peter
parents:
diff changeset
  3292
}
peter
parents:
diff changeset
  3293
peter
parents:
diff changeset
  3294
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3295
//* \fn    AT91F_CAN_GetMessageDataLow
peter
parents:
diff changeset
  3296
//* \brief Return data low value
peter
parents:
diff changeset
  3297
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3298
__inline unsigned int AT91F_CAN_GetMessageDataLow (
peter
parents:
diff changeset
  3299
	AT91PS_CAN_MB	CAN_Mailbox) // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3300
{
peter
parents:
diff changeset
  3301
	return CAN_Mailbox->CAN_MB_MDL;	
peter
parents:
diff changeset
  3302
}
peter
parents:
diff changeset
  3303
peter
parents:
diff changeset
  3304
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3305
//* \fn    AT91F_CAN_CfgMessageDataHigh
peter
parents:
diff changeset
  3306
//* \brief Program data high value
peter
parents:
diff changeset
  3307
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3308
__inline void AT91F_CAN_CfgMessageDataHigh (
peter
parents:
diff changeset
  3309
	AT91PS_CAN_MB	CAN_Mailbox, // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3310
    unsigned int data)
peter
parents:
diff changeset
  3311
{
peter
parents:
diff changeset
  3312
	CAN_Mailbox->CAN_MB_MDH = data;	
peter
parents:
diff changeset
  3313
}
peter
parents:
diff changeset
  3314
peter
parents:
diff changeset
  3315
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3316
//* \fn    AT91F_CAN_GetMessageDataHigh
peter
parents:
diff changeset
  3317
//* \brief Return data high value
peter
parents:
diff changeset
  3318
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3319
__inline unsigned int AT91F_CAN_GetMessageDataHigh (
peter
parents:
diff changeset
  3320
	AT91PS_CAN_MB	CAN_Mailbox) // pointer to a CAN Mailbox
peter
parents:
diff changeset
  3321
{
peter
parents:
diff changeset
  3322
	return CAN_Mailbox->CAN_MB_MDH;	
peter
parents:
diff changeset
  3323
}
peter
parents:
diff changeset
  3324
peter
parents:
diff changeset
  3325
/* *****************************************************************************
peter
parents:
diff changeset
  3326
                SOFTWARE API FOR ADC
peter
parents:
diff changeset
  3327
   ***************************************************************************** */
peter
parents:
diff changeset
  3328
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3329
//* \fn    AT91F_ADC_EnableIt
peter
parents:
diff changeset
  3330
//* \brief Enable ADC interrupt
peter
parents:
diff changeset
  3331
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3332
__inline void AT91F_ADC_EnableIt (
peter
parents:
diff changeset
  3333
	AT91PS_ADC pADC,     // pointer to a ADC controller
peter
parents:
diff changeset
  3334
	unsigned int flag)   // IT to be enabled
peter
parents:
diff changeset
  3335
{
peter
parents:
diff changeset
  3336
	//* Write to the IER register
peter
parents:
diff changeset
  3337
	pADC->ADC_IER = flag;
peter
parents:
diff changeset
  3338
}
peter
parents:
diff changeset
  3339
peter
parents:
diff changeset
  3340
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3341
//* \fn    AT91F_ADC_DisableIt
peter
parents:
diff changeset
  3342
//* \brief Disable ADC interrupt
peter
parents:
diff changeset
  3343
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3344
__inline void AT91F_ADC_DisableIt (
peter
parents:
diff changeset
  3345
	AT91PS_ADC pADC, // pointer to a ADC controller
peter
parents:
diff changeset
  3346
	unsigned int flag) // IT to be disabled
peter
parents:
diff changeset
  3347
{
peter
parents:
diff changeset
  3348
	//* Write to the IDR register
peter
parents:
diff changeset
  3349
	pADC->ADC_IDR = flag;
peter
parents:
diff changeset
  3350
}
peter
parents:
diff changeset
  3351
peter
parents:
diff changeset
  3352
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3353
//* \fn    AT91F_ADC_GetStatus
peter
parents:
diff changeset
  3354
//* \brief Return ADC Interrupt Status
peter
parents:
diff changeset
  3355
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3356
__inline unsigned int AT91F_ADC_GetStatus( // \return ADC Interrupt Status
peter
parents:
diff changeset
  3357
	AT91PS_ADC pADC) // pointer to a ADC controller
peter
parents:
diff changeset
  3358
{
peter
parents:
diff changeset
  3359
	return pADC->ADC_SR;
peter
parents:
diff changeset
  3360
}
peter
parents:
diff changeset
  3361
peter
parents:
diff changeset
  3362
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3363
//* \fn    AT91F_ADC_GetInterruptMaskStatus
peter
parents:
diff changeset
  3364
//* \brief Return ADC Interrupt Mask Status
peter
parents:
diff changeset
  3365
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3366
__inline unsigned int AT91F_ADC_GetInterruptMaskStatus( // \return ADC Interrupt Mask Status
peter
parents:
diff changeset
  3367
	AT91PS_ADC pADC) // pointer to a ADC controller
peter
parents:
diff changeset
  3368
{
peter
parents:
diff changeset
  3369
	return pADC->ADC_IMR;
peter
parents:
diff changeset
  3370
}
peter
parents:
diff changeset
  3371
peter
parents:
diff changeset
  3372
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3373
//* \fn    AT91F_ADC_IsInterruptMasked
peter
parents:
diff changeset
  3374
//* \brief Test if ADC Interrupt is Masked
peter
parents:
diff changeset
  3375
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3376
__inline unsigned int AT91F_ADC_IsInterruptMasked(
peter
parents:
diff changeset
  3377
        AT91PS_ADC pADC,   // \arg  pointer to a ADC controller
peter
parents:
diff changeset
  3378
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  3379
{
peter
parents:
diff changeset
  3380
	return (AT91F_ADC_GetInterruptMaskStatus(pADC) & flag);
peter
parents:
diff changeset
  3381
}
peter
parents:
diff changeset
  3382
peter
parents:
diff changeset
  3383
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3384
//* \fn    AT91F_ADC_IsStatusSet
peter
parents:
diff changeset
  3385
//* \brief Test if ADC Status is Set
peter
parents:
diff changeset
  3386
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3387
__inline unsigned int AT91F_ADC_IsStatusSet(
peter
parents:
diff changeset
  3388
        AT91PS_ADC pADC,   // \arg  pointer to a ADC controller
peter
parents:
diff changeset
  3389
        unsigned int flag) // \arg  flag to be tested
peter
parents:
diff changeset
  3390
{
peter
parents:
diff changeset
  3391
	return (AT91F_ADC_GetStatus(pADC) & flag);
peter
parents:
diff changeset
  3392
}
peter
parents:
diff changeset
  3393
peter
parents:
diff changeset
  3394
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3395
//* \fn    AT91F_ADC_CfgModeReg
peter
parents:
diff changeset
  3396
//* \brief Configure the Mode Register of the ADC controller
peter
parents:
diff changeset
  3397
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3398
__inline void AT91F_ADC_CfgModeReg (
peter
parents:
diff changeset
  3399
	AT91PS_ADC pADC, // pointer to a ADC controller
peter
parents:
diff changeset
  3400
	unsigned int mode)        // mode register
peter
parents:
diff changeset
  3401
{
peter
parents:
diff changeset
  3402
	//* Write to the MR register
peter
parents:
diff changeset
  3403
	pADC->ADC_MR = mode;
peter
parents:
diff changeset
  3404
}
peter
parents:
diff changeset
  3405
peter
parents:
diff changeset
  3406
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3407
//* \fn    AT91F_ADC_GetModeReg
peter
parents:
diff changeset
  3408
//* \brief Return the Mode Register of the ADC controller value
peter
parents:
diff changeset
  3409
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3410
__inline unsigned int AT91F_ADC_GetModeReg (
peter
parents:
diff changeset
  3411
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3412
	)
peter
parents:
diff changeset
  3413
{
peter
parents:
diff changeset
  3414
	return pADC->ADC_MR;	
peter
parents:
diff changeset
  3415
}
peter
parents:
diff changeset
  3416
peter
parents:
diff changeset
  3417
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3418
//* \fn    AT91F_ADC_CfgTimings
peter
parents:
diff changeset
  3419
//* \brief Configure the different necessary timings of the ADC controller
peter
parents:
diff changeset
  3420
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3421
__inline void AT91F_ADC_CfgTimings (
peter
parents:
diff changeset
  3422
	AT91PS_ADC pADC, // pointer to a ADC controller
peter
parents:
diff changeset
  3423
	unsigned int mck_clock, // in MHz
peter
parents:
diff changeset
  3424
	unsigned int adc_clock, // in MHz
peter
parents:
diff changeset
  3425
	unsigned int startup_time, // in us
peter
parents:
diff changeset
  3426
	unsigned int sample_and_hold_time)	// in ns
peter
parents:
diff changeset
  3427
{
peter
parents:
diff changeset
  3428
	unsigned int prescal,startup,shtim;
peter
parents:
diff changeset
  3429
	
peter
parents:
diff changeset
  3430
	prescal = mck_clock/(2*adc_clock) - 1;
peter
parents:
diff changeset
  3431
	startup = adc_clock*startup_time/8 - 1;
peter
parents:
diff changeset
  3432
	shtim = adc_clock*sample_and_hold_time/1000 - 1;
peter
parents:
diff changeset
  3433
	
peter
parents:
diff changeset
  3434
	//* Write to the MR register
peter
parents:
diff changeset
  3435
	pADC->ADC_MR = ( (prescal<<8) & AT91C_ADC_PRESCAL) | ( (startup<<16) & AT91C_ADC_STARTUP) | ( (shtim<<24) & AT91C_ADC_SHTIM);
peter
parents:
diff changeset
  3436
}
peter
parents:
diff changeset
  3437
peter
parents:
diff changeset
  3438
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3439
//* \fn    AT91F_ADC_EnableChannel
peter
parents:
diff changeset
  3440
//* \brief Return ADC Timer Register Value
peter
parents:
diff changeset
  3441
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3442
__inline void AT91F_ADC_EnableChannel (
peter
parents:
diff changeset
  3443
	AT91PS_ADC pADC, // pointer to a ADC controller
peter
parents:
diff changeset
  3444
	unsigned int channel)        // mode register
peter
parents:
diff changeset
  3445
{
peter
parents:
diff changeset
  3446
	//* Write to the CHER register
peter
parents:
diff changeset
  3447
	pADC->ADC_CHER = channel;
peter
parents:
diff changeset
  3448
}
peter
parents:
diff changeset
  3449
peter
parents:
diff changeset
  3450
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3451
//* \fn    AT91F_ADC_DisableChannel
peter
parents:
diff changeset
  3452
//* \brief Return ADC Timer Register Value
peter
parents:
diff changeset
  3453
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3454
__inline void AT91F_ADC_DisableChannel (
peter
parents:
diff changeset
  3455
	AT91PS_ADC pADC, // pointer to a ADC controller
peter
parents:
diff changeset
  3456
	unsigned int channel)        // mode register
peter
parents:
diff changeset
  3457
{
peter
parents:
diff changeset
  3458
	//* Write to the CHDR register
peter
parents:
diff changeset
  3459
	pADC->ADC_CHDR = channel;
peter
parents:
diff changeset
  3460
}
peter
parents:
diff changeset
  3461
peter
parents:
diff changeset
  3462
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3463
//* \fn    AT91F_ADC_GetChannelStatus
peter
parents:
diff changeset
  3464
//* \brief Return ADC Timer Register Value
peter
parents:
diff changeset
  3465
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3466
__inline unsigned int AT91F_ADC_GetChannelStatus (
peter
parents:
diff changeset
  3467
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3468
	)
peter
parents:
diff changeset
  3469
{
peter
parents:
diff changeset
  3470
	return pADC->ADC_CHSR;	
peter
parents:
diff changeset
  3471
}
peter
parents:
diff changeset
  3472
peter
parents:
diff changeset
  3473
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3474
//* \fn    AT91F_ADC_StartConversion
peter
parents:
diff changeset
  3475
//* \brief Software request for a analog to digital conversion
peter
parents:
diff changeset
  3476
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3477
__inline void AT91F_ADC_StartConversion (
peter
parents:
diff changeset
  3478
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3479
	)
peter
parents:
diff changeset
  3480
{
peter
parents:
diff changeset
  3481
	pADC->ADC_CR = AT91C_ADC_START;	
peter
parents:
diff changeset
  3482
}
peter
parents:
diff changeset
  3483
peter
parents:
diff changeset
  3484
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3485
//* \fn    AT91F_ADC_SoftReset
peter
parents:
diff changeset
  3486
//* \brief Software reset
peter
parents:
diff changeset
  3487
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3488
__inline void AT91F_ADC_SoftReset (
peter
parents:
diff changeset
  3489
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3490
	)
peter
parents:
diff changeset
  3491
{
peter
parents:
diff changeset
  3492
	pADC->ADC_CR = AT91C_ADC_SWRST;	
peter
parents:
diff changeset
  3493
}
peter
parents:
diff changeset
  3494
peter
parents:
diff changeset
  3495
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3496
//* \fn    AT91F_ADC_GetLastConvertedData
peter
parents:
diff changeset
  3497
//* \brief Return the Last Converted Data
peter
parents:
diff changeset
  3498
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3499
__inline unsigned int AT91F_ADC_GetLastConvertedData (
peter
parents:
diff changeset
  3500
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3501
	)
peter
parents:
diff changeset
  3502
{
peter
parents:
diff changeset
  3503
	return pADC->ADC_LCDR;	
peter
parents:
diff changeset
  3504
}
peter
parents:
diff changeset
  3505
peter
parents:
diff changeset
  3506
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3507
//* \fn    AT91F_ADC_GetConvertedDataCH0
peter
parents:
diff changeset
  3508
//* \brief Return the Channel 0 Converted Data
peter
parents:
diff changeset
  3509
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3510
__inline unsigned int AT91F_ADC_GetConvertedDataCH0 (
peter
parents:
diff changeset
  3511
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3512
	)
peter
parents:
diff changeset
  3513
{
peter
parents:
diff changeset
  3514
	return pADC->ADC_CDR0;	
peter
parents:
diff changeset
  3515
}
peter
parents:
diff changeset
  3516
peter
parents:
diff changeset
  3517
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3518
//* \fn    AT91F_ADC_GetConvertedDataCH1
peter
parents:
diff changeset
  3519
//* \brief Return the Channel 1 Converted Data
peter
parents:
diff changeset
  3520
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3521
__inline unsigned int AT91F_ADC_GetConvertedDataCH1 (
peter
parents:
diff changeset
  3522
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3523
	)
peter
parents:
diff changeset
  3524
{
peter
parents:
diff changeset
  3525
	return pADC->ADC_CDR1;	
peter
parents:
diff changeset
  3526
}
peter
parents:
diff changeset
  3527
peter
parents:
diff changeset
  3528
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3529
//* \fn    AT91F_ADC_GetConvertedDataCH2
peter
parents:
diff changeset
  3530
//* \brief Return the Channel 2 Converted Data
peter
parents:
diff changeset
  3531
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3532
__inline unsigned int AT91F_ADC_GetConvertedDataCH2 (
peter
parents:
diff changeset
  3533
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3534
	)
peter
parents:
diff changeset
  3535
{
peter
parents:
diff changeset
  3536
	return pADC->ADC_CDR2;	
peter
parents:
diff changeset
  3537
}
peter
parents:
diff changeset
  3538
peter
parents:
diff changeset
  3539
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3540
//* \fn    AT91F_ADC_GetConvertedDataCH3
peter
parents:
diff changeset
  3541
//* \brief Return the Channel 3 Converted Data
peter
parents:
diff changeset
  3542
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3543
__inline unsigned int AT91F_ADC_GetConvertedDataCH3 (
peter
parents:
diff changeset
  3544
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3545
	)
peter
parents:
diff changeset
  3546
{
peter
parents:
diff changeset
  3547
	return pADC->ADC_CDR3;	
peter
parents:
diff changeset
  3548
}
peter
parents:
diff changeset
  3549
peter
parents:
diff changeset
  3550
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3551
//* \fn    AT91F_ADC_GetConvertedDataCH4
peter
parents:
diff changeset
  3552
//* \brief Return the Channel 4 Converted Data
peter
parents:
diff changeset
  3553
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3554
__inline unsigned int AT91F_ADC_GetConvertedDataCH4 (
peter
parents:
diff changeset
  3555
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3556
	)
peter
parents:
diff changeset
  3557
{
peter
parents:
diff changeset
  3558
	return pADC->ADC_CDR4;	
peter
parents:
diff changeset
  3559
}
peter
parents:
diff changeset
  3560
peter
parents:
diff changeset
  3561
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3562
//* \fn    AT91F_ADC_GetConvertedDataCH5
peter
parents:
diff changeset
  3563
//* \brief Return the Channel 5 Converted Data
peter
parents:
diff changeset
  3564
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3565
__inline unsigned int AT91F_ADC_GetConvertedDataCH5 (
peter
parents:
diff changeset
  3566
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3567
	)
peter
parents:
diff changeset
  3568
{
peter
parents:
diff changeset
  3569
	return pADC->ADC_CDR5;	
peter
parents:
diff changeset
  3570
}
peter
parents:
diff changeset
  3571
peter
parents:
diff changeset
  3572
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3573
//* \fn    AT91F_ADC_GetConvertedDataCH6
peter
parents:
diff changeset
  3574
//* \brief Return the Channel 6 Converted Data
peter
parents:
diff changeset
  3575
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3576
__inline unsigned int AT91F_ADC_GetConvertedDataCH6 (
peter
parents:
diff changeset
  3577
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3578
	)
peter
parents:
diff changeset
  3579
{
peter
parents:
diff changeset
  3580
	return pADC->ADC_CDR6;	
peter
parents:
diff changeset
  3581
}
peter
parents:
diff changeset
  3582
peter
parents:
diff changeset
  3583
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3584
//* \fn    AT91F_ADC_GetConvertedDataCH7
peter
parents:
diff changeset
  3585
//* \brief Return the Channel 7 Converted Data
peter
parents:
diff changeset
  3586
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3587
__inline unsigned int AT91F_ADC_GetConvertedDataCH7 (
peter
parents:
diff changeset
  3588
	AT91PS_ADC pADC // pointer to a ADC controller
peter
parents:
diff changeset
  3589
	)
peter
parents:
diff changeset
  3590
{
peter
parents:
diff changeset
  3591
	return pADC->ADC_CDR7;	
peter
parents:
diff changeset
  3592
}
peter
parents:
diff changeset
  3593
peter
parents:
diff changeset
  3594
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3595
//* \fn    AT91F_DBGU_CfgPMC
peter
parents:
diff changeset
  3596
//* \brief Enable Peripheral clock in PMC for  DBGU
peter
parents:
diff changeset
  3597
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3598
__inline void AT91F_DBGU_CfgPMC (void)
peter
parents:
diff changeset
  3599
{
peter
parents:
diff changeset
  3600
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3601
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3602
		((unsigned int) 1 << AT91C_ID_SYS));
peter
parents:
diff changeset
  3603
}
peter
parents:
diff changeset
  3604
peter
parents:
diff changeset
  3605
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3606
//* \fn    AT91F_DBGU_CfgPIO
peter
parents:
diff changeset
  3607
//* \brief Configure PIO controllers to drive DBGU signals
peter
parents:
diff changeset
  3608
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3609
__inline void AT91F_DBGU_CfgPIO (void)
peter
parents:
diff changeset
  3610
{
peter
parents:
diff changeset
  3611
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3612
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3613
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3614
		((unsigned int) AT91C_PA27_DRXD    ) |
peter
parents:
diff changeset
  3615
		((unsigned int) AT91C_PA28_DTXD    ), // Peripheral A
peter
parents:
diff changeset
  3616
		0); // Peripheral B
peter
parents:
diff changeset
  3617
}
peter
parents:
diff changeset
  3618
peter
parents:
diff changeset
  3619
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3620
//* \fn    AT91F_PMC_CfgPMC
peter
parents:
diff changeset
  3621
//* \brief Enable Peripheral clock in PMC for  PMC
peter
parents:
diff changeset
  3622
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3623
__inline void AT91F_PMC_CfgPMC (void)
peter
parents:
diff changeset
  3624
{
peter
parents:
diff changeset
  3625
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3626
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3627
		((unsigned int) 1 << AT91C_ID_SYS));
peter
parents:
diff changeset
  3628
}
peter
parents:
diff changeset
  3629
peter
parents:
diff changeset
  3630
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3631
//* \fn    AT91F_PMC_CfgPIO
peter
parents:
diff changeset
  3632
//* \brief Configure PIO controllers to drive PMC signals
peter
parents:
diff changeset
  3633
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3634
__inline void AT91F_PMC_CfgPIO (void)
peter
parents:
diff changeset
  3635
{
peter
parents:
diff changeset
  3636
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3637
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3638
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3639
		((unsigned int) AT91C_PB30_PCK2    ) |
peter
parents:
diff changeset
  3640
		((unsigned int) AT91C_PB29_PCK1    ), // Peripheral A
peter
parents:
diff changeset
  3641
		((unsigned int) AT91C_PB20_PCK0    ) |
peter
parents:
diff changeset
  3642
		((unsigned int) AT91C_PB0_PCK0    ) |
peter
parents:
diff changeset
  3643
		((unsigned int) AT91C_PB22_PCK2    ) |
peter
parents:
diff changeset
  3644
		((unsigned int) AT91C_PB21_PCK1    )); // Peripheral B
peter
parents:
diff changeset
  3645
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3646
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3647
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3648
		0, // Peripheral A
peter
parents:
diff changeset
  3649
		((unsigned int) AT91C_PA30_PCK2    ) |
peter
parents:
diff changeset
  3650
		((unsigned int) AT91C_PA13_PCK1    ) |
peter
parents:
diff changeset
  3651
		((unsigned int) AT91C_PA27_PCK3    )); // Peripheral B
peter
parents:
diff changeset
  3652
}
peter
parents:
diff changeset
  3653
peter
parents:
diff changeset
  3654
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3655
//* \fn    AT91F_VREG_CfgPMC
peter
parents:
diff changeset
  3656
//* \brief Enable Peripheral clock in PMC for  VREG
peter
parents:
diff changeset
  3657
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3658
__inline void AT91F_VREG_CfgPMC (void)
peter
parents:
diff changeset
  3659
{
peter
parents:
diff changeset
  3660
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3661
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3662
		((unsigned int) 1 << AT91C_ID_SYS));
peter
parents:
diff changeset
  3663
}
peter
parents:
diff changeset
  3664
peter
parents:
diff changeset
  3665
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3666
//* \fn    AT91F_RSTC_CfgPMC
peter
parents:
diff changeset
  3667
//* \brief Enable Peripheral clock in PMC for  RSTC
peter
parents:
diff changeset
  3668
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3669
__inline void AT91F_RSTC_CfgPMC (void)
peter
parents:
diff changeset
  3670
{
peter
parents:
diff changeset
  3671
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3672
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3673
		((unsigned int) 1 << AT91C_ID_SYS));
peter
parents:
diff changeset
  3674
}
peter
parents:
diff changeset
  3675
peter
parents:
diff changeset
  3676
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3677
//* \fn    AT91F_SSC_CfgPMC
peter
parents:
diff changeset
  3678
//* \brief Enable Peripheral clock in PMC for  SSC
peter
parents:
diff changeset
  3679
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3680
__inline void AT91F_SSC_CfgPMC (void)
peter
parents:
diff changeset
  3681
{
peter
parents:
diff changeset
  3682
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3683
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3684
		((unsigned int) 1 << AT91C_ID_SSC));
peter
parents:
diff changeset
  3685
}
peter
parents:
diff changeset
  3686
peter
parents:
diff changeset
  3687
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3688
//* \fn    AT91F_SSC_CfgPIO
peter
parents:
diff changeset
  3689
//* \brief Configure PIO controllers to drive SSC signals
peter
parents:
diff changeset
  3690
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3691
__inline void AT91F_SSC_CfgPIO (void)
peter
parents:
diff changeset
  3692
{
peter
parents:
diff changeset
  3693
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3694
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3695
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3696
		((unsigned int) AT91C_PA25_RK      ) |
peter
parents:
diff changeset
  3697
		((unsigned int) AT91C_PA22_TK      ) |
peter
parents:
diff changeset
  3698
		((unsigned int) AT91C_PA21_TF      ) |
peter
parents:
diff changeset
  3699
		((unsigned int) AT91C_PA24_RD      ) |
peter
parents:
diff changeset
  3700
		((unsigned int) AT91C_PA26_RF      ) |
peter
parents:
diff changeset
  3701
		((unsigned int) AT91C_PA23_TD      ), // Peripheral A
peter
parents:
diff changeset
  3702
		0); // Peripheral B
peter
parents:
diff changeset
  3703
}
peter
parents:
diff changeset
  3704
peter
parents:
diff changeset
  3705
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3706
//* \fn    AT91F_WDTC_CfgPMC
peter
parents:
diff changeset
  3707
//* \brief Enable Peripheral clock in PMC for  WDTC
peter
parents:
diff changeset
  3708
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3709
__inline void AT91F_WDTC_CfgPMC (void)
peter
parents:
diff changeset
  3710
{
peter
parents:
diff changeset
  3711
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3712
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3713
		((unsigned int) 1 << AT91C_ID_SYS));
peter
parents:
diff changeset
  3714
}
peter
parents:
diff changeset
  3715
peter
parents:
diff changeset
  3716
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3717
//* \fn    AT91F_US1_CfgPMC
peter
parents:
diff changeset
  3718
//* \brief Enable Peripheral clock in PMC for  US1
peter
parents:
diff changeset
  3719
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3720
__inline void AT91F_US1_CfgPMC (void)
peter
parents:
diff changeset
  3721
{
peter
parents:
diff changeset
  3722
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3723
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3724
		((unsigned int) 1 << AT91C_ID_US1));
peter
parents:
diff changeset
  3725
}
peter
parents:
diff changeset
  3726
peter
parents:
diff changeset
  3727
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3728
//* \fn    AT91F_US1_CfgPIO
peter
parents:
diff changeset
  3729
//* \brief Configure PIO controllers to drive US1 signals
peter
parents:
diff changeset
  3730
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3731
__inline void AT91F_US1_CfgPIO (void)
peter
parents:
diff changeset
  3732
{
peter
parents:
diff changeset
  3733
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3734
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3735
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3736
		0, // Peripheral A
peter
parents:
diff changeset
  3737
		((unsigned int) AT91C_PB26_RI1     ) |
peter
parents:
diff changeset
  3738
		((unsigned int) AT91C_PB24_DSR1    ) |
peter
parents:
diff changeset
  3739
		((unsigned int) AT91C_PB23_DCD1    ) |
peter
parents:
diff changeset
  3740
		((unsigned int) AT91C_PB25_DTR1    )); // Peripheral B
peter
parents:
diff changeset
  3741
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3742
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3743
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3744
		((unsigned int) AT91C_PA7_SCK1    ) |
peter
parents:
diff changeset
  3745
		((unsigned int) AT91C_PA8_RTS1    ) |
peter
parents:
diff changeset
  3746
		((unsigned int) AT91C_PA6_TXD1    ) |
peter
parents:
diff changeset
  3747
		((unsigned int) AT91C_PA5_RXD1    ) |
peter
parents:
diff changeset
  3748
		((unsigned int) AT91C_PA9_CTS1    ), // Peripheral A
peter
parents:
diff changeset
  3749
		0); // Peripheral B
peter
parents:
diff changeset
  3750
}
peter
parents:
diff changeset
  3751
peter
parents:
diff changeset
  3752
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3753
//* \fn    AT91F_US0_CfgPMC
peter
parents:
diff changeset
  3754
//* \brief Enable Peripheral clock in PMC for  US0
peter
parents:
diff changeset
  3755
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3756
__inline void AT91F_US0_CfgPMC (void)
peter
parents:
diff changeset
  3757
{
peter
parents:
diff changeset
  3758
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3759
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3760
		((unsigned int) 1 << AT91C_ID_US0));
peter
parents:
diff changeset
  3761
}
peter
parents:
diff changeset
  3762
peter
parents:
diff changeset
  3763
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3764
//* \fn    AT91F_US0_CfgPIO
peter
parents:
diff changeset
  3765
//* \brief Configure PIO controllers to drive US0 signals
peter
parents:
diff changeset
  3766
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3767
__inline void AT91F_US0_CfgPIO (void)
peter
parents:
diff changeset
  3768
{
peter
parents:
diff changeset
  3769
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3770
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3771
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3772
		((unsigned int) AT91C_PA0_RXD0    ) |
peter
parents:
diff changeset
  3773
		((unsigned int) AT91C_PA4_CTS0    ) |
peter
parents:
diff changeset
  3774
		((unsigned int) AT91C_PA3_RTS0    ) |
peter
parents:
diff changeset
  3775
		((unsigned int) AT91C_PA2_SCK0    ) |
peter
parents:
diff changeset
  3776
		((unsigned int) AT91C_PA1_TXD0    ), // Peripheral A
peter
parents:
diff changeset
  3777
		0); // Peripheral B
peter
parents:
diff changeset
  3778
}
peter
parents:
diff changeset
  3779
peter
parents:
diff changeset
  3780
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3781
//* \fn    AT91F_SPI1_CfgPMC
peter
parents:
diff changeset
  3782
//* \brief Enable Peripheral clock in PMC for  SPI1
peter
parents:
diff changeset
  3783
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3784
__inline void AT91F_SPI1_CfgPMC (void)
peter
parents:
diff changeset
  3785
{
peter
parents:
diff changeset
  3786
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3787
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3788
		((unsigned int) 1 << AT91C_ID_SPI1));
peter
parents:
diff changeset
  3789
}
peter
parents:
diff changeset
  3790
peter
parents:
diff changeset
  3791
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3792
//* \fn    AT91F_SPI1_CfgPIO
peter
parents:
diff changeset
  3793
//* \brief Configure PIO controllers to drive SPI1 signals
peter
parents:
diff changeset
  3794
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3795
__inline void AT91F_SPI1_CfgPIO (void)
peter
parents:
diff changeset
  3796
{
peter
parents:
diff changeset
  3797
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3798
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3799
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3800
		0, // Peripheral A
peter
parents:
diff changeset
  3801
		((unsigned int) AT91C_PB11_SPI1_NPCS2) |
peter
parents:
diff changeset
  3802
		((unsigned int) AT91C_PB10_SPI1_NPCS1) |
peter
parents:
diff changeset
  3803
		((unsigned int) AT91C_PB16_SPI1_NPCS3)); // Peripheral B
peter
parents:
diff changeset
  3804
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3805
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3806
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3807
		0, // Peripheral A
peter
parents:
diff changeset
  3808
		((unsigned int) AT91C_PA22_SPI1_SPCK) |
peter
parents:
diff changeset
  3809
		((unsigned int) AT91C_PA3_SPI1_NPCS2) |
peter
parents:
diff changeset
  3810
		((unsigned int) AT91C_PA26_SPI1_NPCS2) |
peter
parents:
diff changeset
  3811
		((unsigned int) AT91C_PA25_SPI1_NPCS1) |
peter
parents:
diff changeset
  3812
		((unsigned int) AT91C_PA2_SPI1_NPCS1) |
peter
parents:
diff changeset
  3813
		((unsigned int) AT91C_PA24_SPI1_MISO) |
peter
parents:
diff changeset
  3814
		((unsigned int) AT91C_PA4_SPI1_NPCS3) |
peter
parents:
diff changeset
  3815
		((unsigned int) AT91C_PA29_SPI1_NPCS3) |
peter
parents:
diff changeset
  3816
		((unsigned int) AT91C_PA21_SPI1_NPCS0) |
peter
parents:
diff changeset
  3817
		((unsigned int) AT91C_PA23_SPI1_MOSI)); // Peripheral B
peter
parents:
diff changeset
  3818
}
peter
parents:
diff changeset
  3819
peter
parents:
diff changeset
  3820
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3821
//* \fn    AT91F_SPI0_CfgPMC
peter
parents:
diff changeset
  3822
//* \brief Enable Peripheral clock in PMC for  SPI0
peter
parents:
diff changeset
  3823
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3824
__inline void AT91F_SPI0_CfgPMC (void)
peter
parents:
diff changeset
  3825
{
peter
parents:
diff changeset
  3826
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3827
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3828
		((unsigned int) 1 << AT91C_ID_SPI0));
peter
parents:
diff changeset
  3829
}
peter
parents:
diff changeset
  3830
peter
parents:
diff changeset
  3831
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3832
//* \fn    AT91F_SPI0_CfgPIO
peter
parents:
diff changeset
  3833
//* \brief Configure PIO controllers to drive SPI0 signals
peter
parents:
diff changeset
  3834
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3835
__inline void AT91F_SPI0_CfgPIO (void)
peter
parents:
diff changeset
  3836
{
peter
parents:
diff changeset
  3837
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3838
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3839
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3840
		0, // Peripheral A
peter
parents:
diff changeset
  3841
		((unsigned int) AT91C_PB13_SPI0_NPCS1) |
peter
parents:
diff changeset
  3842
		((unsigned int) AT91C_PB14_SPI0_NPCS2) |
peter
parents:
diff changeset
  3843
		((unsigned int) AT91C_PB17_SPI0_NPCS3)); // Peripheral B
peter
parents:
diff changeset
  3844
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3845
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3846
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3847
		((unsigned int) AT91C_PA16_SPI0_MISO) |
peter
parents:
diff changeset
  3848
		((unsigned int) AT91C_PA13_SPI0_NPCS1) |
peter
parents:
diff changeset
  3849
		((unsigned int) AT91C_PA14_SPI0_NPCS2) |
peter
parents:
diff changeset
  3850
		((unsigned int) AT91C_PA12_SPI0_NPCS0) |
peter
parents:
diff changeset
  3851
		((unsigned int) AT91C_PA17_SPI0_MOSI) |
peter
parents:
diff changeset
  3852
		((unsigned int) AT91C_PA15_SPI0_NPCS3) |
peter
parents:
diff changeset
  3853
		((unsigned int) AT91C_PA18_SPI0_SPCK), // Peripheral A
peter
parents:
diff changeset
  3854
		((unsigned int) AT91C_PA7_SPI0_NPCS1) |
peter
parents:
diff changeset
  3855
		((unsigned int) AT91C_PA8_SPI0_NPCS2) |
peter
parents:
diff changeset
  3856
		((unsigned int) AT91C_PA9_SPI0_NPCS3)); // Peripheral B
peter
parents:
diff changeset
  3857
}
peter
parents:
diff changeset
  3858
peter
parents:
diff changeset
  3859
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3860
//* \fn    AT91F_PITC_CfgPMC
peter
parents:
diff changeset
  3861
//* \brief Enable Peripheral clock in PMC for  PITC
peter
parents:
diff changeset
  3862
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3863
__inline void AT91F_PITC_CfgPMC (void)
peter
parents:
diff changeset
  3864
{
peter
parents:
diff changeset
  3865
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3866
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3867
		((unsigned int) 1 << AT91C_ID_SYS));
peter
parents:
diff changeset
  3868
}
peter
parents:
diff changeset
  3869
peter
parents:
diff changeset
  3870
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3871
//* \fn    AT91F_AIC_CfgPMC
peter
parents:
diff changeset
  3872
//* \brief Enable Peripheral clock in PMC for  AIC
peter
parents:
diff changeset
  3873
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3874
__inline void AT91F_AIC_CfgPMC (void)
peter
parents:
diff changeset
  3875
{
peter
parents:
diff changeset
  3876
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3877
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3878
		((unsigned int) 1 << AT91C_ID_FIQ) |
peter
parents:
diff changeset
  3879
		((unsigned int) 1 << AT91C_ID_IRQ0) |
peter
parents:
diff changeset
  3880
		((unsigned int) 1 << AT91C_ID_IRQ1));
peter
parents:
diff changeset
  3881
}
peter
parents:
diff changeset
  3882
peter
parents:
diff changeset
  3883
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3884
//* \fn    AT91F_AIC_CfgPIO
peter
parents:
diff changeset
  3885
//* \brief Configure PIO controllers to drive AIC signals
peter
parents:
diff changeset
  3886
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3887
__inline void AT91F_AIC_CfgPIO (void)
peter
parents:
diff changeset
  3888
{
peter
parents:
diff changeset
  3889
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3890
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3891
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3892
		((unsigned int) AT91C_PA30_IRQ0    ) |
peter
parents:
diff changeset
  3893
		((unsigned int) AT91C_PA29_FIQ     ), // Peripheral A
peter
parents:
diff changeset
  3894
		((unsigned int) AT91C_PA14_IRQ1    )); // Peripheral B
peter
parents:
diff changeset
  3895
}
peter
parents:
diff changeset
  3896
peter
parents:
diff changeset
  3897
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3898
//* \fn    AT91F_TWI_CfgPMC
peter
parents:
diff changeset
  3899
//* \brief Enable Peripheral clock in PMC for  TWI
peter
parents:
diff changeset
  3900
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3901
__inline void AT91F_TWI_CfgPMC (void)
peter
parents:
diff changeset
  3902
{
peter
parents:
diff changeset
  3903
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3904
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3905
		((unsigned int) 1 << AT91C_ID_TWI));
peter
parents:
diff changeset
  3906
}
peter
parents:
diff changeset
  3907
peter
parents:
diff changeset
  3908
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3909
//* \fn    AT91F_TWI_CfgPIO
peter
parents:
diff changeset
  3910
//* \brief Configure PIO controllers to drive TWI signals
peter
parents:
diff changeset
  3911
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3912
__inline void AT91F_TWI_CfgPIO (void)
peter
parents:
diff changeset
  3913
{
peter
parents:
diff changeset
  3914
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3915
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3916
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  3917
		((unsigned int) AT91C_PA11_TWCK    ) |
peter
parents:
diff changeset
  3918
		((unsigned int) AT91C_PA10_TWD     ), // Peripheral A
peter
parents:
diff changeset
  3919
		0); // Peripheral B
peter
parents:
diff changeset
  3920
}
peter
parents:
diff changeset
  3921
peter
parents:
diff changeset
  3922
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3923
//* \fn    AT91F_ADC_CfgPMC
peter
parents:
diff changeset
  3924
//* \brief Enable Peripheral clock in PMC for  ADC
peter
parents:
diff changeset
  3925
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3926
__inline void AT91F_ADC_CfgPMC (void)
peter
parents:
diff changeset
  3927
{
peter
parents:
diff changeset
  3928
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  3929
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  3930
		((unsigned int) 1 << AT91C_ID_ADC));
peter
parents:
diff changeset
  3931
}
peter
parents:
diff changeset
  3932
peter
parents:
diff changeset
  3933
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3934
//* \fn    AT91F_ADC_CfgPIO
peter
parents:
diff changeset
  3935
//* \brief Configure PIO controllers to drive ADC signals
peter
parents:
diff changeset
  3936
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3937
__inline void AT91F_ADC_CfgPIO (void)
peter
parents:
diff changeset
  3938
{
peter
parents:
diff changeset
  3939
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3940
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3941
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3942
		0, // Peripheral A
peter
parents:
diff changeset
  3943
		((unsigned int) AT91C_PB18_ADTRG   )); // Peripheral B
peter
parents:
diff changeset
  3944
}
peter
parents:
diff changeset
  3945
peter
parents:
diff changeset
  3946
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3947
//* \fn    AT91F_PWMC_CH3_CfgPIO
peter
parents:
diff changeset
  3948
//* \brief Configure PIO controllers to drive PWMC_CH3 signals
peter
parents:
diff changeset
  3949
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3950
__inline void AT91F_PWMC_CH3_CfgPIO (void)
peter
parents:
diff changeset
  3951
{
peter
parents:
diff changeset
  3952
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3953
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3954
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3955
		((unsigned int) AT91C_PB22_PWM3    ), // Peripheral A
peter
parents:
diff changeset
  3956
		((unsigned int) AT91C_PB30_PWM3    )); // Peripheral B
peter
parents:
diff changeset
  3957
}
peter
parents:
diff changeset
  3958
peter
parents:
diff changeset
  3959
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3960
//* \fn    AT91F_PWMC_CH2_CfgPIO
peter
parents:
diff changeset
  3961
//* \brief Configure PIO controllers to drive PWMC_CH2 signals
peter
parents:
diff changeset
  3962
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3963
__inline void AT91F_PWMC_CH2_CfgPIO (void)
peter
parents:
diff changeset
  3964
{
peter
parents:
diff changeset
  3965
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3966
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3967
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3968
		((unsigned int) AT91C_PB21_PWM2    ), // Peripheral A
peter
parents:
diff changeset
  3969
		((unsigned int) AT91C_PB29_PWM2    )); // Peripheral B
peter
parents:
diff changeset
  3970
}
peter
parents:
diff changeset
  3971
peter
parents:
diff changeset
  3972
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3973
//* \fn    AT91F_PWMC_CH1_CfgPIO
peter
parents:
diff changeset
  3974
//* \brief Configure PIO controllers to drive PWMC_CH1 signals
peter
parents:
diff changeset
  3975
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3976
__inline void AT91F_PWMC_CH1_CfgPIO (void)
peter
parents:
diff changeset
  3977
{
peter
parents:
diff changeset
  3978
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3979
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3980
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3981
		((unsigned int) AT91C_PB20_PWM1    ), // Peripheral A
peter
parents:
diff changeset
  3982
		((unsigned int) AT91C_PB28_PWM1    )); // Peripheral B
peter
parents:
diff changeset
  3983
}
peter
parents:
diff changeset
  3984
peter
parents:
diff changeset
  3985
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3986
//* \fn    AT91F_PWMC_CH0_CfgPIO
peter
parents:
diff changeset
  3987
//* \brief Configure PIO controllers to drive PWMC_CH0 signals
peter
parents:
diff changeset
  3988
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3989
__inline void AT91F_PWMC_CH0_CfgPIO (void)
peter
parents:
diff changeset
  3990
{
peter
parents:
diff changeset
  3991
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  3992
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  3993
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  3994
		((unsigned int) AT91C_PB19_PWM0    ), // Peripheral A
peter
parents:
diff changeset
  3995
		((unsigned int) AT91C_PB27_PWM0    )); // Peripheral B
peter
parents:
diff changeset
  3996
}
peter
parents:
diff changeset
  3997
peter
parents:
diff changeset
  3998
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  3999
//* \fn    AT91F_RTTC_CfgPMC
peter
parents:
diff changeset
  4000
//* \brief Enable Peripheral clock in PMC for  RTTC
peter
parents:
diff changeset
  4001
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4002
__inline void AT91F_RTTC_CfgPMC (void)
peter
parents:
diff changeset
  4003
{
peter
parents:
diff changeset
  4004
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4005
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4006
		((unsigned int) 1 << AT91C_ID_SYS));
peter
parents:
diff changeset
  4007
}
peter
parents:
diff changeset
  4008
peter
parents:
diff changeset
  4009
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4010
//* \fn    AT91F_UDP_CfgPMC
peter
parents:
diff changeset
  4011
//* \brief Enable Peripheral clock in PMC for  UDP
peter
parents:
diff changeset
  4012
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4013
__inline void AT91F_UDP_CfgPMC (void)
peter
parents:
diff changeset
  4014
{
peter
parents:
diff changeset
  4015
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4016
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4017
		((unsigned int) 1 << AT91C_ID_UDP));
peter
parents:
diff changeset
  4018
}
peter
parents:
diff changeset
  4019
peter
parents:
diff changeset
  4020
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4021
//* \fn    AT91F_EMAC_CfgPMC
peter
parents:
diff changeset
  4022
//* \brief Enable Peripheral clock in PMC for  EMAC
peter
parents:
diff changeset
  4023
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4024
__inline void AT91F_EMAC_CfgPMC (void)
peter
parents:
diff changeset
  4025
{
peter
parents:
diff changeset
  4026
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4027
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4028
		((unsigned int) 1 << AT91C_ID_EMAC));
peter
parents:
diff changeset
  4029
}
peter
parents:
diff changeset
  4030
peter
parents:
diff changeset
  4031
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4032
//* \fn    AT91F_EMAC_CfgPIO
peter
parents:
diff changeset
  4033
//* \brief Configure PIO controllers to drive EMAC signals
peter
parents:
diff changeset
  4034
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4035
__inline void AT91F_EMAC_CfgPIO (void)
peter
parents:
diff changeset
  4036
{
peter
parents:
diff changeset
  4037
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  4038
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  4039
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  4040
		((unsigned int) AT91C_PB2_ETX0    ) |
peter
parents:
diff changeset
  4041
		((unsigned int) AT91C_PB12_ETXER   ) |
peter
parents:
diff changeset
  4042
		((unsigned int) AT91C_PB16_ECOL    ) |
peter
parents:
diff changeset
  4043
		((unsigned int) AT91C_PB15_ERXDV_ECRSDV) |
peter
parents:
diff changeset
  4044
		((unsigned int) AT91C_PB11_ETX3    ) |
peter
parents:
diff changeset
  4045
		((unsigned int) AT91C_PB6_ERX1    ) |
peter
parents:
diff changeset
  4046
		((unsigned int) AT91C_PB13_ERX2    ) |
peter
parents:
diff changeset
  4047
		((unsigned int) AT91C_PB3_ETX1    ) |
peter
parents:
diff changeset
  4048
		((unsigned int) AT91C_PB4_ECRS    ) |
peter
parents:
diff changeset
  4049
		((unsigned int) AT91C_PB8_EMDC    ) |
peter
parents:
diff changeset
  4050
		((unsigned int) AT91C_PB5_ERX0    ) |
peter
parents:
diff changeset
  4051
		((unsigned int) AT91C_PB18_EF100   ) |
peter
parents:
diff changeset
  4052
		((unsigned int) AT91C_PB14_ERX3    ) |
peter
parents:
diff changeset
  4053
		((unsigned int) AT91C_PB1_ETXEN   ) |
peter
parents:
diff changeset
  4054
		((unsigned int) AT91C_PB10_ETX2    ) |
peter
parents:
diff changeset
  4055
		((unsigned int) AT91C_PB0_ETXCK_EREFCK) |
peter
parents:
diff changeset
  4056
		((unsigned int) AT91C_PB9_EMDIO   ) |
peter
parents:
diff changeset
  4057
		((unsigned int) AT91C_PB7_ERXER   ) |
peter
parents:
diff changeset
  4058
		((unsigned int) AT91C_PB17_ERXCK   ), // Peripheral A
peter
parents:
diff changeset
  4059
		0); // Peripheral B
peter
parents:
diff changeset
  4060
}
peter
parents:
diff changeset
  4061
peter
parents:
diff changeset
  4062
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4063
//* \fn    AT91F_TC0_CfgPMC
peter
parents:
diff changeset
  4064
//* \brief Enable Peripheral clock in PMC for  TC0
peter
parents:
diff changeset
  4065
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4066
__inline void AT91F_TC0_CfgPMC (void)
peter
parents:
diff changeset
  4067
{
peter
parents:
diff changeset
  4068
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4069
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4070
		((unsigned int) 1 << AT91C_ID_TC0));
peter
parents:
diff changeset
  4071
}
peter
parents:
diff changeset
  4072
peter
parents:
diff changeset
  4073
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4074
//* \fn    AT91F_TC0_CfgPIO
peter
parents:
diff changeset
  4075
//* \brief Configure PIO controllers to drive TC0 signals
peter
parents:
diff changeset
  4076
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4077
__inline void AT91F_TC0_CfgPIO (void)
peter
parents:
diff changeset
  4078
{
peter
parents:
diff changeset
  4079
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  4080
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  4081
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  4082
		((unsigned int) AT91C_PB23_TIOA0   ) |
peter
parents:
diff changeset
  4083
		((unsigned int) AT91C_PB24_TIOB0   ), // Peripheral A
peter
parents:
diff changeset
  4084
		((unsigned int) AT91C_PB12_TCLK0   )); // Peripheral B
peter
parents:
diff changeset
  4085
}
peter
parents:
diff changeset
  4086
peter
parents:
diff changeset
  4087
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4088
//* \fn    AT91F_TC1_CfgPMC
peter
parents:
diff changeset
  4089
//* \brief Enable Peripheral clock in PMC for  TC1
peter
parents:
diff changeset
  4090
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4091
__inline void AT91F_TC1_CfgPMC (void)
peter
parents:
diff changeset
  4092
{
peter
parents:
diff changeset
  4093
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4094
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4095
		((unsigned int) 1 << AT91C_ID_TC1));
peter
parents:
diff changeset
  4096
}
peter
parents:
diff changeset
  4097
peter
parents:
diff changeset
  4098
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4099
//* \fn    AT91F_TC1_CfgPIO
peter
parents:
diff changeset
  4100
//* \brief Configure PIO controllers to drive TC1 signals
peter
parents:
diff changeset
  4101
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4102
__inline void AT91F_TC1_CfgPIO (void)
peter
parents:
diff changeset
  4103
{
peter
parents:
diff changeset
  4104
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  4105
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  4106
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  4107
		((unsigned int) AT91C_PB25_TIOA1   ) |
peter
parents:
diff changeset
  4108
		((unsigned int) AT91C_PB26_TIOB1   ), // Peripheral A
peter
parents:
diff changeset
  4109
		((unsigned int) AT91C_PB19_TCLK1   )); // Peripheral B
peter
parents:
diff changeset
  4110
}
peter
parents:
diff changeset
  4111
peter
parents:
diff changeset
  4112
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4113
//* \fn    AT91F_TC2_CfgPMC
peter
parents:
diff changeset
  4114
//* \brief Enable Peripheral clock in PMC for  TC2
peter
parents:
diff changeset
  4115
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4116
__inline void AT91F_TC2_CfgPMC (void)
peter
parents:
diff changeset
  4117
{
peter
parents:
diff changeset
  4118
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4119
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4120
		((unsigned int) 1 << AT91C_ID_TC2));
peter
parents:
diff changeset
  4121
}
peter
parents:
diff changeset
  4122
peter
parents:
diff changeset
  4123
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4124
//* \fn    AT91F_TC2_CfgPIO
peter
parents:
diff changeset
  4125
//* \brief Configure PIO controllers to drive TC2 signals
peter
parents:
diff changeset
  4126
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4127
__inline void AT91F_TC2_CfgPIO (void)
peter
parents:
diff changeset
  4128
{
peter
parents:
diff changeset
  4129
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  4130
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  4131
		AT91C_BASE_PIOB, // PIO controller base address
peter
parents:
diff changeset
  4132
		((unsigned int) AT91C_PB28_TIOB2   ) |
peter
parents:
diff changeset
  4133
		((unsigned int) AT91C_PB27_TIOA2   ), // Peripheral A
peter
parents:
diff changeset
  4134
		0); // Peripheral B
peter
parents:
diff changeset
  4135
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  4136
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  4137
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  4138
		0, // Peripheral A
peter
parents:
diff changeset
  4139
		((unsigned int) AT91C_PA15_TCLK2   )); // Peripheral B
peter
parents:
diff changeset
  4140
}
peter
parents:
diff changeset
  4141
peter
parents:
diff changeset
  4142
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4143
//* \fn    AT91F_MC_CfgPMC
peter
parents:
diff changeset
  4144
//* \brief Enable Peripheral clock in PMC for  MC
peter
parents:
diff changeset
  4145
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4146
__inline void AT91F_MC_CfgPMC (void)
peter
parents:
diff changeset
  4147
{
peter
parents:
diff changeset
  4148
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4149
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4150
		((unsigned int) 1 << AT91C_ID_SYS));
peter
parents:
diff changeset
  4151
}
peter
parents:
diff changeset
  4152
peter
parents:
diff changeset
  4153
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4154
//* \fn    AT91F_PIOA_CfgPMC
peter
parents:
diff changeset
  4155
//* \brief Enable Peripheral clock in PMC for  PIOA
peter
parents:
diff changeset
  4156
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4157
__inline void AT91F_PIOA_CfgPMC (void)
peter
parents:
diff changeset
  4158
{
peter
parents:
diff changeset
  4159
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4160
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4161
		((unsigned int) 1 << AT91C_ID_PIOA));
peter
parents:
diff changeset
  4162
}
peter
parents:
diff changeset
  4163
peter
parents:
diff changeset
  4164
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4165
//* \fn    AT91F_PIOB_CfgPMC
peter
parents:
diff changeset
  4166
//* \brief Enable Peripheral clock in PMC for  PIOB
peter
parents:
diff changeset
  4167
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4168
__inline void AT91F_PIOB_CfgPMC (void)
peter
parents:
diff changeset
  4169
{
peter
parents:
diff changeset
  4170
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4171
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4172
		((unsigned int) 1 << AT91C_ID_PIOB));
peter
parents:
diff changeset
  4173
}
peter
parents:
diff changeset
  4174
peter
parents:
diff changeset
  4175
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4176
//* \fn    AT91F_CAN_CfgPMC
peter
parents:
diff changeset
  4177
//* \brief Enable Peripheral clock in PMC for  CAN
peter
parents:
diff changeset
  4178
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4179
__inline void AT91F_CAN_CfgPMC (void)
peter
parents:
diff changeset
  4180
{
peter
parents:
diff changeset
  4181
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4182
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4183
		((unsigned int) 1 << AT91C_ID_CAN));
peter
parents:
diff changeset
  4184
}
peter
parents:
diff changeset
  4185
peter
parents:
diff changeset
  4186
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4187
//* \fn    AT91F_CAN_CfgPIO
peter
parents:
diff changeset
  4188
//* \brief Configure PIO controllers to drive CAN signals
peter
parents:
diff changeset
  4189
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4190
__inline void AT91F_CAN_CfgPIO (void)
peter
parents:
diff changeset
  4191
{
peter
parents:
diff changeset
  4192
	// Configure PIO controllers to periph mode
peter
parents:
diff changeset
  4193
	AT91F_PIO_CfgPeriph(
peter
parents:
diff changeset
  4194
		AT91C_BASE_PIOA, // PIO controller base address
peter
parents:
diff changeset
  4195
		((unsigned int) AT91C_PA20_CANTX   ) |
peter
parents:
diff changeset
  4196
		((unsigned int) AT91C_PA19_CANRX   ), // Peripheral A
peter
parents:
diff changeset
  4197
		0); // Peripheral B
peter
parents:
diff changeset
  4198
}
peter
parents:
diff changeset
  4199
peter
parents:
diff changeset
  4200
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4201
//* \fn    AT91F_PWMC_CfgPMC
peter
parents:
diff changeset
  4202
//* \brief Enable Peripheral clock in PMC for  PWMC
peter
parents:
diff changeset
  4203
//*----------------------------------------------------------------------------
peter
parents:
diff changeset
  4204
__inline void AT91F_PWMC_CfgPMC (void)
peter
parents:
diff changeset
  4205
{
peter
parents:
diff changeset
  4206
	AT91F_PMC_EnablePeriphClock(
peter
parents:
diff changeset
  4207
		AT91C_BASE_PMC, // PIO controller base address
peter
parents:
diff changeset
  4208
		((unsigned int) 1 << AT91C_ID_PWMC));
peter
parents:
diff changeset
  4209
}
peter
parents:
diff changeset
  4210
peter
parents:
diff changeset
  4211
#endif // lib_AT91SAM7X256_H