strip the kernel version suffix from target directories, except for brcm-2.4 (the...
[15.05/openwrt.git] / target / linux / at91 / image / dfboot / src / include / lib_AT91RM9200.h
1 //*----------------------------------------------------------------------------
2 //*         ATMEL Microcontroller Software Support  -  ROUSSET  -
3 //*----------------------------------------------------------------------------
4 //* The software is delivered "AS IS" without warranty or condition of any
5 //* kind, either express, implied or statutory. This includes without
6 //* limitation any warranty or condition with respect to merchantability or
7 //* fitness for any particular purpose, or against the infringements of
8 //* intellectual property rights of others.
9 //*----------------------------------------------------------------------------
10 //* File Name           : lib_AT91RM9200.h
11 //* Object              : AT91RM9200 inlined functions
12 //* Generated           : AT91 SW Application Group  11/19/2003 (17:20:51)
13 //*
14 //* CVS Reference       : /lib_pdc.h/1.2/Tue Jul 02 12:29:40 2002//
15 //* CVS Reference       : /lib_dbgu.h/1.1/Fri Jan 31 12:18:40 2003//
16 //* CVS Reference       : /lib_rtc_1245d.h/1.1/Fri Jan 31 12:19:12 2003//
17 //* CVS Reference       : /lib_ssc.h/1.4/Fri Jan 31 12:19:20 2003//
18 //* CVS Reference       : /lib_spi_AT91RMxxxx.h/1.2/Fri Jan 31 12:19:31 2003//
19 //* CVS Reference       : /lib_tc_1753b.h/1.1/Fri Jan 31 12:20:02 2003//
20 //* CVS Reference       : /lib_pmc.h/1.3/Thu Nov 14 07:40:45 2002//
21 //* CVS Reference       : /lib_pio.h/1.3/Fri Jan 31 12:18:56 2003//
22 //* CVS Reference       : /lib_twi.h/1.2/Fri Jan 31 12:19:38 2003//
23 //* CVS Reference       : /lib_usart.h/1.5/Thu Nov 21 16:01:53 2002//
24 //* CVS Reference       : /lib_mci.h/1.2/Wed Nov 20 14:18:55 2002//
25 //* CVS Reference       : /lib_aic.h/1.3/Fri Jul 12 07:46:11 2002//
26 //* CVS Reference       : /lib_udp.h/1.3/Fri Jan 31 12:19:48 2003//
27 //* CVS Reference       : /lib_st.h/1.4/Fri Jan 31 12:20:13 2003//
28 //*----------------------------------------------------------------------------
29
30 #ifndef lib_AT91RM9200_H
31 #define lib_AT91RM9200_H
32
33 /* *****************************************************************************
34                 SOFTWARE API FOR PDC
35    ***************************************************************************** */
36 //*----------------------------------------------------------------------------
37 //* \fn    AT91F_PDC_SetNextRx
38 //* \brief Set the next receive transfer descriptor
39 //*----------------------------------------------------------------------------
40 static inline void AT91F_PDC_SetNextRx (
41         AT91PS_PDC pPDC,     // \arg pointer to a PDC controller
42         char *address,       // \arg address to the next bloc to be received
43         unsigned int bytes)  // \arg number of bytes to be received
44 {
45         pPDC->PDC_RNPR = (unsigned int) address;
46         pPDC->PDC_RNCR = bytes;
47 }
48
49 //*----------------------------------------------------------------------------
50 //* \fn    AT91F_PDC_SetNextTx
51 //* \brief Set the next transmit transfer descriptor
52 //*----------------------------------------------------------------------------
53 static inline void AT91F_PDC_SetNextTx (
54         AT91PS_PDC pPDC,       // \arg pointer to a PDC controller
55         char *address,         // \arg address to the next bloc to be transmitted
56         unsigned int bytes)    // \arg number of bytes to be transmitted
57 {
58         pPDC->PDC_TNPR = (unsigned int) address;
59         pPDC->PDC_TNCR = bytes;
60 }
61
62 //*----------------------------------------------------------------------------
63 //* \fn    AT91F_PDC_SetRx
64 //* \brief Set the receive transfer descriptor
65 //*----------------------------------------------------------------------------
66 static inline void AT91F_PDC_SetRx (
67         AT91PS_PDC pPDC,       // \arg pointer to a PDC controller
68         char *address,         // \arg address to the next bloc to be received
69         unsigned int bytes)    // \arg number of bytes to be received
70 {
71         pPDC->PDC_RPR = (unsigned int) address;
72         pPDC->PDC_RCR = bytes;
73 }
74
75 //*----------------------------------------------------------------------------
76 //* \fn    AT91F_PDC_SetTx
77 //* \brief Set the transmit transfer descriptor
78 //*----------------------------------------------------------------------------
79 static inline void AT91F_PDC_SetTx (
80         AT91PS_PDC pPDC,       // \arg pointer to a PDC controller
81         char *address,         // \arg address to the next bloc to be transmitted
82         unsigned int bytes)    // \arg number of bytes to be transmitted
83 {
84         pPDC->PDC_TPR = (unsigned int) address;
85         pPDC->PDC_TCR = bytes;
86 }
87
88 //*----------------------------------------------------------------------------
89 //* \fn    AT91F_PDC_EnableTx
90 //* \brief Enable transmit
91 //*----------------------------------------------------------------------------
92 static inline void AT91F_PDC_EnableTx (
93         AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
94 {
95         pPDC->PDC_PTCR = AT91C_PDC_TXTEN;
96 }
97
98 //*----------------------------------------------------------------------------
99 //* \fn    AT91F_PDC_EnableRx
100 //* \brief Enable receive
101 //*----------------------------------------------------------------------------
102 static inline void AT91F_PDC_EnableRx (
103         AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
104 {
105         pPDC->PDC_PTCR = AT91C_PDC_RXTEN;
106 }
107
108 //*----------------------------------------------------------------------------
109 //* \fn    AT91F_PDC_DisableTx
110 //* \brief Disable transmit
111 //*----------------------------------------------------------------------------
112 static inline void AT91F_PDC_DisableTx (
113         AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
114 {
115         pPDC->PDC_PTCR = AT91C_PDC_TXTDIS;
116 }
117
118 //*----------------------------------------------------------------------------
119 //* \fn    AT91F_PDC_DisableRx
120 //* \brief Disable receive
121 //*----------------------------------------------------------------------------
122 static inline void AT91F_PDC_DisableRx (
123         AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
124 {
125         pPDC->PDC_PTCR = AT91C_PDC_RXTDIS;
126 }
127
128 //*----------------------------------------------------------------------------
129 //* \fn    AT91F_PDC_IsTxEmpty
130 //* \brief Test if the current transfer descriptor has been sent
131 //*----------------------------------------------------------------------------
132 static inline int AT91F_PDC_IsTxEmpty ( // \return return 1 if transfer is complete
133         AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
134 {
135         return !(pPDC->PDC_TCR);
136 }
137
138 //*----------------------------------------------------------------------------
139 //* \fn    AT91F_PDC_IsNextTxEmpty
140 //* \brief Test if the next transfer descriptor has been moved to the current td
141 //*----------------------------------------------------------------------------
142 static inline int AT91F_PDC_IsNextTxEmpty ( // \return return 1 if transfer is complete
143         AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
144 {
145         return !(pPDC->PDC_TNCR);
146 }
147
148 //*----------------------------------------------------------------------------
149 //* \fn    AT91F_PDC_IsRxEmpty
150 //* \brief Test if the current transfer descriptor has been filled
151 //*----------------------------------------------------------------------------
152 static inline int AT91F_PDC_IsRxEmpty ( // \return return 1 if transfer is complete
153         AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
154 {
155         return !(pPDC->PDC_RCR);
156 }
157
158 //*----------------------------------------------------------------------------
159 //* \fn    AT91F_PDC_IsNextRxEmpty
160 //* \brief Test if the next transfer descriptor has been moved to the current td
161 //*----------------------------------------------------------------------------
162 static inline int AT91F_PDC_IsNextRxEmpty ( // \return return 1 if transfer is complete
163         AT91PS_PDC pPDC )       // \arg pointer to a PDC controller
164 {
165         return !(pPDC->PDC_RNCR);
166 }
167
168 //*----------------------------------------------------------------------------
169 //* \fn    AT91F_PDC_Open
170 //* \brief Open PDC: disable TX and RX reset transfer descriptors, re-enable RX and TX
171 //*----------------------------------------------------------------------------
172 static inline void AT91F_PDC_Open (
173         AT91PS_PDC pPDC)       // \arg pointer to a PDC controller
174 {
175     //* Disable the RX and TX PDC transfer requests
176         AT91F_PDC_DisableRx(pPDC);
177         AT91F_PDC_DisableTx(pPDC);
178
179         //* Reset all Counter register Next buffer first
180         AT91F_PDC_SetNextTx(pPDC, (char *) 0, 0);
181         AT91F_PDC_SetNextRx(pPDC, (char *) 0, 0);
182         AT91F_PDC_SetTx(pPDC, (char *) 0, 0);
183         AT91F_PDC_SetRx(pPDC, (char *) 0, 0);
184
185     //* Enable the RX and TX PDC transfer requests
186         AT91F_PDC_EnableRx(pPDC);
187         AT91F_PDC_EnableTx(pPDC);
188 }
189
190 //*----------------------------------------------------------------------------
191 //* \fn    AT91F_PDC_Close
192 //* \brief Close PDC: disable TX and RX reset transfer descriptors
193 //*----------------------------------------------------------------------------
194 static inline void AT91F_PDC_Close (
195         AT91PS_PDC pPDC)       // \arg pointer to a PDC controller
196 {
197     //* Disable the RX and TX PDC transfer requests
198         AT91F_PDC_DisableRx(pPDC);
199         AT91F_PDC_DisableTx(pPDC);
200
201         //* Reset all Counter register Next buffer first
202         AT91F_PDC_SetNextTx(pPDC, (char *) 0, 0);
203         AT91F_PDC_SetNextRx(pPDC, (char *) 0, 0);
204         AT91F_PDC_SetTx(pPDC, (char *) 0, 0);
205         AT91F_PDC_SetRx(pPDC, (char *) 0, 0);
206
207 }
208
209 //*----------------------------------------------------------------------------
210 //* \fn    AT91F_PDC_SendFrame
211 //* \brief Close PDC: disable TX and RX reset transfer descriptors
212 //*----------------------------------------------------------------------------
213 static inline unsigned int AT91F_PDC_SendFrame(
214         AT91PS_PDC pPDC,
215         char *pBuffer,
216         unsigned int szBuffer,
217         char *pNextBuffer,
218         unsigned int szNextBuffer )
219 {
220         if (AT91F_PDC_IsTxEmpty(pPDC)) {
221                 //* Buffer and next buffer can be initialized
222                 AT91F_PDC_SetTx(pPDC, pBuffer, szBuffer);
223                 AT91F_PDC_SetNextTx(pPDC, pNextBuffer, szNextBuffer);
224                 return 2;
225         }
226         else if (AT91F_PDC_IsNextTxEmpty(pPDC)) {
227                 //* Only one buffer can be initialized
228                 AT91F_PDC_SetNextTx(pPDC, pBuffer, szBuffer);
229                 return 1;
230         }
231         else {
232                 //* All buffer are in use...
233                 return 0;
234         }
235 }
236
237 //*----------------------------------------------------------------------------
238 //* \fn    AT91F_PDC_ReceiveFrame
239 //* \brief Close PDC: disable TX and RX reset transfer descriptors
240 //*----------------------------------------------------------------------------
241 static inline unsigned int AT91F_PDC_ReceiveFrame (
242         AT91PS_PDC pPDC,
243         char *pBuffer,
244         unsigned int szBuffer,
245         char *pNextBuffer,
246         unsigned int szNextBuffer )
247 {
248         if (AT91F_PDC_IsRxEmpty(pPDC)) {
249                 //* Buffer and next buffer can be initialized
250                 AT91F_PDC_SetRx(pPDC, pBuffer, szBuffer);
251                 AT91F_PDC_SetNextRx(pPDC, pNextBuffer, szNextBuffer);
252                 return 2;
253         }
254         else if (AT91F_PDC_IsNextRxEmpty(pPDC)) {
255                 //* Only one buffer can be initialized
256                 AT91F_PDC_SetNextRx(pPDC, pBuffer, szBuffer);
257                 return 1;
258         }
259         else {
260                 //* All buffer are in use...
261                 return 0;
262         }
263 }
264 /* *****************************************************************************
265                 SOFTWARE API FOR DBGU
266    ***************************************************************************** */
267 //*----------------------------------------------------------------------------
268 //* \fn    AT91F_DBGU_InterruptEnable
269 //* \brief Enable DBGU Interrupt
270 //*----------------------------------------------------------------------------
271 static inline void AT91F_DBGU_InterruptEnable(
272         AT91PS_DBGU pDbgu,   // \arg  pointer to a DBGU controller
273         unsigned int flag) // \arg  dbgu interrupt to be enabled
274 {
275         pDbgu->DBGU_IER = flag;
276 }
277
278 //*----------------------------------------------------------------------------
279 //* \fn    AT91F_DBGU_InterruptDisable
280 //* \brief Disable DBGU Interrupt
281 //*----------------------------------------------------------------------------
282 static inline void AT91F_DBGU_InterruptDisable(
283         AT91PS_DBGU pDbgu,   // \arg  pointer to a DBGU controller
284         unsigned int flag) // \arg  dbgu interrupt to be disabled
285 {
286         pDbgu->DBGU_IDR = flag;
287 }
288
289 //*----------------------------------------------------------------------------
290 //* \fn    AT91F_DBGU_GetInterruptMaskStatus
291 //* \brief Return DBGU Interrupt Mask Status
292 //*----------------------------------------------------------------------------
293 static inline unsigned int AT91F_DBGU_GetInterruptMaskStatus( // \return DBGU Interrupt Mask Status
294         AT91PS_DBGU pDbgu) // \arg  pointer to a DBGU controller
295 {
296         return pDbgu->DBGU_IMR;
297 }
298
299 //*----------------------------------------------------------------------------
300 //* \fn    AT91F_DBGU_IsInterruptMasked
301 //* \brief Test if DBGU Interrupt is Masked 
302 //*----------------------------------------------------------------------------
303 static inline int AT91F_DBGU_IsInterruptMasked(
304         AT91PS_DBGU pDbgu,   // \arg  pointer to a DBGU controller
305         unsigned int flag) // \arg  flag to be tested
306 {
307         return (AT91F_DBGU_GetInterruptMaskStatus(pDbgu) & flag);
308 }
309
310 /* *****************************************************************************
311                 SOFTWARE API FOR RTC
312    ***************************************************************************** */
313 //*----------------------------------------------------------------------------
314 //* \fn    AT91F_RTC_InterruptEnable
315 //* \brief Enable RTC Interrupt
316 //*----------------------------------------------------------------------------
317 static inline void AT91F_RTC_InterruptEnable(
318         AT91PS_RTC pRtc,   // \arg  pointer to a RTC controller
319         unsigned int flag) // \arg  RTC interrupt to be enabled
320 {
321         pRtc->RTC_IER = flag;
322 }
323
324 //*----------------------------------------------------------------------------
325 //* \fn    AT91F_RTC_InterruptDisable
326 //* \brief Disable RTC Interrupt
327 //*----------------------------------------------------------------------------
328 static inline void AT91F_RTC_InterruptDisable(
329         AT91PS_RTC pRtc,   // \arg  pointer to a RTC controller
330         unsigned int flag) // \arg  RTC interrupt to be disabled
331 {
332         pRtc->RTC_IDR = flag;
333 }
334
335 //*----------------------------------------------------------------------------
336 //* \fn    AT91F_RTC_GetInterruptMaskStatus
337 //* \brief Return RTC Interrupt Mask Status
338 //*----------------------------------------------------------------------------
339 static inline unsigned int AT91F_RTC_GetInterruptMaskStatus( // \return RTC Interrupt Mask Status
340         AT91PS_RTC pRtc) // \arg  pointer to a RTC controller
341 {
342         return pRtc->RTC_IMR;
343 }
344
345 //*----------------------------------------------------------------------------
346 //* \fn    AT91F_RTC_IsInterruptMasked
347 //* \brief Test if RTC Interrupt is Masked 
348 //*----------------------------------------------------------------------------
349 static inline int AT91F_RTC_IsInterruptMasked(
350         AT91PS_RTC pRtc,   // \arg  pointer to a RTC controller
351         unsigned int flag) // \arg  flag to be tested
352 {
353         return (AT91F_RTC_GetInterruptMaskStatus(pRtc) & flag);
354 }
355
356 /* *****************************************************************************
357                 SOFTWARE API FOR SSC
358    ***************************************************************************** */
359 //* Define the standard I2S mode configuration
360
361 //* Configuration to set in the SSC Transmit Clock Mode Register
362 //* Parameters :  nb_bit_by_slot : 8, 16 or 32 bits
363 //*                       nb_slot_by_frame : number of channels
364 #define AT91C_I2S_ASY_MASTER_TX_SETTING(nb_bit_by_slot, nb_slot_by_frame)( +\
365                                                                            AT91C_SSC_CKS_DIV   +\
366                                            AT91C_SSC_CKO_CONTINOUS      +\
367                                            AT91C_SSC_CKG_NONE    +\
368                                        AT91C_SSC_START_FALL_RF +\
369                                                    AT91C_SSC_STTOUT  +\
370                                            ((1<<16) & AT91C_SSC_STTDLY) +\
371                                            ((((nb_bit_by_slot*nb_slot_by_frame)/2)-1) <<24))
372
373
374 //* Configuration to set in the SSC Transmit Frame Mode Register
375 //* Parameters : nb_bit_by_slot : 8, 16 or 32 bits
376 //*                      nb_slot_by_frame : number of channels
377 #define AT91C_I2S_ASY_TX_FRAME_SETTING(nb_bit_by_slot, nb_slot_by_frame)( +\
378                                                                         (nb_bit_by_slot-1)  +\
379                                         AT91C_SSC_MSBF   +\
380                                         (((nb_slot_by_frame-1)<<8) & AT91C_SSC_DATNB)  +\
381                                         (((nb_bit_by_slot-1)<<16) & AT91C_SSC_FSLEN) +\
382                                         AT91C_SSC_FSOS_NEGATIVE)
383
384
385 //*----------------------------------------------------------------------------
386 //* \fn    AT91F_SSC_SetBaudrate
387 //* \brief Set the baudrate according to the CPU clock
388 //*----------------------------------------------------------------------------
389 static inline void AT91F_SSC_SetBaudrate (
390         AT91PS_SSC pSSC,        // \arg pointer to a SSC controller
391         unsigned int mainClock, // \arg peripheral clock
392         unsigned int speed)     // \arg SSC baudrate
393 {
394         unsigned int baud_value;
395         //* Define the baud rate divisor register
396         if (speed == 0)
397            baud_value = 0;
398         else
399         {
400            baud_value = (unsigned int) (mainClock * 10)/(2*speed);
401            if ((baud_value % 10) >= 5)
402                   baud_value = (baud_value / 10) + 1;
403            else
404                   baud_value /= 10;
405         }
406
407         pSSC->SSC_CMR = baud_value;
408 }
409
410 //*----------------------------------------------------------------------------
411 //* \fn    AT91F_SSC_Configure
412 //* \brief Configure SSC
413 //*----------------------------------------------------------------------------
414 static inline void AT91F_SSC_Configure (
415              AT91PS_SSC pSSC,          // \arg pointer to a SSC controller
416              unsigned int syst_clock,  // \arg System Clock Frequency
417              unsigned int baud_rate,   // \arg Expected Baud Rate Frequency
418              unsigned int clock_rx,    // \arg Receiver Clock Parameters
419              unsigned int mode_rx,     // \arg mode Register to be programmed
420              unsigned int clock_tx,    // \arg Transmitter Clock Parameters
421              unsigned int mode_tx)     // \arg mode Register to be programmed
422 {
423     //* Disable interrupts
424         pSSC->SSC_IDR = (unsigned int) -1;
425
426     //* Reset receiver and transmitter
427         pSSC->SSC_CR = AT91C_SSC_SWRST | AT91C_SSC_RXDIS | AT91C_SSC_TXDIS ;
428
429     //* Define the Clock Mode Register
430         AT91F_SSC_SetBaudrate(pSSC, syst_clock, baud_rate);
431
432      //* Write the Receive Clock Mode Register
433         pSSC->SSC_RCMR =  clock_rx;
434
435      //* Write the Transmit Clock Mode Register
436         pSSC->SSC_TCMR =  clock_tx;
437
438      //* Write the Receive Frame Mode Register
439         pSSC->SSC_RFMR =  mode_rx;
440
441      //* Write the Transmit Frame Mode Register
442         pSSC->SSC_TFMR =  mode_tx;
443
444     //* Clear Transmit and Receive Counters
445         AT91F_PDC_Open((AT91PS_PDC) &(pSSC->SSC_RPR));
446
447
448 }
449
450 //*----------------------------------------------------------------------------
451 //* \fn    AT91F_SSC_EnableRx
452 //* \brief Enable receiving datas
453 //*----------------------------------------------------------------------------
454 static inline void AT91F_SSC_EnableRx (
455         AT91PS_SSC pSSC)     // \arg pointer to a SSC controller
456 {
457     //* Enable receiver
458     pSSC->SSC_CR = AT91C_SSC_RXEN;
459 }
460
461 //*----------------------------------------------------------------------------
462 //* \fn    AT91F_SSC_DisableRx
463 //* \brief Disable receiving datas
464 //*----------------------------------------------------------------------------
465 static inline void AT91F_SSC_DisableRx (
466         AT91PS_SSC pSSC)     // \arg pointer to a SSC controller
467 {
468     //* Disable receiver
469     pSSC->SSC_CR = AT91C_SSC_RXDIS;
470 }
471
472 //*----------------------------------------------------------------------------
473 //* \fn    AT91F_SSC_EnableTx
474 //* \brief Enable sending datas
475 //*----------------------------------------------------------------------------
476 static inline void AT91F_SSC_EnableTx (
477         AT91PS_SSC pSSC)     // \arg pointer to a SSC controller
478 {
479     //* Enable  transmitter
480     pSSC->SSC_CR = AT91C_SSC_TXEN;
481 }
482
483 //*----------------------------------------------------------------------------
484 //* \fn    AT91F_SSC_DisableTx
485 //* \brief Disable sending datas
486 //*----------------------------------------------------------------------------
487 static inline void AT91F_SSC_DisableTx (
488         AT91PS_SSC pSSC)     // \arg pointer to a SSC controller
489 {
490     //* Disable  transmitter
491     pSSC->SSC_CR = AT91C_SSC_TXDIS;
492 }
493
494 //*----------------------------------------------------------------------------
495 //* \fn    AT91F_SSC_EnableIt
496 //* \brief Enable SSC IT
497 //*----------------------------------------------------------------------------
498 static inline void AT91F_SSC_EnableIt (
499         AT91PS_SSC pSSC, // \arg pointer to a SSC controller
500         unsigned int flag)   // \arg IT to be enabled
501 {
502         //* Write to the IER register
503         pSSC->SSC_IER = flag;
504 }
505
506 //*----------------------------------------------------------------------------
507 //* \fn    AT91F_SSC_DisableIt
508 //* \brief Disable SSC IT
509 //*----------------------------------------------------------------------------
510 static inline void AT91F_SSC_DisableIt (
511         AT91PS_SSC pSSC, // \arg pointer to a SSC controller
512         unsigned int flag)   // \arg IT to be disabled
513 {
514         //* Write to the IDR register
515         pSSC->SSC_IDR = flag;
516 }
517
518 //*----------------------------------------------------------------------------
519 //* \fn    AT91F_SSC_ReceiveFrame
520 //* \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
521 //*----------------------------------------------------------------------------
522 static inline unsigned int AT91F_SSC_ReceiveFrame (
523         AT91PS_SSC pSSC,
524         char *pBuffer,
525         unsigned int szBuffer,
526         char *pNextBuffer,
527         unsigned int szNextBuffer )
528 {
529         return AT91F_PDC_ReceiveFrame(
530                 (AT91PS_PDC) &(pSSC->SSC_RPR),
531                 pBuffer,
532                 szBuffer,
533                 pNextBuffer,
534                 szNextBuffer);
535 }
536
537 //*----------------------------------------------------------------------------
538 //* \fn    AT91F_SSC_SendFrame
539 //* \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
540 //*----------------------------------------------------------------------------
541 static inline unsigned int AT91F_SSC_SendFrame(
542         AT91PS_SSC pSSC,
543         char *pBuffer,
544         unsigned int szBuffer,
545         char *pNextBuffer,
546         unsigned int szNextBuffer )
547 {
548         return AT91F_PDC_SendFrame(
549                 (AT91PS_PDC) &(pSSC->SSC_RPR),
550                 pBuffer,
551                 szBuffer,
552                 pNextBuffer,
553                 szNextBuffer);
554 }
555
556 //*----------------------------------------------------------------------------
557 //* \fn    AT91F_SSC_GetInterruptMaskStatus
558 //* \brief Return SSC Interrupt Mask Status
559 //*----------------------------------------------------------------------------
560 static inline unsigned int AT91F_SSC_GetInterruptMaskStatus( // \return SSC Interrupt Mask Status
561         AT91PS_SSC pSsc) // \arg  pointer to a SSC controller
562 {
563         return pSsc->SSC_IMR;
564 }
565
566 //*----------------------------------------------------------------------------
567 //* \fn    AT91F_SSC_IsInterruptMasked
568 //* \brief Test if SSC Interrupt is Masked 
569 //*----------------------------------------------------------------------------
570 static inline int AT91F_SSC_IsInterruptMasked(
571         AT91PS_SSC pSsc,   // \arg  pointer to a SSC controller
572         unsigned int flag) // \arg  flag to be tested
573 {
574         return (AT91F_SSC_GetInterruptMaskStatus(pSsc) & flag);
575 }
576
577 /* *****************************************************************************
578                 SOFTWARE API FOR SPI
579    ***************************************************************************** */
580 //*----------------------------------------------------------------------------
581 //* \fn    AT91F_SPI_Open
582 //* \brief Open a SPI Port
583 //*----------------------------------------------------------------------------
584 static inline unsigned int AT91F_SPI_Open (
585         const unsigned int null)  // \arg
586 {
587         /* NOT DEFINED AT THIS MOMENT */
588         return ( 0 );
589 }
590
591 //*----------------------------------------------------------------------------
592 //* \fn    AT91F_SPI_CfgCs
593 //* \brief Configure SPI chip select register
594 //*----------------------------------------------------------------------------
595 static inline void AT91F_SPI_CfgCs (
596         int cs,     // SPI cs number (0 to 3)
597         int val)   //  chip select register
598 {
599         //* Write to the CSR register
600         *(AT91C_SPI_CSR + cs) = val;
601 }
602
603 //*----------------------------------------------------------------------------
604 //* \fn    AT91F_SPI_EnableIt
605 //* \brief Enable SPI interrupt
606 //*----------------------------------------------------------------------------
607 static inline void AT91F_SPI_EnableIt (
608         AT91PS_SPI pSPI,     // pointer to a SPI controller
609         unsigned int flag)   // IT to be enabled
610 {
611         //* Write to the IER register
612         pSPI->SPI_IER = flag;
613 }
614
615 //*----------------------------------------------------------------------------
616 //* \fn    AT91F_SPI_DisableIt
617 //* \brief Disable SPI interrupt
618 //*----------------------------------------------------------------------------
619 static inline void AT91F_SPI_DisableIt (
620         AT91PS_SPI pSPI, // pointer to a SPI controller
621         unsigned int flag) // IT to be disabled
622 {
623         //* Write to the IDR register
624         pSPI->SPI_IDR = flag;
625 }
626
627 //*----------------------------------------------------------------------------
628 //* \fn    AT91F_SPI_Reset
629 //* \brief Reset the SPI controller
630 //*----------------------------------------------------------------------------
631 static inline void AT91F_SPI_Reset (
632         AT91PS_SPI pSPI // pointer to a SPI controller
633         )
634 {
635         //* Write to the CR register
636         pSPI->SPI_CR = AT91C_SPI_SWRST;
637 }
638
639 //*----------------------------------------------------------------------------
640 //* \fn    AT91F_SPI_Enable
641 //* \brief Enable the SPI controller
642 //*----------------------------------------------------------------------------
643 static inline void AT91F_SPI_Enable (
644         AT91PS_SPI pSPI // pointer to a SPI controller
645         )
646 {
647         //* Write to the CR register
648         pSPI->SPI_CR = AT91C_SPI_SPIEN;
649 }
650
651 //*----------------------------------------------------------------------------
652 //* \fn    AT91F_SPI_Disable
653 //* \brief Disable the SPI controller
654 //*----------------------------------------------------------------------------
655 static inline void AT91F_SPI_Disable (
656         AT91PS_SPI pSPI // pointer to a SPI controller
657         )
658 {
659         //* Write to the CR register
660         pSPI->SPI_CR = AT91C_SPI_SPIDIS;
661 }
662
663 //*----------------------------------------------------------------------------
664 //* \fn    AT91F_SPI_CfgMode
665 //* \brief Enable the SPI controller
666 //*----------------------------------------------------------------------------
667 static inline void AT91F_SPI_CfgMode (
668         AT91PS_SPI pSPI, // pointer to a SPI controller
669         int mode)        // mode register 
670 {
671         //* Write to the MR register
672         pSPI->SPI_MR = mode;
673 }
674
675 //*----------------------------------------------------------------------------
676 //* \fn    AT91F_SPI_CfgPCS
677 //* \brief Switch to the correct PCS of SPI Mode Register : Fixed Peripheral Selected
678 //*----------------------------------------------------------------------------
679 static inline void AT91F_SPI_CfgPCS (
680         AT91PS_SPI pSPI, // pointer to a SPI controller
681         char PCS_Device) // PCS of the Device
682 {       
683         //* Write to the MR register
684         pSPI->SPI_MR &= 0xFFF0FFFF;
685         pSPI->SPI_MR |= ( (PCS_Device<<16) & AT91C_SPI_PCS );
686 }
687
688 //*----------------------------------------------------------------------------
689 //* \fn    AT91F_SPI_ReceiveFrame
690 //* \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
691 //*----------------------------------------------------------------------------
692 static inline unsigned int AT91F_SPI_ReceiveFrame (
693         AT91PS_SPI pSPI,
694         char *pBuffer,
695         unsigned int szBuffer,
696         char *pNextBuffer,
697         unsigned int szNextBuffer )
698 {
699         return AT91F_PDC_ReceiveFrame(
700                 (AT91PS_PDC) &(pSPI->SPI_RPR),
701                 pBuffer,
702                 szBuffer,
703                 pNextBuffer,
704                 szNextBuffer);
705 }
706
707 //*----------------------------------------------------------------------------
708 //* \fn    AT91F_SPI_SendFrame
709 //* \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
710 //*----------------------------------------------------------------------------
711 static inline unsigned int AT91F_SPI_SendFrame(
712         AT91PS_SPI pSPI,
713         char *pBuffer,
714         unsigned int szBuffer,
715         char *pNextBuffer,
716         unsigned int szNextBuffer )
717 {
718         return AT91F_PDC_SendFrame(
719                 (AT91PS_PDC) &(pSPI->SPI_RPR),
720                 pBuffer,
721                 szBuffer,
722                 pNextBuffer,
723                 szNextBuffer);
724 }
725
726 //*----------------------------------------------------------------------------
727 //* \fn    AT91F_SPI_Close
728 //* \brief Close SPI: disable IT disable transfert, close PDC
729 //*----------------------------------------------------------------------------
730 static inline void AT91F_SPI_Close (
731         AT91PS_SPI pSPI)     // \arg pointer to a SPI controller
732 {
733     //* Reset all the Chip Select register
734     pSPI->SPI_CSR[0] = 0 ;
735     pSPI->SPI_CSR[1] = 0 ;
736     pSPI->SPI_CSR[2] = 0 ;
737     pSPI->SPI_CSR[3] = 0 ;
738
739     //* Reset the SPI mode
740     pSPI->SPI_MR = 0  ;
741
742     //* Disable all interrupts
743     pSPI->SPI_IDR = 0xFFFFFFFF ;
744
745     //* Abort the Peripheral Data Transfers
746     AT91F_PDC_Close((AT91PS_PDC) &(pSPI->SPI_RPR));
747
748     //* Disable receiver and transmitter and stop any activity immediately
749     pSPI->SPI_CR = AT91C_SPI_SPIDIS;
750 }
751
752 //*----------------------------------------------------------------------------
753 //* \fn    AT91F_SPI_PutChar
754 //* \brief Send a character,does not check if ready to send
755 //*----------------------------------------------------------------------------
756 static inline void AT91F_SPI_PutChar (
757         AT91PS_SPI pSPI,
758         unsigned int character,
759              unsigned int cs_number )
760 {
761     unsigned int value_for_cs;
762     value_for_cs = (~(1 << cs_number)) & 0xF;  //Place a zero among a 4 ONEs number
763     pSPI->SPI_TDR = (character & 0xFFFF) | (value_for_cs << 16);
764 }
765
766 //*----------------------------------------------------------------------------
767 //* \fn    AT91F_SPI_GetChar
768 //* \brief Receive a character,does not check if a character is available
769 //*----------------------------------------------------------------------------
770 static inline int AT91F_SPI_GetChar (
771         const AT91PS_SPI pSPI)
772 {
773     return((pSPI->SPI_RDR) & 0xFFFF);
774 }
775
776 //*----------------------------------------------------------------------------
777 //* \fn    AT91F_SPI_GetInterruptMaskStatus
778 //* \brief Return SPI Interrupt Mask Status
779 //*----------------------------------------------------------------------------
780 static inline unsigned int AT91F_SPI_GetInterruptMaskStatus( // \return SPI Interrupt Mask Status
781         AT91PS_SPI pSpi) // \arg  pointer to a SPI controller
782 {
783         return pSpi->SPI_IMR;
784 }
785
786 //*----------------------------------------------------------------------------
787 //* \fn    AT91F_SPI_IsInterruptMasked
788 //* \brief Test if SPI Interrupt is Masked 
789 //*----------------------------------------------------------------------------
790 static inline int AT91F_SPI_IsInterruptMasked(
791         AT91PS_SPI pSpi,   // \arg  pointer to a SPI controller
792         unsigned int flag) // \arg  flag to be tested
793 {
794         return (AT91F_SPI_GetInterruptMaskStatus(pSpi) & flag);
795 }
796
797 /* *****************************************************************************
798                 SOFTWARE API FOR TC
799    ***************************************************************************** */
800 //*----------------------------------------------------------------------------
801 //* \fn    AT91F_TC_InterruptEnable
802 //* \brief Enable TC Interrupt
803 //*----------------------------------------------------------------------------
804 static inline void AT91F_TC_InterruptEnable(
805         AT91PS_TC pTc,   // \arg  pointer to a TC controller
806         unsigned int flag) // \arg  TC interrupt to be enabled
807 {
808         pTc->TC_IER = flag;
809 }
810
811 //*----------------------------------------------------------------------------
812 //* \fn    AT91F_TC_InterruptDisable
813 //* \brief Disable TC Interrupt
814 //*----------------------------------------------------------------------------
815 static inline void AT91F_TC_InterruptDisable(
816         AT91PS_TC pTc,   // \arg  pointer to a TC controller
817         unsigned int flag) // \arg  TC interrupt to be disabled
818 {
819         pTc->TC_IDR = flag;
820 }
821
822 //*----------------------------------------------------------------------------
823 //* \fn    AT91F_TC_GetInterruptMaskStatus
824 //* \brief Return TC Interrupt Mask Status
825 //*----------------------------------------------------------------------------
826 static inline unsigned int AT91F_TC_GetInterruptMaskStatus( // \return TC Interrupt Mask Status
827         AT91PS_TC pTc) // \arg  pointer to a TC controller
828 {
829         return pTc->TC_IMR;
830 }
831
832 //*----------------------------------------------------------------------------
833 //* \fn    AT91F_TC_IsInterruptMasked
834 //* \brief Test if TC Interrupt is Masked 
835 //*----------------------------------------------------------------------------
836 static inline int AT91F_TC_IsInterruptMasked(
837         AT91PS_TC pTc,   // \arg  pointer to a TC controller
838         unsigned int flag) // \arg  flag to be tested
839 {
840         return (AT91F_TC_GetInterruptMaskStatus(pTc) & flag);
841 }
842
843 /* *****************************************************************************
844                 SOFTWARE API FOR PMC
845    ***************************************************************************** */
846 //*----------------------------------------------------------------------------
847 //* \fn    AT91F_CKGR_GetMainClock
848 //* \brief Return Main clock in Hz
849 //*----------------------------------------------------------------------------
850 static inline unsigned int AT91F_CKGR_GetMainClock (
851         AT91PS_CKGR pCKGR, // \arg pointer to CKGR controller
852         unsigned int slowClock)  // \arg slowClock in Hz
853 {
854         return ((pCKGR->CKGR_MCFR  & AT91C_CKGR_MAINF) * slowClock) >> 4;
855 }
856
857 //*----------------------------------------------------------------------------
858 //* \fn    AT91F_PMC_GetProcessorClock
859 //* \brief Return processor clock in Hz (for AT91RM3400 and AT91RM9200)
860 //*----------------------------------------------------------------------------
861 static inline unsigned int AT91F_PMC_GetProcessorClock (
862         AT91PS_PMC pPMC, // \arg pointer to PMC controller
863         AT91PS_CKGR pCKGR, // \arg pointer to CKGR controller
864         unsigned int slowClock)  // \arg slowClock in Hz
865 {
866         unsigned int reg = pPMC->PMC_MCKR;
867         unsigned int prescaler = (1 << ((reg & AT91C_PMC_PRES) >> 2));
868         unsigned int pllDivider, pllMultiplier;
869
870         switch (reg & AT91C_PMC_CSS) {
871                 case AT91C_PMC_CSS_SLOW_CLK: // Slow clock selected
872                         return slowClock / prescaler;
873                 case AT91C_PMC_CSS_MAIN_CLK: // Main clock is selected
874                         return AT91F_CKGR_GetMainClock(pCKGR, slowClock) / prescaler;
875                 case AT91C_PMC_CSS_PLLA_CLK: // PLLA clock is selected
876                         reg = pCKGR->CKGR_PLLAR;
877                         pllDivider    = (reg  & AT91C_CKGR_DIVA);
878                         pllMultiplier = ((reg  & AT91C_CKGR_MULA) >> 16) + 1;
879                         if (reg & AT91C_CKGR_SRCA) // Source is Main clock
880                                 return AT91F_CKGR_GetMainClock(pCKGR, slowClock) / pllDivider * pllMultiplier / prescaler;
881                         else                       // Source is Slow clock
882                                 return slowClock / pllDivider * pllMultiplier / prescaler;
883                 case AT91C_PMC_CSS_PLLB_CLK: // PLLB clock is selected
884                         reg = pCKGR->CKGR_PLLBR;
885                         pllDivider    = (reg  & AT91C_CKGR_DIVB);
886                         pllMultiplier = ((reg  & AT91C_CKGR_MULB) >> 16) + 1;
887                         return AT91F_CKGR_GetMainClock(pCKGR, slowClock) / pllDivider * pllMultiplier / prescaler;
888         }
889         return 0;
890 }
891
892 //*----------------------------------------------------------------------------
893 //* \fn    AT91F_PMC_GetMasterClock
894 //* \brief Return master clock in Hz (just for AT91RM9200)
895 //*----------------------------------------------------------------------------
896 static inline unsigned int AT91F_PMC_GetMasterClock (
897         AT91PS_PMC pPMC, // \arg pointer to PMC controller
898         AT91PS_CKGR pCKGR, // \arg pointer to CKGR controller
899         unsigned int slowClock)  // \arg slowClock in Hz
900 {
901         return AT91F_PMC_GetProcessorClock(pPMC, pCKGR, slowClock) /
902                 (((pPMC->PMC_MCKR & AT91C_PMC_MDIV) >> 8)+1);
903 }
904
905 //*----------------------------------------------------------------------------
906 //* \fn    AT91F_PMC_EnablePeriphClock
907 //* \brief Enable peripheral clock
908 //*----------------------------------------------------------------------------
909 static inline void AT91F_PMC_EnablePeriphClock (
910         AT91PS_PMC pPMC, // \arg pointer to PMC controller
911         unsigned int periphIds)  // \arg IDs of peripherals to enable
912 {
913         pPMC->PMC_PCER = periphIds;
914 }
915
916 //*----------------------------------------------------------------------------
917 //* \fn    AT91F_PMC_DisablePeriphClock
918 //* \brief Enable peripheral clock
919 //*----------------------------------------------------------------------------
920 static inline void AT91F_PMC_DisablePeriphClock (
921         AT91PS_PMC pPMC, // \arg pointer to PMC controller
922         unsigned int periphIds)  // \arg IDs of peripherals to enable
923 {
924         pPMC->PMC_PCDR = periphIds;
925 }
926
927 //*----------------------------------------------------------------------------
928 //* \fn    AT91F_PMC_EnablePCK
929 //* \brief Enable peripheral clock
930 //*----------------------------------------------------------------------------
931 static inline void AT91F_PMC_EnablePCK (
932         AT91PS_PMC pPMC, // \arg pointer to PMC controller
933         unsigned int pck,  // \arg Peripheral clock identifier 0 .. 7
934         unsigned int ccs,  // \arg clock selection: AT91C_PMC_CSS_SLOW_CLK, AT91C_PMC_CSS_MAIN_CLK, AT91C_PMC_CSS_PLLA_CLK, AT91C_PMC_CSS_PLLB_CLK
935         unsigned int pres) // \arg Programmable clock prescalar AT91C_PMC_PRES_CLK, AT91C_PMC_PRES_CLK_2, ..., AT91C_PMC_PRES_CLK_64
936 {
937         pPMC->PMC_PCKR[pck] = ccs | pres;
938         pPMC->PMC_SCER = (1 << pck) << 8;
939 }
940
941 //*----------------------------------------------------------------------------
942 //* \fn    AT91F_PMC_DisablePCK
943 //* \brief Enable peripheral clock
944 //*----------------------------------------------------------------------------
945 static inline void AT91F_PMC_DisablePCK (
946         AT91PS_PMC pPMC, // \arg pointer to PMC controller
947         unsigned int pck)  // \arg Peripheral clock identifier 0 .. 7
948 {
949         pPMC->PMC_SCDR = (1 << pck) << 8;
950 }
951
952 /* *****************************************************************************
953                 SOFTWARE API FOR PIO
954    ***************************************************************************** */
955 //*----------------------------------------------------------------------------
956 //* \fn    AT91F_PIO_CfgPeriph
957 //* \brief Enable pins to be drived by peripheral
958 //*----------------------------------------------------------------------------
959 static inline void AT91F_PIO_CfgPeriph(
960         AT91PS_PIO pPio,             // \arg pointer to a PIO controller
961         unsigned int periphAEnable,  // \arg PERIPH A to enable
962         unsigned int periphBEnable)  // \arg PERIPH B to enable
963
964 {
965         pPio->PIO_ASR = periphAEnable;
966         pPio->PIO_BSR = periphBEnable;
967         pPio->PIO_PDR = (periphAEnable | periphBEnable); // Set in Periph mode
968 }
969
970 //*----------------------------------------------------------------------------
971 //* \fn    AT91F_PIO_CfgOutput
972 //* \brief Enable PIO in output mode
973 //*----------------------------------------------------------------------------
974 static inline void AT91F_PIO_CfgOutput(
975         AT91PS_PIO pPio,             // \arg pointer to a PIO controller
976         unsigned int pioEnable)      // \arg PIO to be enabled
977 {
978         pPio->PIO_PER = pioEnable; // Set in PIO mode
979         pPio->PIO_OER = pioEnable; // Configure in Output
980 }
981
982 //*----------------------------------------------------------------------------
983 //* \fn    AT91F_PIO_CfgInput
984 //* \brief Enable PIO in input mode
985 //*----------------------------------------------------------------------------
986 static inline void AT91F_PIO_CfgInput(
987         AT91PS_PIO pPio,             // \arg pointer to a PIO controller
988         unsigned int inputEnable)      // \arg PIO to be enabled
989 {
990         // Disable output
991         pPio->PIO_ODR  = inputEnable;
992         pPio->PIO_PER  = inputEnable;
993 }
994
995 //*----------------------------------------------------------------------------
996 //* \fn    AT91F_PIO_CfgOpendrain
997 //* \brief Configure PIO in open drain
998 //*----------------------------------------------------------------------------
999 static inline void AT91F_PIO_CfgOpendrain(
1000         AT91PS_PIO pPio,             // \arg pointer to a PIO controller
1001         unsigned int multiDrvEnable) // \arg pio to be configured in open drain
1002 {
1003         // Configure the multi-drive option
1004         pPio->PIO_MDDR = ~multiDrvEnable;
1005         pPio->PIO_MDER = multiDrvEnable;
1006 }
1007
1008 //*----------------------------------------------------------------------------
1009 //* \fn    AT91F_PIO_CfgPullup
1010 //* \brief Enable pullup on PIO
1011 //*----------------------------------------------------------------------------
1012 static inline void AT91F_PIO_CfgPullup(
1013         AT91PS_PIO pPio,             // \arg pointer to a PIO controller
1014         unsigned int pullupEnable)   // \arg enable pullup on PIO
1015 {
1016                 // Connect or not Pullup
1017         pPio->PIO_PPUDR = ~pullupEnable;
1018         pPio->PIO_PPUER = pullupEnable;
1019 }
1020
1021 //*----------------------------------------------------------------------------
1022 //* \fn    AT91F_PIO_CfgDirectDrive
1023 //* \brief Enable direct drive on PIO
1024 //*----------------------------------------------------------------------------
1025 static inline void AT91F_PIO_CfgDirectDrive(
1026         AT91PS_PIO pPio,             // \arg pointer to a PIO controller
1027         unsigned int directDrive)    // \arg PIO to be configured with direct drive
1028
1029 {
1030         // Configure the Direct Drive
1031         pPio->PIO_OWDR  = ~directDrive;
1032         pPio->PIO_OWER  = directDrive;
1033 }
1034
1035 //*----------------------------------------------------------------------------
1036 //* \fn    AT91F_PIO_CfgInputFilter
1037 //* \brief Enable input filter on input PIO
1038 //*----------------------------------------------------------------------------
1039 static inline void AT91F_PIO_CfgInputFilter(
1040         AT91PS_PIO pPio,             // \arg pointer to a PIO controller
1041         unsigned int inputFilter)    // \arg PIO to be configured with input filter
1042
1043 {
1044         // Configure the Direct Drive
1045         pPio->PIO_IFDR  = ~inputFilter;
1046         pPio->PIO_IFER  = inputFilter;
1047 }
1048
1049 //*----------------------------------------------------------------------------
1050 //* \fn    AT91F_PIO_GetInput
1051 //* \brief Return PIO input value
1052 //*----------------------------------------------------------------------------
1053 static inline unsigned int AT91F_PIO_GetInput( // \return PIO input
1054         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1055 {
1056         return pPio->PIO_PDSR;
1057 }
1058
1059 //*----------------------------------------------------------------------------
1060 //* \fn    AT91F_PIO_IsInputSet
1061 //* \brief Test if PIO is input flag is active
1062 //*----------------------------------------------------------------------------
1063 static inline int AT91F_PIO_IsInputSet(
1064         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1065         unsigned int flag) // \arg  flag to be tested
1066 {
1067         return (AT91F_PIO_GetInput(pPio) & flag);
1068 }
1069
1070
1071 //*----------------------------------------------------------------------------
1072 //* \fn    AT91F_PIO_SetOutput
1073 //* \brief Set to 1 output PIO
1074 //*----------------------------------------------------------------------------
1075 static inline void AT91F_PIO_SetOutput(
1076         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1077         unsigned int flag) // \arg  output to be set
1078 {
1079         pPio->PIO_SODR = flag;
1080 }
1081
1082 //*----------------------------------------------------------------------------
1083 //* \fn    AT91F_PIO_ClearOutput
1084 //* \brief Set to 0 output PIO
1085 //*----------------------------------------------------------------------------
1086 static inline void AT91F_PIO_ClearOutput(
1087         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1088         unsigned int flag) // \arg  output to be cleared
1089 {
1090         pPio->PIO_CODR = flag;
1091 }
1092
1093 //*----------------------------------------------------------------------------
1094 //* \fn    AT91F_PIO_ForceOutput
1095 //* \brief Force output when Direct drive option is enabled
1096 //*----------------------------------------------------------------------------
1097 static inline void AT91F_PIO_ForceOutput(
1098         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1099         unsigned int flag) // \arg  output to be forced
1100 {
1101         pPio->PIO_ODSR = flag;
1102 }
1103
1104 //*----------------------------------------------------------------------------
1105 //* \fn    AT91F_PIO_Enable
1106 //* \brief Enable PIO
1107 //*----------------------------------------------------------------------------
1108 static inline void AT91F_PIO_Enable(
1109         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1110         unsigned int flag) // \arg  pio to be enabled 
1111 {
1112         pPio->PIO_PER = flag;
1113 }
1114
1115 //*----------------------------------------------------------------------------
1116 //* \fn    AT91F_PIO_Disable
1117 //* \brief Disable PIO
1118 //*----------------------------------------------------------------------------
1119 static inline void AT91F_PIO_Disable(
1120         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1121         unsigned int flag) // \arg  pio to be disabled 
1122 {
1123         pPio->PIO_PDR = flag;
1124 }
1125
1126 //*----------------------------------------------------------------------------
1127 //* \fn    AT91F_PIO_GetStatus
1128 //* \brief Return PIO Status
1129 //*----------------------------------------------------------------------------
1130 static inline unsigned int AT91F_PIO_GetStatus( // \return PIO Status
1131         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1132 {
1133         return pPio->PIO_PSR;
1134 }
1135
1136 //*----------------------------------------------------------------------------
1137 //* \fn    AT91F_PIO_IsSet
1138 //* \brief Test if PIO is Set
1139 //*----------------------------------------------------------------------------
1140 static inline int AT91F_PIO_IsSet(
1141         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1142         unsigned int flag) // \arg  flag to be tested
1143 {
1144         return (AT91F_PIO_GetStatus(pPio) & flag);
1145 }
1146
1147 //*----------------------------------------------------------------------------
1148 //* \fn    AT91F_PIO_OutputEnable
1149 //* \brief Output Enable PIO
1150 //*----------------------------------------------------------------------------
1151 static inline void AT91F_PIO_OutputEnable(
1152         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1153         unsigned int flag) // \arg  pio output to be enabled
1154 {
1155         pPio->PIO_OER = flag;
1156 }
1157
1158 //*----------------------------------------------------------------------------
1159 //* \fn    AT91F_PIO_OutputDisable
1160 //* \brief Output Enable PIO
1161 //*----------------------------------------------------------------------------
1162 static inline void AT91F_PIO_OutputDisable(
1163         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1164         unsigned int flag) // \arg  pio output to be disabled
1165 {
1166         pPio->PIO_ODR = flag;
1167 }
1168
1169 //*----------------------------------------------------------------------------
1170 //* \fn    AT91F_PIO_GetOutputStatus
1171 //* \brief Return PIO Output Status
1172 //*----------------------------------------------------------------------------
1173 static inline unsigned int AT91F_PIO_GetOutputStatus( // \return PIO Output Status
1174         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1175 {
1176         return pPio->PIO_OSR;
1177 }
1178
1179 //*----------------------------------------------------------------------------
1180 //* \fn    AT91F_PIO_IsOuputSet
1181 //* \brief Test if PIO Output is Set
1182 //*----------------------------------------------------------------------------
1183 static inline int AT91F_PIO_IsOutputSet(
1184         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1185         unsigned int flag) // \arg  flag to be tested
1186 {
1187         return (AT91F_PIO_GetOutputStatus(pPio) & flag);
1188 }
1189
1190 //*----------------------------------------------------------------------------
1191 //* \fn    AT91F_PIO_InputFilterEnable
1192 //* \brief Input Filter Enable PIO
1193 //*----------------------------------------------------------------------------
1194 static inline void AT91F_PIO_InputFilterEnable(
1195         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1196         unsigned int flag) // \arg  pio input filter to be enabled
1197 {
1198         pPio->PIO_IFER = flag;
1199 }
1200
1201 //*----------------------------------------------------------------------------
1202 //* \fn    AT91F_PIO_InputFilterDisable
1203 //* \brief Input Filter Disable PIO
1204 //*----------------------------------------------------------------------------
1205 static inline void AT91F_PIO_InputFilterDisable(
1206         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1207         unsigned int flag) // \arg  pio input filter to be disabled
1208 {
1209         pPio->PIO_IFDR = flag;
1210 }
1211
1212 //*----------------------------------------------------------------------------
1213 //* \fn    AT91F_PIO_GetInputFilterStatus
1214 //* \brief Return PIO Input Filter Status
1215 //*----------------------------------------------------------------------------
1216 static inline unsigned int AT91F_PIO_GetInputFilterStatus( // \return PIO Input Filter Status
1217         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1218 {
1219         return pPio->PIO_IFSR;
1220 }
1221
1222 //*----------------------------------------------------------------------------
1223 //* \fn    AT91F_PIO_IsInputFilterSet
1224 //* \brief Test if PIO Input filter is Set
1225 //*----------------------------------------------------------------------------
1226 static inline int AT91F_PIO_IsInputFilterSet(
1227         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1228         unsigned int flag) // \arg  flag to be tested
1229 {
1230         return (AT91F_PIO_GetInputFilterStatus(pPio) & flag);
1231 }
1232
1233 //*----------------------------------------------------------------------------
1234 //* \fn    AT91F_PIO_GetOutputDataStatus
1235 //* \brief Return PIO Output Data Status 
1236 //*----------------------------------------------------------------------------
1237 static inline unsigned int AT91F_PIO_GetOutputDataStatus( // \return PIO Output Data Status 
1238         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1239 {
1240         return pPio->PIO_ODSR;
1241 }
1242
1243 //*----------------------------------------------------------------------------
1244 //* \fn    AT91F_PIO_InterruptEnable
1245 //* \brief Enable PIO Interrupt
1246 //*----------------------------------------------------------------------------
1247 static inline void AT91F_PIO_InterruptEnable(
1248         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1249         unsigned int flag) // \arg  pio interrupt to be enabled
1250 {
1251         pPio->PIO_IER = flag;
1252 }
1253
1254 //*----------------------------------------------------------------------------
1255 //* \fn    AT91F_PIO_InterruptDisable
1256 //* \brief Disable PIO Interrupt
1257 //*----------------------------------------------------------------------------
1258 static inline void AT91F_PIO_InterruptDisable(
1259         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1260         unsigned int flag) // \arg  pio interrupt to be disabled
1261 {
1262         pPio->PIO_IDR = flag;
1263 }
1264
1265 //*----------------------------------------------------------------------------
1266 //* \fn    AT91F_PIO_GetInterruptMaskStatus
1267 //* \brief Return PIO Interrupt Mask Status
1268 //*----------------------------------------------------------------------------
1269 static inline unsigned int AT91F_PIO_GetInterruptMaskStatus( // \return PIO Interrupt Mask Status
1270         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1271 {
1272         return pPio->PIO_IMR;
1273 }
1274
1275 //*----------------------------------------------------------------------------
1276 //* \fn    AT91F_PIO_GetInterruptStatus
1277 //* \brief Return PIO Interrupt Status
1278 //*----------------------------------------------------------------------------
1279 static inline unsigned int AT91F_PIO_GetInterruptStatus( // \return PIO Interrupt Status
1280         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1281 {
1282         return pPio->PIO_ISR;
1283 }
1284
1285 //*----------------------------------------------------------------------------
1286 //* \fn    AT91F_PIO_IsInterruptMasked
1287 //* \brief Test if PIO Interrupt is Masked 
1288 //*----------------------------------------------------------------------------
1289 static inline int AT91F_PIO_IsInterruptMasked(
1290         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1291         unsigned int flag) // \arg  flag to be tested
1292 {
1293         return (AT91F_PIO_GetInterruptMaskStatus(pPio) & flag);
1294 }
1295
1296 //*----------------------------------------------------------------------------
1297 //* \fn    AT91F_PIO_IsInterruptSet
1298 //* \brief Test if PIO Interrupt is Set
1299 //*----------------------------------------------------------------------------
1300 static inline int AT91F_PIO_IsInterruptSet(
1301         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1302         unsigned int flag) // \arg  flag to be tested
1303 {
1304         return (AT91F_PIO_GetInterruptStatus(pPio) & flag);
1305 }
1306
1307 //*----------------------------------------------------------------------------
1308 //* \fn    AT91F_PIO_MultiDriverEnable
1309 //* \brief Multi Driver Enable PIO
1310 //*----------------------------------------------------------------------------
1311 static inline void AT91F_PIO_MultiDriverEnable(
1312         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1313         unsigned int flag) // \arg  pio to be enabled
1314 {
1315         pPio->PIO_MDER = flag;
1316 }
1317
1318 //*----------------------------------------------------------------------------
1319 //* \fn    AT91F_PIO_MultiDriverDisable
1320 //* \brief Multi Driver Disable PIO
1321 //*----------------------------------------------------------------------------
1322 static inline void AT91F_PIO_MultiDriverDisable(
1323         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1324         unsigned int flag) // \arg  pio to be disabled
1325 {
1326         pPio->PIO_MDDR = flag;
1327 }
1328
1329 //*----------------------------------------------------------------------------
1330 //* \fn    AT91F_PIO_GetMultiDriverStatus
1331 //* \brief Return PIO Multi Driver Status
1332 //*----------------------------------------------------------------------------
1333 static inline unsigned int AT91F_PIO_GetMultiDriverStatus( // \return PIO Multi Driver Status
1334         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1335 {
1336         return pPio->PIO_MDSR;
1337 }
1338
1339 //*----------------------------------------------------------------------------
1340 //* \fn    AT91F_PIO_IsMultiDriverSet
1341 //* \brief Test if PIO MultiDriver is Set
1342 //*----------------------------------------------------------------------------
1343 static inline int AT91F_PIO_IsMultiDriverSet(
1344         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1345         unsigned int flag) // \arg  flag to be tested
1346 {
1347         return (AT91F_PIO_GetMultiDriverStatus(pPio) & flag);
1348 }
1349
1350 //*----------------------------------------------------------------------------
1351 //* \fn    AT91F_PIO_A_RegisterSelection
1352 //* \brief PIO A Register Selection 
1353 //*----------------------------------------------------------------------------
1354 static inline void AT91F_PIO_A_RegisterSelection(
1355         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1356         unsigned int flag) // \arg  pio A register selection
1357 {
1358         pPio->PIO_ASR = flag;
1359 }
1360
1361 //*----------------------------------------------------------------------------
1362 //* \fn    AT91F_PIO_B_RegisterSelection
1363 //* \brief PIO B Register Selection 
1364 //*----------------------------------------------------------------------------
1365 static inline void AT91F_PIO_B_RegisterSelection(
1366         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1367         unsigned int flag) // \arg  pio B register selection 
1368 {
1369         pPio->PIO_BSR = flag;
1370 }
1371
1372 //*----------------------------------------------------------------------------
1373 //* \fn    AT91F_PIO_Get_AB_RegisterStatus
1374 //* \brief Return PIO Interrupt Status
1375 //*----------------------------------------------------------------------------
1376 static inline unsigned int AT91F_PIO_Get_AB_RegisterStatus( // \return PIO AB Register Status
1377         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1378 {
1379         return pPio->PIO_ABSR;
1380 }
1381
1382 //*----------------------------------------------------------------------------
1383 //* \fn    AT91F_PIO_IsAB_RegisterSet
1384 //* \brief Test if PIO AB Register is Set
1385 //*----------------------------------------------------------------------------
1386 static inline int AT91F_PIO_IsAB_RegisterSet(
1387         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1388         unsigned int flag) // \arg  flag to be tested
1389 {
1390         return (AT91F_PIO_Get_AB_RegisterStatus(pPio) & flag);
1391 }
1392
1393 //*----------------------------------------------------------------------------
1394 //* \fn    AT91F_PIO_OutputWriteEnable
1395 //* \brief Output Write Enable PIO
1396 //*----------------------------------------------------------------------------
1397 static inline void AT91F_PIO_OutputWriteEnable(
1398         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1399         unsigned int flag) // \arg  pio output write to be enabled
1400 {
1401         pPio->PIO_OWER = flag;
1402 }
1403
1404 //*----------------------------------------------------------------------------
1405 //* \fn    AT91F_PIO_OutputWriteDisable
1406 //* \brief Output Write Disable PIO
1407 //*----------------------------------------------------------------------------
1408 static inline void AT91F_PIO_OutputWriteDisable(
1409         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1410         unsigned int flag) // \arg  pio output write to be disabled
1411 {
1412         pPio->PIO_OWDR = flag;
1413 }
1414
1415 //*----------------------------------------------------------------------------
1416 //* \fn    AT91F_PIO_GetOutputWriteStatus
1417 //* \brief Return PIO Output Write Status
1418 //*----------------------------------------------------------------------------
1419 static inline unsigned int AT91F_PIO_GetOutputWriteStatus( // \return PIO Output Write Status
1420         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1421 {
1422         return pPio->PIO_OWSR;
1423 }
1424
1425 //*----------------------------------------------------------------------------
1426 //* \fn    AT91F_PIO_IsOutputWriteSet
1427 //* \brief Test if PIO OutputWrite is Set
1428 //*----------------------------------------------------------------------------
1429 static inline int AT91F_PIO_IsOutputWriteSet(
1430         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1431         unsigned int flag) // \arg  flag to be tested
1432 {
1433         return (AT91F_PIO_GetOutputWriteStatus(pPio) & flag);
1434 }
1435
1436 //*----------------------------------------------------------------------------
1437 //* \fn    AT91F_PIO_GetCfgPullup
1438 //* \brief Return PIO Configuration Pullup
1439 //*----------------------------------------------------------------------------
1440 static inline unsigned int AT91F_PIO_GetCfgPullup( // \return PIO Configuration Pullup 
1441         AT91PS_PIO pPio) // \arg  pointer to a PIO controller
1442 {
1443         return pPio->PIO_PPUSR;
1444 }
1445
1446 //*----------------------------------------------------------------------------
1447 //* \fn    AT91F_PIO_IsOutputDataStatusSet
1448 //* \brief Test if PIO Output Data Status is Set 
1449 //*----------------------------------------------------------------------------
1450 static inline int AT91F_PIO_IsOutputDataStatusSet(
1451         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1452         unsigned int flag) // \arg  flag to be tested
1453 {
1454         return (AT91F_PIO_GetOutputDataStatus(pPio) & flag);
1455 }
1456
1457 //*----------------------------------------------------------------------------
1458 //* \fn    AT91F_PIO_IsCfgPullupStatusSet
1459 //* \brief Test if PIO Configuration Pullup Status is Set
1460 //*----------------------------------------------------------------------------
1461 static inline int AT91F_PIO_IsCfgPullupStatusSet(
1462         AT91PS_PIO pPio,   // \arg  pointer to a PIO controller
1463         unsigned int flag) // \arg  flag to be tested
1464 {
1465         return (~AT91F_PIO_GetCfgPullup(pPio) & flag);
1466 }
1467
1468 /* *****************************************************************************
1469                 SOFTWARE API FOR TWI
1470    ***************************************************************************** */
1471 //*----------------------------------------------------------------------------
1472 //* \fn    AT91F_TWI_EnableIt
1473 //* \brief Enable TWI IT
1474 //*----------------------------------------------------------------------------
1475 static inline void AT91F_TWI_EnableIt (
1476         AT91PS_TWI pTWI, // \arg pointer to a TWI controller
1477         unsigned int flag)   // \arg IT to be enabled
1478 {
1479         //* Write to the IER register
1480         pTWI->TWI_IER = flag;
1481 }
1482
1483 //*----------------------------------------------------------------------------
1484 //* \fn    AT91F_TWI_DisableIt
1485 //* \brief Disable TWI IT
1486 //*----------------------------------------------------------------------------
1487 static inline void AT91F_TWI_DisableIt (
1488         AT91PS_TWI pTWI, // \arg pointer to a TWI controller
1489         unsigned int flag)   // \arg IT to be disabled
1490 {
1491         //* Write to the IDR register
1492         pTWI->TWI_IDR = flag;
1493 }
1494
1495 //*----------------------------------------------------------------------------
1496 //* \fn    AT91F_TWI_Configure
1497 //* \brief Configure TWI in master mode
1498 //*----------------------------------------------------------------------------
1499 static inline void AT91F_TWI_Configure ( AT91PS_TWI pTWI )          // \arg pointer to a TWI controller
1500 {
1501     //* Disable interrupts
1502         pTWI->TWI_IDR = (unsigned int) -1;
1503
1504     //* Reset peripheral
1505         pTWI->TWI_CR = AT91C_TWI_SWRST;
1506
1507         //* Set Master mode
1508         pTWI->TWI_CR = AT91C_TWI_MSEN | AT91C_TWI_SVDIS;
1509
1510 }
1511
1512 //*----------------------------------------------------------------------------
1513 //* \fn    AT91F_TWI_GetInterruptMaskStatus
1514 //* \brief Return TWI Interrupt Mask Status
1515 //*----------------------------------------------------------------------------
1516 static inline unsigned int AT91F_TWI_GetInterruptMaskStatus( // \return TWI Interrupt Mask Status
1517         AT91PS_TWI pTwi) // \arg  pointer to a TWI controller
1518 {
1519         return pTwi->TWI_IMR;
1520 }
1521
1522 //*----------------------------------------------------------------------------
1523 //* \fn    AT91F_TWI_IsInterruptMasked
1524 //* \brief Test if TWI Interrupt is Masked 
1525 //*----------------------------------------------------------------------------
1526 static inline int AT91F_TWI_IsInterruptMasked(
1527         AT91PS_TWI pTwi,   // \arg  pointer to a TWI controller
1528         unsigned int flag) // \arg  flag to be tested
1529 {
1530         return (AT91F_TWI_GetInterruptMaskStatus(pTwi) & flag);
1531 }
1532
1533 /* *****************************************************************************
1534                 SOFTWARE API FOR USART
1535    ***************************************************************************** */
1536 //*----------------------------------------------------------------------------
1537 //* \fn    AT91F_US_Baudrate
1538 //* \brief Calculate the baudrate
1539 //* Standard Asynchronous Mode : 8 bits , 1 stop , no parity
1540 #define AT91C_US_ASYNC_MODE ( AT91C_US_USMODE_NORMAL + \
1541                         AT91C_US_NBSTOP_1_BIT + \
1542                         AT91C_US_PAR_NONE + \
1543                         AT91C_US_CHRL_8_BITS + \
1544                         AT91C_US_CLKS_CLOCK )
1545
1546 //* Standard External Asynchronous Mode : 8 bits , 1 stop , no parity
1547 #define AT91C_US_ASYNC_SCK_MODE ( AT91C_US_USMODE_NORMAL + \
1548                             AT91C_US_NBSTOP_1_BIT + \
1549                             AT91C_US_PAR_NONE + \
1550                             AT91C_US_CHRL_8_BITS + \
1551                             AT91C_US_CLKS_EXT )
1552
1553 //* Standard Synchronous Mode : 8 bits , 1 stop , no parity
1554 #define AT91C_US_SYNC_MODE ( AT91C_US_SYNC + \
1555                        AT91C_US_USMODE_NORMAL + \
1556                        AT91C_US_NBSTOP_1_BIT + \
1557                        AT91C_US_PAR_NONE + \
1558                        AT91C_US_CHRL_8_BITS + \
1559                        AT91C_US_CLKS_CLOCK )
1560
1561 //* SCK used Label
1562 #define AT91C_US_SCK_USED (AT91C_US_CKLO | AT91C_US_CLKS_EXT)
1563
1564 //* Standard ISO T=0 Mode : 8 bits , 1 stop , parity
1565 #define AT91C_US_ISO_READER_MODE ( AT91C_US_USMODE_ISO7816_0 + \
1566                                                          AT91C_US_CLKS_CLOCK +\
1567                                  AT91C_US_NBSTOP_1_BIT + \
1568                                  AT91C_US_PAR_EVEN + \
1569                                  AT91C_US_CHRL_8_BITS + \
1570                                  AT91C_US_CKLO +\
1571                                  AT91C_US_OVER)
1572
1573 //* Standard IRDA mode
1574 #define AT91C_US_ASYNC_IRDA_MODE (  AT91C_US_USMODE_IRDA + \
1575                             AT91C_US_NBSTOP_1_BIT + \
1576                             AT91C_US_PAR_NONE + \
1577                             AT91C_US_CHRL_8_BITS + \
1578                             AT91C_US_CLKS_CLOCK )
1579
1580 //*----------------------------------------------------------------------------
1581 //* \fn    AT91F_US_Baudrate
1582 //* \brief Caluculate baud_value according to the main clock and the baud rate
1583 //*----------------------------------------------------------------------------
1584 static inline unsigned int AT91F_US_Baudrate (
1585         const unsigned int main_clock, // \arg peripheral clock
1586         const unsigned int baud_rate)  // \arg UART baudrate
1587 {
1588         unsigned int baud_value = ((main_clock*10)/(baud_rate * 16));
1589         if ((baud_value % 10) >= 5)
1590                 baud_value = (baud_value / 10) + 1;
1591         else
1592                 baud_value /= 10;
1593         return baud_value;
1594 }
1595
1596 //*----------------------------------------------------------------------------
1597 //* \fn    AT91F_US_SetBaudrate
1598 //* \brief Set the baudrate according to the CPU clock
1599 //*----------------------------------------------------------------------------
1600 static inline void AT91F_US_SetBaudrate (
1601         AT91PS_USART pUSART,    // \arg pointer to a USART controller
1602         unsigned int mainClock, // \arg peripheral clock
1603         unsigned int speed)     // \arg UART baudrate
1604 {
1605         //* Define the baud rate divisor register
1606         pUSART->US_BRGR = AT91F_US_Baudrate(mainClock, speed);
1607 }
1608
1609 //*----------------------------------------------------------------------------
1610 //* \fn    AT91F_US_SetTimeguard
1611 //* \brief Set USART timeguard
1612 //*----------------------------------------------------------------------------
1613 static inline void AT91F_US_SetTimeguard (
1614         AT91PS_USART pUSART,    // \arg pointer to a USART controller
1615         unsigned int timeguard) // \arg timeguard value
1616 {
1617         //* Write the Timeguard Register
1618         pUSART->US_TTGR = timeguard ;
1619 }
1620
1621 //*----------------------------------------------------------------------------
1622 //* \fn    AT91F_US_EnableIt
1623 //* \brief Enable USART IT
1624 //*----------------------------------------------------------------------------
1625 static inline void AT91F_US_EnableIt (
1626         AT91PS_USART pUSART, // \arg pointer to a USART controller
1627         unsigned int flag)   // \arg IT to be enabled
1628 {
1629         //* Write to the IER register
1630         pUSART->US_IER = flag;
1631 }
1632
1633 //*----------------------------------------------------------------------------
1634 //* \fn    AT91F_US_DisableIt
1635 //* \brief Disable USART IT
1636 //*----------------------------------------------------------------------------
1637 static inline void AT91F_US_DisableIt (
1638         AT91PS_USART pUSART, // \arg pointer to a USART controller
1639         unsigned int flag)   // \arg IT to be disabled
1640 {
1641         //* Write to the IER register
1642         pUSART->US_IDR = flag;
1643 }
1644
1645 //*----------------------------------------------------------------------------
1646 //* \fn    AT91F_US_Configure
1647 //* \brief Configure USART
1648 //*----------------------------------------------------------------------------
1649 static inline void AT91F_US_Configure (
1650         AT91PS_USART pUSART,     // \arg pointer to a USART controller
1651         unsigned int mainClock,  // \arg peripheral clock
1652         unsigned int mode ,      // \arg mode Register to be programmed
1653         unsigned int baudRate ,  // \arg baudrate to be programmed
1654         unsigned int timeguard ) // \arg timeguard to be programmed
1655 {
1656     //* Disable interrupts
1657     pUSART->US_IDR = (unsigned int) -1;
1658
1659     //* Reset receiver and transmitter
1660     pUSART->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS ;
1661
1662         //* Define the baud rate divisor register
1663         AT91F_US_SetBaudrate(pUSART, mainClock, baudRate);
1664
1665         //* Write the Timeguard Register
1666         AT91F_US_SetTimeguard(pUSART, timeguard);
1667
1668     //* Clear Transmit and Receive Counters
1669     AT91F_PDC_Open((AT91PS_PDC) &(pUSART->US_RPR));
1670
1671     //* Define the USART mode
1672     pUSART->US_MR = mode  ;
1673
1674 }
1675
1676 //*----------------------------------------------------------------------------
1677 //* \fn    AT91F_US_EnableRx
1678 //* \brief Enable receiving characters
1679 //*----------------------------------------------------------------------------
1680 static inline void AT91F_US_EnableRx (
1681         AT91PS_USART pUSART)     // \arg pointer to a USART controller
1682 {
1683     //* Enable receiver
1684     pUSART->US_CR = AT91C_US_RXEN;
1685 }
1686
1687 //*----------------------------------------------------------------------------
1688 //* \fn    AT91F_US_EnableTx
1689 //* \brief Enable sending characters
1690 //*----------------------------------------------------------------------------
1691 static inline void AT91F_US_EnableTx (
1692         AT91PS_USART pUSART)     // \arg pointer to a USART controller
1693 {
1694     //* Enable  transmitter
1695     pUSART->US_CR = AT91C_US_TXEN;
1696 }
1697
1698 //*----------------------------------------------------------------------------
1699 //* \fn    AT91F_US_ResetRx
1700 //* \brief Reset Receiver and re-enable it
1701 //*----------------------------------------------------------------------------
1702 static inline void AT91F_US_ResetRx (
1703         AT91PS_USART pUSART)     // \arg pointer to a USART controller
1704 {
1705         //* Reset receiver
1706         pUSART->US_CR = AT91C_US_RSTRX;
1707     //* Re-Enable receiver
1708     pUSART->US_CR = AT91C_US_RXEN;
1709 }
1710
1711 //*----------------------------------------------------------------------------
1712 //* \fn    AT91F_US_ResetTx
1713 //* \brief Reset Transmitter and re-enable it
1714 //*----------------------------------------------------------------------------
1715 static inline void AT91F_US_ResetTx (
1716         AT91PS_USART pUSART)     // \arg pointer to a USART controller
1717 {
1718         //* Reset transmitter
1719         pUSART->US_CR = AT91C_US_RSTTX;
1720     //* Enable transmitter
1721     pUSART->US_CR = AT91C_US_TXEN;
1722 }
1723
1724 //*----------------------------------------------------------------------------
1725 //* \fn    AT91F_US_DisableRx
1726 //* \brief Disable Receiver
1727 //*----------------------------------------------------------------------------
1728 static inline void AT91F_US_DisableRx (
1729         AT91PS_USART pUSART)     // \arg pointer to a USART controller
1730 {
1731     //* Disable receiver
1732     pUSART->US_CR = AT91C_US_RXDIS;
1733 }
1734
1735 //*----------------------------------------------------------------------------
1736 //* \fn    AT91F_US_DisableTx
1737 //* \brief Disable Transmitter
1738 //*----------------------------------------------------------------------------
1739 static inline void AT91F_US_DisableTx (
1740         AT91PS_USART pUSART)     // \arg pointer to a USART controller
1741 {
1742     //* Disable transmitter
1743     pUSART->US_CR = AT91C_US_TXDIS;
1744 }
1745
1746 //*----------------------------------------------------------------------------
1747 //* \fn    AT91F_US_Close
1748 //* \brief Close USART: disable IT disable receiver and transmitter, close PDC
1749 //*----------------------------------------------------------------------------
1750 static inline void AT91F_US_Close (
1751         AT91PS_USART pUSART)     // \arg pointer to a USART controller
1752 {
1753     //* Reset the baud rate divisor register
1754     pUSART->US_BRGR = 0 ;
1755
1756     //* Reset the USART mode
1757     pUSART->US_MR = 0  ;
1758
1759     //* Reset the Timeguard Register
1760     pUSART->US_TTGR = 0;
1761
1762     //* Disable all interrupts
1763     pUSART->US_IDR = 0xFFFFFFFF ;
1764
1765     //* Abort the Peripheral Data Transfers
1766     AT91F_PDC_Close((AT91PS_PDC) &(pUSART->US_RPR));
1767
1768     //* Disable receiver and transmitter and stop any activity immediately
1769     pUSART->US_CR = AT91C_US_TXDIS | AT91C_US_RXDIS | AT91C_US_RSTTX | AT91C_US_RSTRX ;
1770 }
1771
1772 //*----------------------------------------------------------------------------
1773 //* \fn    AT91F_US_TxReady
1774 //* \brief Return 1 if a character can be written in US_THR
1775 //*----------------------------------------------------------------------------
1776 static inline unsigned int AT91F_US_TxReady (
1777         AT91PS_USART pUSART )     // \arg pointer to a USART controller
1778 {
1779     return (pUSART->US_CSR & AT91C_US_TXRDY);
1780 }
1781
1782 //*----------------------------------------------------------------------------
1783 //* \fn    AT91F_US_RxReady
1784 //* \brief Return 1 if a character can be read in US_RHR
1785 //*----------------------------------------------------------------------------
1786 static inline unsigned int AT91F_US_RxReady (
1787         AT91PS_USART pUSART )     // \arg pointer to a USART controller
1788 {
1789     return (pUSART->US_CSR & AT91C_US_RXRDY);
1790 }
1791
1792 //*----------------------------------------------------------------------------
1793 //* \fn    AT91F_US_Error
1794 //* \brief Return the error flag
1795 //*----------------------------------------------------------------------------
1796 static inline unsigned int AT91F_US_Error (
1797         AT91PS_USART pUSART )     // \arg pointer to a USART controller
1798 {
1799     return (pUSART->US_CSR &
1800         (AT91C_US_OVRE |  // Overrun error
1801          AT91C_US_FRAME | // Framing error
1802          AT91C_US_PARE));  // Parity error
1803 }
1804
1805 //*----------------------------------------------------------------------------
1806 //* \fn    AT91F_US_PutChar
1807 //* \brief Send a character,does not check if ready to send
1808 //*----------------------------------------------------------------------------
1809 static inline void AT91F_US_PutChar (
1810         AT91PS_USART pUSART,
1811         int character )
1812 {
1813     pUSART->US_THR = (character & 0x1FF);
1814 }
1815
1816 //*----------------------------------------------------------------------------
1817 //* \fn    AT91F_US_GetChar
1818 //* \brief Receive a character,does not check if a character is available
1819 //*----------------------------------------------------------------------------
1820 static inline int AT91F_US_GetChar (
1821         const AT91PS_USART pUSART)
1822 {
1823     return((pUSART->US_RHR) & 0x1FF);
1824 }
1825
1826 //*----------------------------------------------------------------------------
1827 //* \fn    AT91F_US_SendFrame
1828 //* \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
1829 //*----------------------------------------------------------------------------
1830 static inline unsigned int AT91F_US_SendFrame(
1831         AT91PS_USART pUSART,
1832         char *pBuffer,
1833         unsigned int szBuffer,
1834         char *pNextBuffer,
1835         unsigned int szNextBuffer )
1836 {
1837         return AT91F_PDC_SendFrame(
1838                 (AT91PS_PDC) &(pUSART->US_RPR),
1839                 pBuffer,
1840                 szBuffer,
1841                 pNextBuffer,
1842                 szNextBuffer);
1843 }
1844
1845 //*----------------------------------------------------------------------------
1846 //* \fn    AT91F_US_ReceiveFrame
1847 //* \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
1848 //*----------------------------------------------------------------------------
1849 static inline unsigned int AT91F_US_ReceiveFrame (
1850         AT91PS_USART pUSART,
1851         char *pBuffer,
1852         unsigned int szBuffer,
1853         char *pNextBuffer,
1854         unsigned int szNextBuffer )
1855 {
1856         return AT91F_PDC_ReceiveFrame(
1857                 (AT91PS_PDC) &(pUSART->US_RPR),
1858                 pBuffer,
1859                 szBuffer,
1860                 pNextBuffer,
1861                 szNextBuffer);
1862 }
1863
1864 //*----------------------------------------------------------------------------
1865 //* \fn    AT91F_US_SetIrdaFilter
1866 //* \brief Set the value of IrDa filter tregister
1867 //*----------------------------------------------------------------------------
1868 static inline void AT91F_US_SetIrdaFilter (
1869         AT91PS_USART pUSART,
1870         unsigned char value
1871 )
1872 {
1873         pUSART->US_IF = value;
1874 }
1875
1876 /* *****************************************************************************
1877                 SOFTWARE API FOR MCI
1878    ***************************************************************************** */
1879 //* Classic MCI Mode Register Configuration with PDC mode enabled and MCK = MCI Clock
1880 #define AT91C_MCI_MR_PDCMODE    (AT91C_MCI_CLKDIV |\
1881                                 AT91C_MCI_PWSDIV |\
1882                                 (AT91C_MCI_PWSDIV<<1) |\
1883                                 AT91C_MCI_PDCMODE)
1884
1885 //* Classic MCI Data Timeout Register Configuration with 1048576 MCK cycles between 2 data transfer
1886 #define AT91C_MCI_DTOR_1MEGA_CYCLES     (AT91C_MCI_DTOCYC | AT91C_MCI_DTOMUL)
1887
1888 //* Classic MCI SDCard Register Configuration with 1-bit data bus on slot A
1889 #define AT91C_MCI_MMC_SLOTA     (AT91C_MCI_SCDSEL & 0x0)
1890
1891 //* Classic MCI SDCard Register Configuration with 1-bit data bus on slot B
1892 #define AT91C_MCI_MMC_SLOTB     (AT91C_MCI_SCDSEL)
1893
1894 //* Classic MCI SDCard Register Configuration with 4-bit data bus on slot A
1895 #define AT91C_MCI_SDCARD_4BITS_SLOTA    ( (AT91C_MCI_SCDSEL & 0x0) | AT91C_MCI_SCDBUS )
1896
1897 //* Classic MCI SDCard Register Configuration with 4-bit data bus on slot B
1898 #define AT91C_MCI_SDCARD_4BITS_SLOTB    (AT91C_MCI_SCDSEL | AT91C_MCI_SCDBUS)
1899
1900
1901
1902 //*----------------------------------------------------------------------------
1903 //* \fn    AT91F_MCI_Configure
1904 //* \brief Configure the MCI
1905 //*----------------------------------------------------------------------------
1906 static inline void AT91F_MCI_Configure (
1907         AT91PS_MCI pMCI,                         // \arg pointer to a MCI controller
1908         unsigned int DTOR_register,  // \arg Data Timeout Register to be programmed
1909         unsigned int MR_register,        // \arg Mode Register to be programmed
1910         unsigned int SDCR_register)  // \arg SDCard Register to be programmed
1911 {
1912     //* Reset the MCI
1913     pMCI->MCI_CR = AT91C_MCI_MCIEN | AT91C_MCI_PWSEN;
1914
1915     //* Disable all the interrupts
1916     pMCI->MCI_IDR = 0xFFFFFFFF;
1917
1918     //* Set the Data Timeout Register
1919     pMCI->MCI_DTOR = DTOR_register;
1920
1921     //* Set the Mode Register
1922     pMCI->MCI_MR = MR_register;
1923
1924     //* Set the SDCard Register
1925     pMCI->MCI_SDCR = SDCR_register;
1926 }
1927
1928 //*----------------------------------------------------------------------------
1929 //* \fn    AT91F_MCI_EnableIt
1930 //* \brief Enable MCI IT
1931 //*----------------------------------------------------------------------------
1932 static inline void AT91F_MCI_EnableIt (
1933         AT91PS_MCI pMCI, // \arg pointer to a MCI controller
1934         unsigned int flag)   // \arg IT to be enabled
1935 {
1936     //* Write to the IER register
1937     pMCI->MCI_IER = flag;
1938 }
1939
1940 //*----------------------------------------------------------------------------
1941 //* \fn    AT91F_MCI_DisableIt
1942 //* \brief Disable MCI IT
1943 //*----------------------------------------------------------------------------
1944 static inline void AT91F_MCI_DisableIt (
1945         AT91PS_MCI pMCI, // \arg pointer to a MCI controller
1946         unsigned int flag)   // \arg IT to be disabled
1947 {
1948     //* Write to the IDR register
1949     pMCI->MCI_IDR = flag;
1950 }
1951
1952 //*----------------------------------------------------------------------------
1953 //* \fn    AT91F_MCI_Enable_Interface
1954 //* \brief Enable the MCI Interface
1955 //*----------------------------------------------------------------------------
1956 static inline void AT91F_MCI_Enable_Interface (
1957         AT91PS_MCI pMCI)     // \arg pointer to a MCI controller
1958 {
1959     //* Enable the MCI
1960     pMCI->MCI_CR = AT91C_MCI_MCIEN;
1961 }
1962
1963 //*----------------------------------------------------------------------------
1964 //* \fn    AT91F_MCI_Disable_Interface
1965 //* \brief Disable the MCI Interface
1966 //*----------------------------------------------------------------------------
1967 static inline void AT91F_MCI_Disable_Interface (
1968         AT91PS_MCI pMCI)     // \arg pointer to a MCI controller
1969 {
1970     //* Disable the MCI
1971     pMCI->MCI_CR = AT91C_MCI_MCIDIS;
1972 }
1973
1974 //*----------------------------------------------------------------------------
1975 //* \fn    AT91F_MCI_Cfg_ModeRegister
1976 //* \brief Configure the MCI Mode Register
1977 //*----------------------------------------------------------------------------
1978 static inline void AT91F_MCI_Cfg_ModeRegister (
1979         AT91PS_MCI pMCI, // \arg pointer to a MCI controller
1980         unsigned int mode_register)   // \arg value to set in the mode register
1981 {
1982     //* Configure the MCI MR
1983     pMCI->MCI_MR = mode_register;
1984 }
1985 /* *****************************************************************************
1986                 SOFTWARE API FOR AIC
1987    ***************************************************************************** */
1988 #define AT91C_AIC_BRANCH_OPCODE ((void (*) ()) 0xE51FFF20) // ldr, pc, [pc, #-&F20]
1989
1990 //*----------------------------------------------------------------------------
1991 //* \fn    AT91F_AIC_ConfigureIt
1992 //* \brief Interrupt Handler Initialization
1993 //*----------------------------------------------------------------------------
1994 static inline unsigned int AT91F_AIC_ConfigureIt (
1995         AT91PS_AIC pAic,  // \arg pointer to the AIC registers
1996         unsigned int irq_id,     // \arg interrupt number to initialize
1997         unsigned int priority,   // \arg priority to give to the interrupt
1998         unsigned int src_type,   // \arg activation and sense of activation
1999         void (*newHandler) (void) ) // \arg address of the interrupt handler
2000 {
2001         unsigned int oldHandler;
2002     unsigned int mask ;
2003
2004     oldHandler = pAic->AIC_SVR[irq_id];
2005
2006     mask = 0x1 << irq_id ;
2007     //* Disable the interrupt on the interrupt controller
2008     pAic->AIC_IDCR = mask ;
2009     //* Save the interrupt handler routine pointer and the interrupt priority
2010     pAic->AIC_SVR[irq_id] = (unsigned int) newHandler ;
2011     //* Store the Source Mode Register
2012     pAic->AIC_SMR[irq_id] = src_type | priority  ;
2013     //* Clear the interrupt on the interrupt controller
2014     pAic->AIC_ICCR = mask ;
2015
2016         return oldHandler;
2017 }
2018
2019 //*----------------------------------------------------------------------------
2020 //* \fn    AT91F_AIC_EnableIt
2021 //* \brief Enable corresponding IT number
2022 //*----------------------------------------------------------------------------
2023 static inline void AT91F_AIC_EnableIt (
2024         AT91PS_AIC pAic,      // \arg pointer to the AIC registers
2025         unsigned int irq_id ) // \arg interrupt number to initialize
2026 {
2027     //* Enable the interrupt on the interrupt controller
2028     pAic->AIC_IECR = 0x1 << irq_id ;
2029 }
2030
2031 //*----------------------------------------------------------------------------
2032 //* \fn    AT91F_AIC_DisableIt
2033 //* \brief Disable corresponding IT number
2034 //*----------------------------------------------------------------------------
2035 static inline void AT91F_AIC_DisableIt (
2036         AT91PS_AIC pAic,      // \arg pointer to the AIC registers
2037         unsigned int irq_id ) // \arg interrupt number to initialize
2038 {
2039     unsigned int mask = 0x1 << irq_id;
2040     //* Disable the interrupt on the interrupt controller
2041     pAic->AIC_IDCR = mask ;
2042     //* Clear the interrupt on the Interrupt Controller ( if one is pending )
2043     pAic->AIC_ICCR = mask ;
2044 }
2045
2046 //*----------------------------------------------------------------------------
2047 //* \fn    AT91F_AIC_ClearIt
2048 //* \brief Clear corresponding IT number
2049 //*----------------------------------------------------------------------------
2050 static inline void AT91F_AIC_ClearIt (
2051         AT91PS_AIC pAic,     // \arg pointer to the AIC registers
2052         unsigned int irq_id) // \arg interrupt number to initialize
2053 {
2054     //* Clear the interrupt on the Interrupt Controller ( if one is pending )
2055     pAic->AIC_ICCR = (0x1 << irq_id);
2056 }
2057
2058 //*----------------------------------------------------------------------------
2059 //* \fn    AT91F_AIC_AcknowledgeIt
2060 //* \brief Acknowledge corresponding IT number
2061 //*----------------------------------------------------------------------------
2062 static inline void AT91F_AIC_AcknowledgeIt (
2063         AT91PS_AIC pAic)     // \arg pointer to the AIC registers
2064 {
2065     pAic->AIC_EOICR = pAic->AIC_EOICR;
2066 }
2067
2068 //*----------------------------------------------------------------------------
2069 //* \fn    AT91F_AIC_SetExceptionVector
2070 //* \brief Configure vector handler
2071 //*----------------------------------------------------------------------------
2072 static inline unsigned int  AT91F_AIC_SetExceptionVector (
2073         unsigned int *pVector, // \arg pointer to the AIC registers
2074         void (*Handler) () )   // \arg Interrupt Handler
2075 {
2076         unsigned int oldVector = *pVector;
2077
2078         if ((unsigned int) Handler == (unsigned int) AT91C_AIC_BRANCH_OPCODE)
2079                 *pVector = (unsigned int) AT91C_AIC_BRANCH_OPCODE;
2080         else
2081                 *pVector = (((((unsigned int) Handler) - ((unsigned int) pVector) - 0x8) >> 2) & 0x00FFFFFF) | 0xEA000000;
2082
2083         return oldVector;
2084 }
2085
2086 //*----------------------------------------------------------------------------
2087 //* \fn    AT91F_AIC_Trig
2088 //* \brief Trig an IT
2089 //*----------------------------------------------------------------------------
2090 static inline void  AT91F_AIC_Trig (
2091         AT91PS_AIC pAic,     // \arg pointer to the AIC registers
2092         unsigned int irq_id) // \arg interrupt number
2093 {
2094         pAic->AIC_ISCR = (0x1 << irq_id) ;
2095 }
2096
2097 //*----------------------------------------------------------------------------
2098 //* \fn    AT91F_AIC_IsActive
2099 //* \brief Test if an IT is active
2100 //*----------------------------------------------------------------------------
2101 static inline unsigned int  AT91F_AIC_IsActive (
2102         AT91PS_AIC pAic,     // \arg pointer to the AIC registers
2103         unsigned int irq_id) // \arg Interrupt Number
2104 {
2105         return (pAic->AIC_ISR & (0x1 << irq_id));
2106 }
2107
2108 //*----------------------------------------------------------------------------
2109 //* \fn    AT91F_AIC_IsPending
2110 //* \brief Test if an IT is pending
2111 //*----------------------------------------------------------------------------
2112 static inline unsigned int  AT91F_AIC_IsPending (
2113         AT91PS_AIC pAic,     // \arg pointer to the AIC registers
2114         unsigned int irq_id) // \arg Interrupt Number
2115 {
2116         return (pAic->AIC_IPR & (0x1 << irq_id));
2117 }
2118
2119 //*----------------------------------------------------------------------------
2120 //* \fn    AT91F_AIC_Open
2121 //* \brief Set exception vectors and AIC registers to default values
2122 //*----------------------------------------------------------------------------
2123 static inline void AT91F_AIC_Open(
2124         AT91PS_AIC pAic,        // \arg pointer to the AIC registers
2125         void (*IrqHandler) (),  // \arg Default IRQ vector exception
2126         void (*FiqHandler) (),  // \arg Default FIQ vector exception
2127         void (*DefaultHandler)  (), // \arg Default Handler set in ISR
2128         void (*SpuriousHandler) (), // \arg Default Spurious Handler
2129         unsigned int protectMode)   // \arg Debug Control Register
2130 {
2131         int i;
2132
2133         // Disable all interrupts and set IVR to the default handler
2134         for (i = 0; i < 32; ++i) {
2135                 AT91F_AIC_DisableIt(pAic, i);
2136                 AT91F_AIC_ConfigureIt(pAic, i, AT91C_AIC_PRIOR_LOWEST, AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, DefaultHandler);
2137         }
2138
2139         // Set the IRQ exception vector
2140         AT91F_AIC_SetExceptionVector((unsigned int *) 0x18, IrqHandler);
2141         // Set the Fast Interrupt exception vector
2142         AT91F_AIC_SetExceptionVector((unsigned int *) 0x1C, FiqHandler);
2143
2144         pAic->AIC_SPU = (unsigned int) SpuriousHandler;
2145         pAic->AIC_DCR = protectMode;
2146 }
2147 /* *****************************************************************************
2148                 SOFTWARE API FOR UDP
2149    ***************************************************************************** */
2150 //*----------------------------------------------------------------------------
2151 //* \fn    AT91F_UDP_EnableIt
2152 //* \brief Enable UDP IT
2153 //*----------------------------------------------------------------------------
2154 static inline void AT91F_UDP_EnableIt (
2155         AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
2156         unsigned int flag)   // \arg IT to be enabled
2157 {
2158         //* Write to the IER register
2159         pUDP->UDP_IER = flag;
2160 }
2161
2162 //*----------------------------------------------------------------------------
2163 //* \fn    AT91F_UDP_DisableIt
2164 //* \brief Disable UDP IT
2165 //*----------------------------------------------------------------------------
2166 static inline void AT91F_UDP_DisableIt (
2167         AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
2168         unsigned int flag)   // \arg IT to be disabled
2169 {
2170         //* Write to the IDR register
2171         pUDP->UDP_IDR = flag;
2172 }
2173
2174 //*----------------------------------------------------------------------------
2175 //* \fn    AT91F_UDP_SetAddress
2176 //* \brief Set UDP functional address
2177 //*----------------------------------------------------------------------------
2178 static inline void AT91F_UDP_SetAddress (
2179         AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
2180         unsigned char address)   // \arg new UDP address
2181 {
2182         pUDP->UDP_FADDR = (AT91C_UDP_FEN | address);
2183 }
2184
2185 //*----------------------------------------------------------------------------
2186 //* \fn    AT91F_UDP_EnableEp
2187 //* \brief Enable Endpoint
2188 //*----------------------------------------------------------------------------
2189 static inline void AT91F_UDP_EnableEp (
2190         AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
2191         unsigned int flag)   // \arg endpoints to be enabled
2192 {
2193         pUDP->UDP_GLBSTATE  |= flag;
2194 }
2195
2196 //*----------------------------------------------------------------------------
2197 //* \fn    AT91F_UDP_DisableEp
2198 //* \brief Enable Endpoint
2199 //*----------------------------------------------------------------------------
2200 static inline void AT91F_UDP_DisableEp (
2201         AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
2202         unsigned int flag)   // \arg endpoints to be enabled
2203 {
2204         pUDP->UDP_GLBSTATE  &= ~(flag);
2205 }
2206
2207 //*----------------------------------------------------------------------------
2208 //* \fn    AT91F_UDP_SetState
2209 //* \brief Set UDP Device state
2210 //*----------------------------------------------------------------------------
2211 static inline void AT91F_UDP_SetState (
2212         AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
2213         unsigned int flag)   // \arg new UDP address
2214 {
2215         pUDP->UDP_GLBSTATE  &= ~(AT91C_UDP_FADDEN | AT91C_UDP_CONFG);
2216         pUDP->UDP_GLBSTATE  |= flag;
2217 }
2218
2219 //*----------------------------------------------------------------------------
2220 //* \fn    AT91F_UDP_GetState
2221 //* \brief return UDP Device state
2222 //*----------------------------------------------------------------------------
2223 static inline unsigned int AT91F_UDP_GetState ( // \return the UDP device state
2224         AT91PS_UDP pUDP)     // \arg pointer to a UDP controller
2225 {
2226         return (pUDP->UDP_GLBSTATE  & (AT91C_UDP_FADDEN | AT91C_UDP_CONFG));
2227 }
2228
2229 //*----------------------------------------------------------------------------
2230 //* \fn    AT91F_UDP_ResetEp
2231 //* \brief Reset UDP endpoint
2232 //*----------------------------------------------------------------------------
2233 static inline void AT91F_UDP_ResetEp ( // \return the UDP device state
2234         AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
2235         unsigned int flag)   // \arg Endpoints to be reset
2236 {
2237         pUDP->UDP_RSTEP = flag;
2238 }
2239
2240 //*----------------------------------------------------------------------------
2241 //* \fn    AT91F_UDP_EpStall
2242 //* \brief Endpoint will STALL requests
2243 //*----------------------------------------------------------------------------
2244 static inline void AT91F_UDP_EpStall(
2245         AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
2246         unsigned char endpoint)   // \arg endpoint number
2247 {
2248         pUDP->UDP_CSR[endpoint] |= AT91C_UDP_FORCESTALL;
2249 }
2250
2251 //*----------------------------------------------------------------------------
2252 //* \fn    AT91F_UDP_EpWrite
2253 //* \brief Write value in the DPR
2254 //*----------------------------------------------------------------------------
2255 static inline void AT91F_UDP_EpWrite(
2256         AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
2257         unsigned char endpoint,  // \arg endpoint number
2258         unsigned char value)     // \arg value to be written in the DPR
2259 {
2260         pUDP->UDP_FDR[endpoint] = value;
2261 }
2262
2263 //*----------------------------------------------------------------------------
2264 //* \fn    AT91F_UDP_EpRead
2265 //* \brief Return value from the DPR
2266 //*----------------------------------------------------------------------------
2267 static inline unsigned int AT91F_UDP_EpRead(
2268         AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
2269         unsigned char endpoint)  // \arg endpoint number
2270 {
2271         return pUDP->UDP_FDR[endpoint];
2272 }
2273
2274 //*----------------------------------------------------------------------------
2275 //* \fn    AT91F_UDP_EpEndOfWr
2276 //* \brief Notify the UDP that values in DPR are ready to be sent
2277 //*----------------------------------------------------------------------------
2278 static inline void AT91F_UDP_EpEndOfWr(
2279         AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
2280         unsigned char endpoint)  // \arg endpoint number
2281 {
2282         pUDP->UDP_CSR[endpoint] |= AT91C_UDP_TXPKTRDY;
2283 }
2284
2285 //*----------------------------------------------------------------------------
2286 //* \fn    AT91F_UDP_EpClear
2287 //* \brief Clear flag in the endpoint CSR register
2288 //*----------------------------------------------------------------------------
2289 static inline void AT91F_UDP_EpClear(
2290         AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
2291         unsigned char endpoint,  // \arg endpoint number
2292         unsigned int flag)       // \arg flag to be cleared
2293 {
2294         pUDP->UDP_CSR[endpoint] &= ~(flag);
2295 }
2296
2297 //*----------------------------------------------------------------------------
2298 //* \fn    AT91F_UDP_EpSet
2299 //* \brief Set flag in the endpoint CSR register
2300 //*----------------------------------------------------------------------------
2301 static inline void AT91F_UDP_EpSet(
2302         AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
2303         unsigned char endpoint,  // \arg endpoint number
2304         unsigned int flag)       // \arg flag to be cleared
2305 {
2306         pUDP->UDP_CSR[endpoint] |= flag;
2307 }
2308
2309 //*----------------------------------------------------------------------------
2310 //* \fn    AT91F_UDP_EpStatus
2311 //* \brief Return the endpoint CSR register
2312 //*----------------------------------------------------------------------------
2313 static inline unsigned int AT91F_UDP_EpStatus(
2314         AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
2315         unsigned char endpoint)  // \arg endpoint number
2316 {
2317         return pUDP->UDP_CSR[endpoint];
2318 }
2319
2320 //*----------------------------------------------------------------------------
2321 //* \fn    AT91F_UDP_GetInterruptMaskStatus
2322 //* \brief Return UDP Interrupt Mask Status
2323 //*----------------------------------------------------------------------------
2324 static inline unsigned int AT91F_UDP_GetInterruptMaskStatus( // \return UDP Interrupt Mask Status
2325         AT91PS_UDP pUdp) // \arg  pointer to a UDP controller
2326 {
2327         return pUdp->UDP_IMR;
2328 }
2329
2330 //*----------------------------------------------------------------------------
2331 //* \fn    AT91F_UDP_IsInterruptMasked
2332 //* \brief Test if UDP Interrupt is Masked 
2333 //*----------------------------------------------------------------------------
2334 static inline int AT91F_UDP_IsInterruptMasked(
2335         AT91PS_UDP pUdp,   // \arg  pointer to a UDP controller
2336         unsigned int flag) // \arg  flag to be tested
2337 {
2338         return (AT91F_UDP_GetInterruptMaskStatus(pUdp) & flag);
2339 }
2340
2341 /* *****************************************************************************
2342                 SOFTWARE API FOR ST
2343    ***************************************************************************** */
2344 //*----------------------------------------------------------------------------
2345 //* \fn    AT91F_ST_SetPeriodInterval
2346 //* \brief Set Periodic Interval Interrupt (period in ms)
2347 //*----------------------------------------------------------------------------
2348 static inline void AT91F_ST_SetPeriodInterval(
2349         AT91PS_ST pSt,
2350         unsigned int period)
2351 {
2352         volatile int status;
2353         pSt->ST_IDR = AT91C_ST_PITS;                    /* Interrupt disable Register */
2354
2355         status = pSt->ST_SR;
2356     pSt->ST_PIMR = period << 5;                         /* Period Interval Mode Register == timer interval = 1ms*/
2357 }
2358
2359 //*----------------------------------------------------------------------------
2360 //* \fn    AT91F_ST_EnableIt
2361 //* \brief Enable system timer interrupt
2362 //*----------------------------------------------------------------------------
2363 static inline void AT91F_ST_EnableIt(
2364         AT91PS_ST pSt,
2365         unsigned int flag)
2366 {
2367         pSt->ST_IER = flag;
2368 }
2369
2370 //*----------------------------------------------------------------------------
2371 //* \fn    AT91F_ST_DisableIt
2372 //* \brief Disable system timer interrupt
2373 //*----------------------------------------------------------------------------
2374 static inline void AT91F_ST_DisableIt(
2375         AT91PS_ST pSt,
2376         unsigned int flag)
2377 {
2378         pSt->ST_IDR = flag;
2379 }
2380
2381 //*----------------------------------------------------------------------------
2382 //* \fn    AT91F_ST_GetInterruptMaskStatus
2383 //* \brief Return ST Interrupt Mask Status
2384 //*----------------------------------------------------------------------------
2385 static inline unsigned int AT91F_ST_GetInterruptMaskStatus( // \return ST Interrupt Mask Status
2386         AT91PS_ST pSt) // \arg  pointer to a ST controller
2387 {
2388         return pSt->ST_IMR;
2389 }
2390
2391 //*----------------------------------------------------------------------------
2392 //* \fn    AT91F_ST_IsInterruptMasked
2393 //* \brief Test if ST Interrupt is Masked 
2394 //*----------------------------------------------------------------------------
2395 static inline int AT91F_ST_IsInterruptMasked(
2396         AT91PS_ST pSt,   // \arg  pointer to a ST controller
2397         unsigned int flag) // \arg  flag to be tested
2398 {
2399         return (AT91F_ST_GetInterruptMaskStatus(pSt) & flag);
2400 }
2401 //*----------------------------------------------------------------------------
2402 //* \fn    AT91F_EBI_CfgPIO
2403 //* \brief Configure PIO controllers to drive EBI signals
2404 //*----------------------------------------------------------------------------
2405 static inline void AT91F_EBI_CfgPIO (void)
2406 {
2407         // Configure PIO controllers to periph mode
2408         AT91F_PIO_CfgPeriph(
2409                 AT91C_BASE_PIOC, // PIO controller base address
2410                 ((unsigned int) AT91C_PC8_A24     ) |
2411                 ((unsigned int) AT91C_PC7_A23     ), // Peripheral A
2412                 0); // Peripheral B
2413 }
2414
2415 //*----------------------------------------------------------------------------
2416 //* \fn    AT91F_DBGU_CfgPMC
2417 //* \brief Enable Peripheral clock in PMC for  DBGU
2418 //*----------------------------------------------------------------------------
2419 static inline void AT91F_DBGU_CfgPMC (void)
2420 {
2421         AT91F_PMC_EnablePeriphClock(
2422                 AT91C_BASE_PMC, // PIO controller base address
2423                 ((unsigned int) 1 << AT91C_ID_SYS));
2424 }
2425
2426 //*----------------------------------------------------------------------------
2427 //* \fn    AT91F_DBGU_CfgPIO
2428 //* \brief Configure PIO controllers to drive DBGU signals
2429 //*----------------------------------------------------------------------------
2430 static inline void AT91F_DBGU_CfgPIO (void)
2431 {
2432         // Configure PIO controllers to periph mode
2433         AT91F_PIO_CfgPeriph(
2434                 AT91C_BASE_PIOA, // PIO controller base address
2435                 ((unsigned int) AT91C_PA31_DTXD    ) |
2436                 ((unsigned int) AT91C_PA30_DRXD    ), // Peripheral A
2437                 0); // Peripheral B
2438 }
2439
2440 //*----------------------------------------------------------------------------
2441 //* \fn    AT91F_SYS_CfgPMC
2442 //* \brief Enable Peripheral clock in PMC for  SYS
2443 //*----------------------------------------------------------------------------
2444 static inline void AT91F_SYS_CfgPMC (void)
2445 {
2446         AT91F_PMC_EnablePeriphClock(
2447                 AT91C_BASE_PMC, // PIO controller base address
2448                 ((unsigned int) 1 << AT91C_ID_SYS));
2449 }
2450
2451 //*----------------------------------------------------------------------------
2452 //* \fn    AT91F_UHP_CfgPMC
2453 //* \brief Enable Peripheral clock in PMC for  UHP
2454 //*----------------------------------------------------------------------------
2455 static inline void AT91F_UHP_CfgPMC (void)
2456 {
2457         AT91F_PMC_EnablePeriphClock(
2458                 AT91C_BASE_PMC, // PIO controller base address
2459                 ((unsigned int) 1 << AT91C_ID_UHP));
2460 }
2461
2462 //*----------------------------------------------------------------------------
2463 //* \fn    AT91F_SDRC_CfgPIO
2464 //* \brief Configure PIO controllers to drive SDRC signals
2465 //*----------------------------------------------------------------------------
2466 static inline void AT91F_SDRC_CfgPIO (void)
2467 {
2468         // Configure PIO controllers to periph mode
2469         AT91F_PIO_CfgPeriph(
2470                 AT91C_BASE_PIOC, // PIO controller base address
2471                 ((unsigned int) AT91C_PC20_D20     ) |
2472                 ((unsigned int) AT91C_PC21_D21     ) |
2473                 ((unsigned int) AT91C_PC30_D30     ) |
2474                 ((unsigned int) AT91C_PC22_D22     ) |
2475                 ((unsigned int) AT91C_PC31_D31     ) |
2476                 ((unsigned int) AT91C_PC23_D23     ) |
2477                 ((unsigned int) AT91C_PC16_D16     ) |
2478                 ((unsigned int) AT91C_PC24_D24     ) |
2479                 ((unsigned int) AT91C_PC17_D17     ) |
2480                 ((unsigned int) AT91C_PC25_D25     ) |
2481                 ((unsigned int) AT91C_PC18_D18     ) |
2482                 ((unsigned int) AT91C_PC26_D26     ) |
2483                 ((unsigned int) AT91C_PC19_D19     ) |
2484                 ((unsigned int) AT91C_PC27_D27     ) |
2485                 ((unsigned int) AT91C_PC28_D28     ) |
2486                 ((unsigned int) AT91C_PC29_D29     ), // Peripheral A
2487                 0); // Peripheral B
2488 }
2489
2490 //*----------------------------------------------------------------------------
2491 //* \fn    AT91F_EMAC_CfgPMC
2492 //* \brief Enable Peripheral clock in PMC for  EMAC
2493 //*----------------------------------------------------------------------------
2494 static inline void AT91F_EMAC_CfgPMC (void)
2495 {
2496         AT91F_PMC_EnablePeriphClock(
2497                 AT91C_BASE_PMC, // PIO controller base address
2498                 ((unsigned int) 1 << AT91C_ID_EMAC));
2499 }
2500
2501 //*----------------------------------------------------------------------------
2502 //* \fn    AT91F_EMAC_CfgPIO
2503 //* \brief Configure PIO controllers to drive EMAC signals
2504 //*----------------------------------------------------------------------------
2505 static inline void AT91F_EMAC_CfgPIO (void)
2506 {
2507         // Configure PIO controllers to periph mode
2508         AT91F_PIO_CfgPeriph(
2509                 AT91C_BASE_PIOA, // PIO controller base address
2510                 ((unsigned int) AT91C_PA14_ERXER   ) |
2511                 ((unsigned int) AT91C_PA12_ERX0    ) |
2512                 ((unsigned int) AT91C_PA13_ERX1    ) |
2513                 ((unsigned int) AT91C_PA8_ETXEN   ) |
2514                 ((unsigned int) AT91C_PA16_EMDIO   ) |
2515                 ((unsigned int) AT91C_PA9_ETX0    ) |
2516                 ((unsigned int) AT91C_PA10_ETX1    ) |
2517                 ((unsigned int) AT91C_PA11_ECRS_ECRSDV) |
2518                 ((unsigned int) AT91C_PA15_EMDC    ) |
2519                 ((unsigned int) AT91C_PA7_ETXCK_EREFCK), // Peripheral A
2520                 0); // Peripheral B
2521 }
2522
2523 //*----------------------------------------------------------------------------
2524 //* \fn    AT91F_RTC_CfgPMC
2525 //* \brief Enable Peripheral clock in PMC for  RTC
2526 //*----------------------------------------------------------------------------
2527 static inline void AT91F_RTC_CfgPMC (void)
2528 {
2529         AT91F_PMC_EnablePeriphClock(
2530                 AT91C_BASE_PMC, // PIO controller base address
2531                 ((unsigned int) 1 << AT91C_ID_SYS));
2532 }
2533
2534 //*----------------------------------------------------------------------------
2535 //* \fn    AT91F_SSC2_CfgPMC
2536 //* \brief Enable Peripheral clock in PMC for  SSC2
2537 //*----------------------------------------------------------------------------
2538 static inline void AT91F_SSC2_CfgPMC (void)
2539 {
2540         AT91F_PMC_EnablePeriphClock(
2541                 AT91C_BASE_PMC, // PIO controller base address
2542                 ((unsigned int) 1 << AT91C_ID_SSC2));
2543 }
2544
2545 //*----------------------------------------------------------------------------
2546 //* \fn    AT91F_SSC2_CfgPIO
2547 //* \brief Configure PIO controllers to drive SSC2 signals
2548 //*----------------------------------------------------------------------------
2549 static inline void AT91F_SSC2_CfgPIO (void)
2550 {
2551         // Configure PIO controllers to periph mode
2552         AT91F_PIO_CfgPeriph(
2553                 AT91C_BASE_PIOB, // PIO controller base address
2554                 ((unsigned int) AT91C_PB12_TF2     ) |
2555                 ((unsigned int) AT91C_PB17_RF2     ) |
2556                 ((unsigned int) AT91C_PB13_TK2     ) |
2557                 ((unsigned int) AT91C_PB16_RK2     ) |
2558                 ((unsigned int) AT91C_PB14_TD2     ) |
2559                 ((unsigned int) AT91C_PB15_RD2     ), // Peripheral A
2560                 0); // Peripheral B
2561 }
2562
2563 //*----------------------------------------------------------------------------
2564 //* \fn    AT91F_SSC1_CfgPMC
2565 //* \brief Enable Peripheral clock in PMC for  SSC1
2566 //*----------------------------------------------------------------------------
2567 static inline void AT91F_SSC1_CfgPMC (void)
2568 {
2569         AT91F_PMC_EnablePeriphClock(
2570                 AT91C_BASE_PMC, // PIO controller base address
2571                 ((unsigned int) 1 << AT91C_ID_SSC1));
2572 }
2573
2574 //*----------------------------------------------------------------------------
2575 //* \fn    AT91F_SSC1_CfgPIO
2576 //* \brief Configure PIO controllers to drive SSC1 signals
2577 //*----------------------------------------------------------------------------
2578 static inline void AT91F_SSC1_CfgPIO (void)
2579 {
2580         // Configure PIO controllers to periph mode
2581         AT91F_PIO_CfgPeriph(
2582                 AT91C_BASE_PIOB, // PIO controller base address
2583                 ((unsigned int) AT91C_PB11_RF1     ) |
2584                 ((unsigned int) AT91C_PB10_RK1     ) |
2585                 ((unsigned int) AT91C_PB8_TD1     ) |
2586                 ((unsigned int) AT91C_PB9_RD1     ), // Peripheral A
2587                 0); // Peripheral B
2588 }
2589
2590 //*----------------------------------------------------------------------------
2591 //* \fn    AT91F_SSC0_CfgPMC
2592 //* \brief Enable Peripheral clock in PMC for  SSC0
2593 //*----------------------------------------------------------------------------
2594 static inline void AT91F_SSC0_CfgPMC (void)
2595 {
2596         AT91F_PMC_EnablePeriphClock(
2597                 AT91C_BASE_PMC, // PIO controller base address
2598                 ((unsigned int) 1 << AT91C_ID_SSC0));
2599 }
2600
2601 //*----------------------------------------------------------------------------
2602 //* \fn    AT91F_SPI_CfgPMC
2603 //* \brief Enable Peripheral clock in PMC for  SPI
2604 //*----------------------------------------------------------------------------
2605 static inline void AT91F_SPI_CfgPMC (void)
2606 {
2607         AT91F_PMC_EnablePeriphClock(
2608                 AT91C_BASE_PMC, // PIO controller base address
2609                 ((unsigned int) 1 << AT91C_ID_SPI));
2610 }
2611
2612 //*----------------------------------------------------------------------------
2613 //* \fn    AT91F_SPI_CfgPIO
2614 //* \brief Configure PIO controllers to drive SPI signals
2615 //*----------------------------------------------------------------------------
2616 static inline void AT91F_SPI_CfgPIO (void)
2617 {
2618         // Configure PIO controllers to periph mode
2619         AT91F_PIO_CfgPeriph(
2620                 AT91C_BASE_PIOA, // PIO controller base address
2621                 ((unsigned int) AT91C_PA3_NPCS0   ) |
2622                 ((unsigned int) AT91C_PA4_NPCS1   ) |
2623                 ((unsigned int) AT91C_PA1_MOSI    ) |
2624                 ((unsigned int) AT91C_PA5_NPCS2   ) |
2625                 ((unsigned int) AT91C_PA6_NPCS3   ) |
2626                 ((unsigned int) AT91C_PA0_MISO    ) |
2627                 ((unsigned int) AT91C_PA2_SPCK    ), // Peripheral A
2628                 0); // Peripheral B
2629 }
2630
2631 //*----------------------------------------------------------------------------
2632 //* \fn    AT91F_TC5_CfgPMC
2633 //* \brief Enable Peripheral clock in PMC for  TC5
2634 //*----------------------------------------------------------------------------
2635 static inline void AT91F_TC5_CfgPMC (void)
2636 {
2637         AT91F_PMC_EnablePeriphClock(
2638                 AT91C_BASE_PMC, // PIO controller base address
2639                 ((unsigned int) 1 << AT91C_ID_TC5));
2640 }
2641
2642 //*----------------------------------------------------------------------------
2643 //* \fn    AT91F_TC4_CfgPMC
2644 //* \brief Enable Peripheral clock in PMC for  TC4
2645 //*----------------------------------------------------------------------------
2646 static inline void AT91F_TC4_CfgPMC (void)
2647 {
2648         AT91F_PMC_EnablePeriphClock(
2649                 AT91C_BASE_PMC, // PIO controller base address
2650                 ((unsigned int) 1 << AT91C_ID_TC4));
2651 }
2652
2653 //*----------------------------------------------------------------------------
2654 //* \fn    AT91F_TC3_CfgPMC
2655 //* \brief Enable Peripheral clock in PMC for  TC3
2656 //*----------------------------------------------------------------------------
2657 static inline void AT91F_TC3_CfgPMC (void)
2658 {
2659         AT91F_PMC_EnablePeriphClock(
2660                 AT91C_BASE_PMC, // PIO controller base address
2661                 ((unsigned int) 1 << AT91C_ID_TC3));
2662 }
2663
2664 //*----------------------------------------------------------------------------
2665 //* \fn    AT91F_TC2_CfgPMC
2666 //* \brief Enable Peripheral clock in PMC for  TC2
2667 //*----------------------------------------------------------------------------
2668 static inline void AT91F_TC2_CfgPMC (void)
2669 {
2670         AT91F_PMC_EnablePeriphClock(
2671                 AT91C_BASE_PMC, // PIO controller base address
2672                 ((unsigned int) 1 << AT91C_ID_TC2));
2673 }
2674
2675 //*----------------------------------------------------------------------------
2676 //* \fn    AT91F_TC1_CfgPMC
2677 //* \brief Enable Peripheral clock in PMC for  TC1
2678 //*----------------------------------------------------------------------------
2679 static inline void AT91F_TC1_CfgPMC (void)
2680 {
2681         AT91F_PMC_EnablePeriphClock(
2682                 AT91C_BASE_PMC, // PIO controller base address
2683                 ((unsigned int) 1 << AT91C_ID_TC1));
2684 }
2685
2686 //*----------------------------------------------------------------------------
2687 //* \fn    AT91F_TC0_CfgPMC
2688 //* \brief Enable Peripheral clock in PMC for  TC0
2689 //*----------------------------------------------------------------------------
2690 static inline void AT91F_TC0_CfgPMC (void)
2691 {
2692         AT91F_PMC_EnablePeriphClock(
2693                 AT91C_BASE_PMC, // PIO controller base address
2694                 ((unsigned int) 1 << AT91C_ID_TC0));
2695 }
2696
2697 //*----------------------------------------------------------------------------
2698 //* \fn    AT91F_SMC2_CfgPIO
2699 //* \brief Configure PIO controllers to drive SMC2 signals
2700 //*----------------------------------------------------------------------------
2701 static inline void AT91F_SMC2_CfgPIO (void)
2702 {
2703         // Configure PIO controllers to periph mode
2704         AT91F_PIO_CfgPeriph(
2705                 AT91C_BASE_PIOC, // PIO controller base address
2706                 ((unsigned int) AT91C_PC10_NCS4_CFCS) |
2707                 ((unsigned int) AT91C_PC9_A25_CFRNW) |
2708                 ((unsigned int) AT91C_PC12_NCS6_CFCE2) |
2709                 ((unsigned int) AT91C_PC11_NCS5_CFCE1), // Peripheral A
2710                 0); // Peripheral B
2711 }
2712
2713 //*----------------------------------------------------------------------------
2714 //* \fn    AT91F_PMC_CfgPMC
2715 //* \brief Enable Peripheral clock in PMC for  PMC
2716 //*----------------------------------------------------------------------------
2717 static inline void AT91F_PMC_CfgPMC (void)
2718 {
2719         AT91F_PMC_EnablePeriphClock(
2720                 AT91C_BASE_PMC, // PIO controller base address
2721                 ((unsigned int) 1 << AT91C_ID_SYS));
2722 }
2723
2724 //*----------------------------------------------------------------------------
2725 //* \fn    AT91F_PMC_CfgPIO
2726 //* \brief Configure PIO controllers to drive PMC signals
2727 //*----------------------------------------------------------------------------
2728 static inline void AT91F_PMC_CfgPIO (void)
2729 {
2730         // Configure PIO controllers to periph mode
2731         AT91F_PIO_CfgPeriph(
2732                 AT91C_BASE_PIOA, // PIO controller base address
2733                 0, // Peripheral A
2734                 ((unsigned int) AT91C_PA24_PCK1    )); // Peripheral B
2735         // Configure PIO controllers to periph mode
2736         AT91F_PIO_CfgPeriph(
2737                 AT91C_BASE_PIOB, // PIO controller base address
2738                 ((unsigned int) AT91C_PB27_PCK0    ), // Peripheral A
2739                 0); // Peripheral B
2740 }
2741
2742 //*----------------------------------------------------------------------------
2743 //* \fn    AT91F_PIOD_CfgPMC
2744 //* \brief Enable Peripheral clock in PMC for  PIOD
2745 //*----------------------------------------------------------------------------
2746 static inline void AT91F_PIOD_CfgPMC (void)
2747 {
2748         AT91F_PMC_EnablePeriphClock(
2749                 AT91C_BASE_PMC, // PIO controller base address
2750                 ((unsigned int) 1 << AT91C_ID_PIOD));
2751 }
2752
2753 //*----------------------------------------------------------------------------
2754 //* \fn    AT91F_PIOC_CfgPMC
2755 //* \brief Enable Peripheral clock in PMC for  PIOC
2756 //*----------------------------------------------------------------------------
2757 static inline void AT91F_PIOC_CfgPMC (void)
2758 {
2759         AT91F_PMC_EnablePeriphClock(
2760                 AT91C_BASE_PMC, // PIO controller base address
2761                 ((unsigned int) 1 << AT91C_ID_PIOC));
2762 }
2763
2764 //*----------------------------------------------------------------------------
2765 //* \fn    AT91F_PIOB_CfgPMC
2766 //* \brief Enable Peripheral clock in PMC for  PIOB
2767 //*----------------------------------------------------------------------------
2768 static inline void AT91F_PIOB_CfgPMC (void)
2769 {
2770         AT91F_PMC_EnablePeriphClock(
2771                 AT91C_BASE_PMC, // PIO controller base address
2772                 ((unsigned int) 1 << AT91C_ID_PIOB));
2773 }
2774
2775 //*----------------------------------------------------------------------------
2776 //* \fn    AT91F_PIOA_CfgPMC
2777 //* \brief Enable Peripheral clock in PMC for  PIOA
2778 //*----------------------------------------------------------------------------
2779 static inline void AT91F_PIOA_CfgPMC (void)
2780 {
2781         AT91F_PMC_EnablePeriphClock(
2782                 AT91C_BASE_PMC, // PIO controller base address
2783                 ((unsigned int) 1 << AT91C_ID_PIOA));
2784 }
2785
2786 //*----------------------------------------------------------------------------
2787 //* \fn    AT91F_TWI_CfgPMC
2788 //* \brief Enable Peripheral clock in PMC for  TWI
2789 //*----------------------------------------------------------------------------
2790 static inline void AT91F_TWI_CfgPMC (void)
2791 {
2792         AT91F_PMC_EnablePeriphClock(
2793                 AT91C_BASE_PMC, // PIO controller base address
2794                 ((unsigned int) 1 << AT91C_ID_TWI));
2795 }
2796
2797 //*----------------------------------------------------------------------------
2798 //* \fn    AT91F_TWI_CfgPIO
2799 //* \brief Configure PIO controllers to drive TWI signals
2800 //*----------------------------------------------------------------------------
2801 static inline void AT91F_TWI_CfgPIO (void)
2802 {
2803         // Configure PIO controllers to periph mode
2804         AT91F_PIO_CfgPeriph(
2805                 AT91C_BASE_PIOA, // PIO controller base address
2806                 ((unsigned int) AT91C_PA25_TWD     ) |
2807                 ((unsigned int) AT91C_PA26_TWCK    ), // Peripheral A
2808                 0); // Peripheral B
2809 }
2810
2811 //*----------------------------------------------------------------------------
2812 //* \fn    AT91F_US3_CfgPMC
2813 //* \brief Enable Peripheral clock in PMC for  US3
2814 //*----------------------------------------------------------------------------
2815 static inline void AT91F_US3_CfgPMC (void)
2816 {
2817         AT91F_PMC_EnablePeriphClock(
2818                 AT91C_BASE_PMC, // PIO controller base address
2819                 ((unsigned int) 1 << AT91C_ID_US3));
2820 }
2821
2822 //*----------------------------------------------------------------------------
2823 //* \fn    AT91F_US2_CfgPMC
2824 //* \brief Enable Peripheral clock in PMC for  US2
2825 //*----------------------------------------------------------------------------
2826 static inline void AT91F_US2_CfgPMC (void)
2827 {
2828         AT91F_PMC_EnablePeriphClock(
2829                 AT91C_BASE_PMC, // PIO controller base address
2830                 ((unsigned int) 1 << AT91C_ID_US2));
2831 }
2832
2833 //*----------------------------------------------------------------------------
2834 //* \fn    AT91F_US2_CfgPIO
2835 //* \brief Configure PIO controllers to drive US2 signals
2836 //*----------------------------------------------------------------------------
2837 static inline void AT91F_US2_CfgPIO (void)
2838 {
2839         // Configure PIO controllers to periph mode
2840         AT91F_PIO_CfgPeriph(
2841                 AT91C_BASE_PIOA, // PIO controller base address
2842                 ((unsigned int) AT91C_PA23_TXD2    ) |
2843                 ((unsigned int) AT91C_PA22_RXD2    ), // Peripheral A
2844                 0); // Peripheral B
2845 }
2846
2847 //*----------------------------------------------------------------------------
2848 //* \fn    AT91F_US1_CfgPMC
2849 //* \brief Enable Peripheral clock in PMC for  US1
2850 //*----------------------------------------------------------------------------
2851 static inline void AT91F_US1_CfgPMC (void)
2852 {
2853         AT91F_PMC_EnablePeriphClock(
2854                 AT91C_BASE_PMC, // PIO controller base address
2855                 ((unsigned int) 1 << AT91C_ID_US1));
2856 }
2857
2858 //*----------------------------------------------------------------------------
2859 //* \fn    AT91F_US1_CfgPIO
2860 //* \brief Configure PIO controllers to drive US1 signals
2861 //*----------------------------------------------------------------------------
2862 static inline void AT91F_US1_CfgPIO (void)
2863 {
2864         // Configure PIO controllers to periph mode
2865         AT91F_PIO_CfgPeriph(
2866                 AT91C_BASE_PIOB, // PIO controller base address
2867                 ((unsigned int) AT91C_PB21_RXD1    ) |
2868                 ((unsigned int) AT91C_PB26_RTS1    ) |
2869                 ((unsigned int) AT91C_PB25_DSR1    ) |
2870                 ((unsigned int) AT91C_PB24_CTS1    ) |
2871                 ((unsigned int) AT91C_PB19_DTR1    ) |
2872                 ((unsigned int) AT91C_PB23_DCD1    ) |
2873                 ((unsigned int) AT91C_PB20_TXD1    ) |
2874                 ((unsigned int) AT91C_PB18_RI1     ), // Peripheral A
2875                 0); // Peripheral B
2876 }
2877
2878 //*----------------------------------------------------------------------------
2879 //* \fn    AT91F_US0_CfgPMC
2880 //* \brief Enable Peripheral clock in PMC for  US0
2881 //*----------------------------------------------------------------------------
2882 static inline void AT91F_US0_CfgPMC (void)
2883 {
2884         AT91F_PMC_EnablePeriphClock(
2885                 AT91C_BASE_PMC, // PIO controller base address
2886                 ((unsigned int) 1 << AT91C_ID_US0));
2887 }
2888
2889 //*----------------------------------------------------------------------------
2890 //* \fn    AT91F_US0_CfgPIO
2891 //* \brief Configure PIO controllers to drive US0 signals
2892 //*----------------------------------------------------------------------------
2893 static inline void AT91F_US0_CfgPIO (void)
2894 {
2895         // Configure PIO controllers to periph mode
2896         AT91F_PIO_CfgPeriph(
2897                 AT91C_BASE_PIOA, // PIO controller base address
2898                 ((unsigned int) AT91C_PA17_TXD0    ) |
2899                 ((unsigned int) AT91C_PA21_RTS0    ) |
2900                 ((unsigned int) AT91C_PA19_SCK0    ) |
2901                 ((unsigned int) AT91C_PA20_CTS0    ), // Peripheral A
2902                 0); // Peripheral B
2903 }
2904
2905 //*----------------------------------------------------------------------------
2906 //* \fn    AT91F_MCI_CfgPMC
2907 //* \brief Enable Peripheral clock in PMC for  MCI
2908 //*----------------------------------------------------------------------------
2909 static inline void AT91F_MCI_CfgPMC (void)
2910 {
2911         AT91F_PMC_EnablePeriphClock(
2912                 AT91C_BASE_PMC, // PIO controller base address
2913                 ((unsigned int) 1 << AT91C_ID_MCI));
2914 }
2915
2916 //*----------------------------------------------------------------------------
2917 //* \fn    AT91F_MCI_CfgPIO
2918 //* \brief Configure PIO controllers to drive MCI signals
2919 //*----------------------------------------------------------------------------
2920 static inline void AT91F_MCI_CfgPIO (void)
2921 {
2922         // Configure PIO controllers to periph mode
2923         AT91F_PIO_CfgPeriph(
2924                 AT91C_BASE_PIOA, // PIO controller base address
2925                 ((unsigned int) AT91C_PA28_MCCDA   ) |
2926                 ((unsigned int) AT91C_PA29_MCDA0   ) |
2927                 ((unsigned int) AT91C_PA27_MCCK    ), // Peripheral A
2928                 0); // Peripheral B
2929         // Configure PIO controllers to periph mode
2930         AT91F_PIO_CfgPeriph(
2931                 AT91C_BASE_PIOB, // PIO controller base address
2932                 0, // Peripheral A
2933                 ((unsigned int) AT91C_PB5_MCDA3   ) |
2934                 ((unsigned int) AT91C_PB3_MCDA1   ) |
2935                 ((unsigned int) AT91C_PB4_MCDA2   )); // Peripheral B
2936 }
2937
2938 //*----------------------------------------------------------------------------
2939 //* \fn    AT91F_AIC_CfgPMC
2940 //* \brief Enable Peripheral clock in PMC for  AIC
2941 //*----------------------------------------------------------------------------
2942 static inline void AT91F_AIC_CfgPMC (void)
2943 {
2944         AT91F_PMC_EnablePeriphClock(
2945                 AT91C_BASE_PMC, // PIO controller base address
2946                 ((unsigned int) 1 << AT91C_ID_IRQ4) |
2947                 ((unsigned int) 1 << AT91C_ID_FIQ) |
2948                 ((unsigned int) 1 << AT91C_ID_IRQ5) |
2949                 ((unsigned int) 1 << AT91C_ID_IRQ6) |
2950                 ((unsigned int) 1 << AT91C_ID_IRQ0) |
2951                 ((unsigned int) 1 << AT91C_ID_IRQ1) |
2952                 ((unsigned int) 1 << AT91C_ID_IRQ2) |
2953                 ((unsigned int) 1 << AT91C_ID_IRQ3));
2954 }
2955
2956 //*----------------------------------------------------------------------------
2957 //* \fn    AT91F_UDP_CfgPMC
2958 //* \brief Enable Peripheral clock in PMC for  UDP
2959 //*----------------------------------------------------------------------------
2960 static inline void AT91F_UDP_CfgPMC (void)
2961 {
2962         AT91F_PMC_EnablePeriphClock(
2963                 AT91C_BASE_PMC, // PIO controller base address
2964                 ((unsigned int) 1 << AT91C_ID_UDP));
2965 }
2966
2967 //*----------------------------------------------------------------------------
2968 //* \fn    AT91F_ST_CfgPMC
2969 //* \brief Enable Peripheral clock in PMC for  ST
2970 //*----------------------------------------------------------------------------
2971 static inline void AT91F_ST_CfgPMC (void)
2972 {
2973         AT91F_PMC_EnablePeriphClock(
2974                 AT91C_BASE_PMC, // PIO controller base address
2975                 ((unsigned int) 1 << AT91C_ID_SYS));
2976 }
2977
2978 #endif // lib_AT91RM9200_H