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)
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 //*----------------------------------------------------------------------------
30 #ifndef lib_AT91RM9200_H
31 #define lib_AT91RM9200_H
33 /* *****************************************************************************
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
45 pPDC
->PDC_RNPR
= (unsigned int) address
;
46 pPDC
->PDC_RNCR
= bytes
;
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
58 pPDC
->PDC_TNPR
= (unsigned int) address
;
59 pPDC
->PDC_TNCR
= bytes
;
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
71 pPDC
->PDC_RPR
= (unsigned int) address
;
72 pPDC
->PDC_RCR
= bytes
;
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
84 pPDC
->PDC_TPR
= (unsigned int) address
;
85 pPDC
->PDC_TCR
= bytes
;
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
95 pPDC
->PDC_PTCR
= AT91C_PDC_TXTEN
;
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
105 pPDC
->PDC_PTCR
= AT91C_PDC_RXTEN
;
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
115 pPDC
->PDC_PTCR
= AT91C_PDC_TXTDIS
;
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
125 pPDC
->PDC_PTCR
= AT91C_PDC_RXTDIS
;
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
135 return !(pPDC
->PDC_TCR
);
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
145 return !(pPDC
->PDC_TNCR
);
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
155 return !(pPDC
->PDC_RCR
);
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
165 return !(pPDC
->PDC_RNCR
);
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
175 //* Disable the RX and TX PDC transfer requests
176 AT91F_PDC_DisableRx(pPDC
);
177 AT91F_PDC_DisableTx(pPDC
);
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);
185 //* Enable the RX and TX PDC transfer requests
186 AT91F_PDC_EnableRx(pPDC
);
187 AT91F_PDC_EnableTx(pPDC
);
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
197 //* Disable the RX and TX PDC transfer requests
198 AT91F_PDC_DisableRx(pPDC
);
199 AT91F_PDC_DisableTx(pPDC
);
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);
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(
216 unsigned int szBuffer
,
218 unsigned int szNextBuffer
)
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
);
226 else if (AT91F_PDC_IsNextTxEmpty(pPDC
)) {
227 //* Only one buffer can be initialized
228 AT91F_PDC_SetNextTx(pPDC
, pBuffer
, szBuffer
);
232 //* All buffer are in use...
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 (
244 unsigned int szBuffer
,
246 unsigned int szNextBuffer
)
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
);
254 else if (AT91F_PDC_IsNextRxEmpty(pPDC
)) {
255 //* Only one buffer can be initialized
256 AT91F_PDC_SetNextRx(pPDC
, pBuffer
, szBuffer
);
260 //* All buffer are in use...
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
275 pDbgu
->DBGU_IER
= flag
;
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
286 pDbgu
->DBGU_IDR
= flag
;
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
296 return pDbgu
->DBGU_IMR
;
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
307 return (AT91F_DBGU_GetInterruptMaskStatus(pDbgu
) & flag
);
310 /* *****************************************************************************
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
321 pRtc
->RTC_IER
= flag
;
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
332 pRtc
->RTC_IDR
= flag
;
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
342 return pRtc
->RTC_IMR
;
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
353 return (AT91F_RTC_GetInterruptMaskStatus(pRtc
) & flag
);
356 /* *****************************************************************************
358 ***************************************************************************** */
359 //* Define the standard I2S mode configuration
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)( +\
366 AT91C_SSC_CKO_CONTINOUS +\
367 AT91C_SSC_CKG_NONE +\
368 AT91C_SSC_START_FALL_RF +\
370 ((1<<16) & AT91C_SSC_STTDLY) +\
371 ((((nb_bit_by_slot*nb_slot_by_frame)/2)-1) <<24))
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) +\
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)
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
394 unsigned int baud_value
;
395 //* Define the baud rate divisor register
400 baud_value
= (unsigned int) (mainClock
* 10)/(2*speed
);
401 if ((baud_value
% 10) >= 5)
402 baud_value
= (baud_value
/ 10) + 1;
407 pSSC
->SSC_CMR
= baud_value
;
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
423 //* Disable interrupts
424 pSSC
->SSC_IDR
= (unsigned int) -1;
426 //* Reset receiver and transmitter
427 pSSC
->SSC_CR
= AT91C_SSC_SWRST
| AT91C_SSC_RXDIS
| AT91C_SSC_TXDIS
;
429 //* Define the Clock Mode Register
430 AT91F_SSC_SetBaudrate(pSSC
, syst_clock
, baud_rate
);
432 //* Write the Receive Clock Mode Register
433 pSSC
->SSC_RCMR
= clock_rx
;
435 //* Write the Transmit Clock Mode Register
436 pSSC
->SSC_TCMR
= clock_tx
;
438 //* Write the Receive Frame Mode Register
439 pSSC
->SSC_RFMR
= mode_rx
;
441 //* Write the Transmit Frame Mode Register
442 pSSC
->SSC_TFMR
= mode_tx
;
444 //* Clear Transmit and Receive Counters
445 AT91F_PDC_Open((AT91PS_PDC
) &(pSSC
->SSC_RPR
));
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
458 pSSC
->SSC_CR
= AT91C_SSC_RXEN
;
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
469 pSSC
->SSC_CR
= AT91C_SSC_RXDIS
;
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
479 //* Enable transmitter
480 pSSC
->SSC_CR
= AT91C_SSC_TXEN
;
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
490 //* Disable transmitter
491 pSSC
->SSC_CR
= AT91C_SSC_TXDIS
;
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
502 //* Write to the IER register
503 pSSC
->SSC_IER
= flag
;
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
514 //* Write to the IDR register
515 pSSC
->SSC_IDR
= flag
;
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 (
525 unsigned int szBuffer
,
527 unsigned int szNextBuffer
)
529 return AT91F_PDC_ReceiveFrame(
530 (AT91PS_PDC
) &(pSSC
->SSC_RPR
),
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(
544 unsigned int szBuffer
,
546 unsigned int szNextBuffer
)
548 return AT91F_PDC_SendFrame(
549 (AT91PS_PDC
) &(pSSC
->SSC_RPR
),
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
563 return pSsc
->SSC_IMR
;
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
574 return (AT91F_SSC_GetInterruptMaskStatus(pSsc
) & flag
);
577 /* *****************************************************************************
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
587 /* NOT DEFINED AT THIS MOMENT */
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
599 //* Write to the CSR register
600 *(AT91C_SPI_CSR
+ cs
) = val
;
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
611 //* Write to the IER register
612 pSPI
->SPI_IER
= flag
;
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
623 //* Write to the IDR register
624 pSPI
->SPI_IDR
= flag
;
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
635 //* Write to the CR register
636 pSPI
->SPI_CR
= AT91C_SPI_SWRST
;
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
647 //* Write to the CR register
648 pSPI
->SPI_CR
= AT91C_SPI_SPIEN
;
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
659 //* Write to the CR register
660 pSPI
->SPI_CR
= AT91C_SPI_SPIDIS
;
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
671 //* Write to the MR register
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
683 //* Write to the MR register
684 pSPI
->SPI_MR
&= 0xFFF0FFFF;
685 pSPI
->SPI_MR
|= ( (PCS_Device
<<16) & AT91C_SPI_PCS
);
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 (
695 unsigned int szBuffer
,
697 unsigned int szNextBuffer
)
699 return AT91F_PDC_ReceiveFrame(
700 (AT91PS_PDC
) &(pSPI
->SPI_RPR
),
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(
714 unsigned int szBuffer
,
716 unsigned int szNextBuffer
)
718 return AT91F_PDC_SendFrame(
719 (AT91PS_PDC
) &(pSPI
->SPI_RPR
),
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
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 ;
739 //* Reset the SPI mode
742 //* Disable all interrupts
743 pSPI
->SPI_IDR
= 0xFFFFFFFF ;
745 //* Abort the Peripheral Data Transfers
746 AT91F_PDC_Close((AT91PS_PDC
) &(pSPI
->SPI_RPR
));
748 //* Disable receiver and transmitter and stop any activity immediately
749 pSPI
->SPI_CR
= AT91C_SPI_SPIDIS
;
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 (
758 unsigned int character
,
759 unsigned int cs_number
)
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);
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
)
773 return((pSPI
->SPI_RDR
) & 0xFFFF);
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
783 return pSpi
->SPI_IMR
;
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
794 return (AT91F_SPI_GetInterruptMaskStatus(pSpi
) & flag
);
797 /* *****************************************************************************
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
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
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
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
840 return (AT91F_TC_GetInterruptMaskStatus(pTc
) & flag
);
843 /* *****************************************************************************
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
854 return ((pCKGR
->CKGR_MCFR
& AT91C_CKGR_MAINF
) * slowClock
) >> 4;
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
866 unsigned int reg
= pPMC
->PMC_MCKR
;
867 unsigned int prescaler
= (1 << ((reg
& AT91C_PMC_PRES
) >> 2));
868 unsigned int pllDivider
, pllMultiplier
;
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
;
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
901 return AT91F_PMC_GetProcessorClock(pPMC
, pCKGR
, slowClock
) /
902 (((pPMC
->PMC_MCKR
& AT91C_PMC_MDIV
) >> 8)+1);
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
913 pPMC
->PMC_PCER
= periphIds
;
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
924 pPMC
->PMC_PCDR
= periphIds
;
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
937 pPMC
->PMC_PCKR
[pck
] = ccs
| pres
;
938 pPMC
->PMC_SCER
= (1 << pck
) << 8;
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
949 pPMC
->PMC_SCDR
= (1 << pck
) << 8;
952 /* *****************************************************************************
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
965 pPio
->PIO_ASR
= periphAEnable
;
966 pPio
->PIO_BSR
= periphBEnable
;
967 pPio
->PIO_PDR
= (periphAEnable
| periphBEnable
); // Set in Periph mode
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
978 pPio
->PIO_PER
= pioEnable
; // Set in PIO mode
979 pPio
->PIO_OER
= pioEnable
; // Configure in Output
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
991 pPio
->PIO_ODR
= inputEnable
;
992 pPio
->PIO_PER
= inputEnable
;
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
1003 // Configure the multi-drive option
1004 pPio
->PIO_MDDR
= ~multiDrvEnable
;
1005 pPio
->PIO_MDER
= multiDrvEnable
;
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
1016 // Connect or not Pullup
1017 pPio
->PIO_PPUDR
= ~pullupEnable
;
1018 pPio
->PIO_PPUER
= pullupEnable
;
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
1030 // Configure the Direct Drive
1031 pPio
->PIO_OWDR
= ~directDrive
;
1032 pPio
->PIO_OWER
= directDrive
;
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
1044 // Configure the Direct Drive
1045 pPio
->PIO_IFDR
= ~inputFilter
;
1046 pPio
->PIO_IFER
= inputFilter
;
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
1056 return pPio
->PIO_PDSR
;
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
1067 return (AT91F_PIO_GetInput(pPio
) & flag
);
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
1079 pPio
->PIO_SODR
= flag
;
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
1090 pPio
->PIO_CODR
= flag
;
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
1101 pPio
->PIO_ODSR
= flag
;
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
1112 pPio
->PIO_PER
= flag
;
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
1123 pPio
->PIO_PDR
= flag
;
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
1133 return pPio
->PIO_PSR
;
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
1144 return (AT91F_PIO_GetStatus(pPio
) & flag
);
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
1155 pPio
->PIO_OER
= flag
;
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
1166 pPio
->PIO_ODR
= flag
;
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
1176 return pPio
->PIO_OSR
;
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
1187 return (AT91F_PIO_GetOutputStatus(pPio
) & flag
);
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
1198 pPio
->PIO_IFER
= flag
;
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
1209 pPio
->PIO_IFDR
= flag
;
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
1219 return pPio
->PIO_IFSR
;
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
1230 return (AT91F_PIO_GetInputFilterStatus(pPio
) & flag
);
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
1240 return pPio
->PIO_ODSR
;
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
1251 pPio
->PIO_IER
= flag
;
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
1262 pPio
->PIO_IDR
= flag
;
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
1272 return pPio
->PIO_IMR
;
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
1282 return pPio
->PIO_ISR
;
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
1293 return (AT91F_PIO_GetInterruptMaskStatus(pPio
) & flag
);
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
1304 return (AT91F_PIO_GetInterruptStatus(pPio
) & flag
);
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
1315 pPio
->PIO_MDER
= flag
;
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
1326 pPio
->PIO_MDDR
= flag
;
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
1336 return pPio
->PIO_MDSR
;
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
1347 return (AT91F_PIO_GetMultiDriverStatus(pPio
) & flag
);
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
1358 pPio
->PIO_ASR
= flag
;
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
1369 pPio
->PIO_BSR
= flag
;
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
1379 return pPio
->PIO_ABSR
;
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
1390 return (AT91F_PIO_Get_AB_RegisterStatus(pPio
) & flag
);
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
1401 pPio
->PIO_OWER
= flag
;
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
1412 pPio
->PIO_OWDR
= flag
;
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
1422 return pPio
->PIO_OWSR
;
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
1433 return (AT91F_PIO_GetOutputWriteStatus(pPio
) & flag
);
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
1443 return pPio
->PIO_PPUSR
;
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
1454 return (AT91F_PIO_GetOutputDataStatus(pPio
) & flag
);
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
1465 return (~AT91F_PIO_GetCfgPullup(pPio
) & flag
);
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
1479 //* Write to the IER register
1480 pTWI
->TWI_IER
= flag
;
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
1491 //* Write to the IDR register
1492 pTWI
->TWI_IDR
= flag
;
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
1501 //* Disable interrupts
1502 pTWI
->TWI_IDR
= (unsigned int) -1;
1504 //* Reset peripheral
1505 pTWI
->TWI_CR
= AT91C_TWI_SWRST
;
1508 pTWI
->TWI_CR
= AT91C_TWI_MSEN
| AT91C_TWI_SVDIS
;
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
1519 return pTwi
->TWI_IMR
;
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
1530 return (AT91F_TWI_GetInterruptMaskStatus(pTwi
) & flag
);
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 )
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 + \
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 )
1562 #define AT91C_US_SCK_USED (AT91C_US_CKLO | AT91C_US_CLKS_EXT)
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 + \
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 )
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
1588 unsigned int baud_value
= ((main_clock
*10)/(baud_rate
* 16));
1589 if ((baud_value
% 10) >= 5)
1590 baud_value
= (baud_value
/ 10) + 1;
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
1605 //* Define the baud rate divisor register
1606 pUSART
->US_BRGR
= AT91F_US_Baudrate(mainClock
, speed
);
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
1617 //* Write the Timeguard Register
1618 pUSART
->US_TTGR
= timeguard
;
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
1629 //* Write to the IER register
1630 pUSART
->US_IER
= flag
;
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
1641 //* Write to the IER register
1642 pUSART
->US_IDR
= flag
;
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
1656 //* Disable interrupts
1657 pUSART
->US_IDR
= (unsigned int) -1;
1659 //* Reset receiver and transmitter
1660 pUSART
->US_CR
= AT91C_US_RSTRX
| AT91C_US_RSTTX
| AT91C_US_RXDIS
| AT91C_US_TXDIS
;
1662 //* Define the baud rate divisor register
1663 AT91F_US_SetBaudrate(pUSART
, mainClock
, baudRate
);
1665 //* Write the Timeguard Register
1666 AT91F_US_SetTimeguard(pUSART
, timeguard
);
1668 //* Clear Transmit and Receive Counters
1669 AT91F_PDC_Open((AT91PS_PDC
) &(pUSART
->US_RPR
));
1671 //* Define the USART mode
1672 pUSART
->US_MR
= mode
;
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
1684 pUSART
->US_CR
= AT91C_US_RXEN
;
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
1694 //* Enable transmitter
1695 pUSART
->US_CR
= AT91C_US_TXEN
;
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
1706 pUSART
->US_CR
= AT91C_US_RSTRX
;
1707 //* Re-Enable receiver
1708 pUSART
->US_CR
= AT91C_US_RXEN
;
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
1718 //* Reset transmitter
1719 pUSART
->US_CR
= AT91C_US_RSTTX
;
1720 //* Enable transmitter
1721 pUSART
->US_CR
= AT91C_US_TXEN
;
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
1731 //* Disable receiver
1732 pUSART
->US_CR
= AT91C_US_RXDIS
;
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
1742 //* Disable transmitter
1743 pUSART
->US_CR
= AT91C_US_TXDIS
;
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
1753 //* Reset the baud rate divisor register
1754 pUSART
->US_BRGR
= 0 ;
1756 //* Reset the USART mode
1759 //* Reset the Timeguard Register
1760 pUSART
->US_TTGR
= 0;
1762 //* Disable all interrupts
1763 pUSART
->US_IDR
= 0xFFFFFFFF ;
1765 //* Abort the Peripheral Data Transfers
1766 AT91F_PDC_Close((AT91PS_PDC
) &(pUSART
->US_RPR
));
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
;
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
1779 return (pUSART
->US_CSR
& AT91C_US_TXRDY
);
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
1789 return (pUSART
->US_CSR
& AT91C_US_RXRDY
);
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
1799 return (pUSART
->US_CSR
&
1800 (AT91C_US_OVRE
| // Overrun error
1801 AT91C_US_FRAME
| // Framing error
1802 AT91C_US_PARE
)); // Parity error
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
,
1813 pUSART
->US_THR
= (character
& 0x1FF);
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
)
1823 return((pUSART
->US_RHR
) & 0x1FF);
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
,
1833 unsigned int szBuffer
,
1835 unsigned int szNextBuffer
)
1837 return AT91F_PDC_SendFrame(
1838 (AT91PS_PDC
) &(pUSART
->US_RPR
),
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
,
1852 unsigned int szBuffer
,
1854 unsigned int szNextBuffer
)
1856 return AT91F_PDC_ReceiveFrame(
1857 (AT91PS_PDC
) &(pUSART
->US_RPR
),
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
,
1873 pUSART
->US_IF
= value
;
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 |\
1882 (AT91C_MCI_PWSDIV<<1) |\
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)
1888 //* Classic MCI SDCard Register Configuration with 1-bit data bus on slot A
1889 #define AT91C_MCI_MMC_SLOTA (AT91C_MCI_SCDSEL & 0x0)
1891 //* Classic MCI SDCard Register Configuration with 1-bit data bus on slot B
1892 #define AT91C_MCI_MMC_SLOTB (AT91C_MCI_SCDSEL)
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 )
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)
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
1913 pMCI
->MCI_CR
= AT91C_MCI_MCIEN
| AT91C_MCI_PWSEN
;
1915 //* Disable all the interrupts
1916 pMCI
->MCI_IDR
= 0xFFFFFFFF;
1918 //* Set the Data Timeout Register
1919 pMCI
->MCI_DTOR
= DTOR_register
;
1921 //* Set the Mode Register
1922 pMCI
->MCI_MR
= MR_register
;
1924 //* Set the SDCard Register
1925 pMCI
->MCI_SDCR
= SDCR_register
;
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
1936 //* Write to the IER register
1937 pMCI
->MCI_IER
= flag
;
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
1948 //* Write to the IDR register
1949 pMCI
->MCI_IDR
= flag
;
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
1960 pMCI
->MCI_CR
= AT91C_MCI_MCIEN
;
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
1971 pMCI
->MCI_CR
= AT91C_MCI_MCIDIS
;
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
1982 //* Configure the MCI MR
1983 pMCI
->MCI_MR
= mode_register
;
1985 /* *****************************************************************************
1986 SOFTWARE API FOR AIC
1987 ***************************************************************************** */
1988 #define AT91C_AIC_BRANCH_OPCODE ((void (*) ()) 0xE51FFF20) // ldr, pc, [pc, #-&F20]
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
2001 unsigned int oldHandler
;
2004 oldHandler
= pAic
->AIC_SVR
[irq_id
];
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
;
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
2027 //* Enable the interrupt on the interrupt controller
2028 pAic
->AIC_IECR
= 0x1 << irq_id
;
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
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
;
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
2054 //* Clear the interrupt on the Interrupt Controller ( if one is pending )
2055 pAic
->AIC_ICCR
= (0x1 << irq_id
);
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
2065 pAic
->AIC_EOICR
= pAic
->AIC_EOICR
;
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
2076 unsigned int oldVector
= *pVector
;
2078 if ((unsigned int) Handler
== (unsigned int) AT91C_AIC_BRANCH_OPCODE
)
2079 *pVector
= (unsigned int) AT91C_AIC_BRANCH_OPCODE
;
2081 *pVector
= (((((unsigned int) Handler
) - ((unsigned int) pVector
) - 0x8) >> 2) & 0x00FFFFFF) | 0xEA000000;
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
2094 pAic
->AIC_ISCR
= (0x1 << irq_id
) ;
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
2105 return (pAic
->AIC_ISR
& (0x1 << irq_id
));
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
2116 return (pAic
->AIC_IPR
& (0x1 << irq_id
));
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
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
);
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
);
2144 pAic
->AIC_SPU
= (unsigned int) SpuriousHandler
;
2145 pAic
->AIC_DCR
= protectMode
;
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
2158 //* Write to the IER register
2159 pUDP
->UDP_IER
= flag
;
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
2170 //* Write to the IDR register
2171 pUDP
->UDP_IDR
= flag
;
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
2182 pUDP
->UDP_FADDR
= (AT91C_UDP_FEN
| address
);
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
2193 pUDP
->UDP_GLBSTATE
|= flag
;
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
2204 pUDP
->UDP_GLBSTATE
&= ~(flag
);
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
2215 pUDP
->UDP_GLBSTATE
&= ~(AT91C_UDP_FADDEN
| AT91C_UDP_CONFG
);
2216 pUDP
->UDP_GLBSTATE
|= flag
;
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
2226 return (pUDP
->UDP_GLBSTATE
& (AT91C_UDP_FADDEN
| AT91C_UDP_CONFG
));
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
2237 pUDP
->UDP_RSTEP
= flag
;
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
2248 pUDP
->UDP_CSR
[endpoint
] |= AT91C_UDP_FORCESTALL
;
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
2260 pUDP
->UDP_FDR
[endpoint
] = value
;
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
2271 return pUDP
->UDP_FDR
[endpoint
];
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
2282 pUDP
->UDP_CSR
[endpoint
] |= AT91C_UDP_TXPKTRDY
;
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
2294 pUDP
->UDP_CSR
[endpoint
] &= ~(flag
);
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
2306 pUDP
->UDP_CSR
[endpoint
] |= flag
;
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
2317 return pUDP
->UDP_CSR
[endpoint
];
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
2327 return pUdp
->UDP_IMR
;
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
2338 return (AT91F_UDP_GetInterruptMaskStatus(pUdp
) & flag
);
2341 /* *****************************************************************************
2343 ***************************************************************************** */
2344 //*----------------------------------------------------------------------------
2345 //* \fn AT91F_ST_SetPeriodInterval
2346 //* \brief Set Periodic Interval Interrupt (period in ms)
2347 //*----------------------------------------------------------------------------
2348 static inline void AT91F_ST_SetPeriodInterval(
2350 unsigned int period
)
2352 volatile int status
;
2353 pSt
->ST_IDR
= AT91C_ST_PITS
; /* Interrupt disable Register */
2355 status
= pSt
->ST_SR
;
2356 pSt
->ST_PIMR
= period
<< 5; /* Period Interval Mode Register == timer interval = 1ms*/
2359 //*----------------------------------------------------------------------------
2360 //* \fn AT91F_ST_EnableIt
2361 //* \brief Enable system timer interrupt
2362 //*----------------------------------------------------------------------------
2363 static inline void AT91F_ST_EnableIt(
2370 //*----------------------------------------------------------------------------
2371 //* \fn AT91F_ST_DisableIt
2372 //* \brief Disable system timer interrupt
2373 //*----------------------------------------------------------------------------
2374 static inline void AT91F_ST_DisableIt(
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
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
2399 return (AT91F_ST_GetInterruptMaskStatus(pSt
) & flag
);
2401 //*----------------------------------------------------------------------------
2402 //* \fn AT91F_EBI_CfgPIO
2403 //* \brief Configure PIO controllers to drive EBI signals
2404 //*----------------------------------------------------------------------------
2405 static inline void AT91F_EBI_CfgPIO (void)
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
2415 //*----------------------------------------------------------------------------
2416 //* \fn AT91F_DBGU_CfgPMC
2417 //* \brief Enable Peripheral clock in PMC for DBGU
2418 //*----------------------------------------------------------------------------
2419 static inline void AT91F_DBGU_CfgPMC (void)
2421 AT91F_PMC_EnablePeriphClock(
2422 AT91C_BASE_PMC
, // PIO controller base address
2423 ((unsigned int) 1 << AT91C_ID_SYS
));
2426 //*----------------------------------------------------------------------------
2427 //* \fn AT91F_DBGU_CfgPIO
2428 //* \brief Configure PIO controllers to drive DBGU signals
2429 //*----------------------------------------------------------------------------
2430 static inline void AT91F_DBGU_CfgPIO (void)
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
2440 //*----------------------------------------------------------------------------
2441 //* \fn AT91F_SYS_CfgPMC
2442 //* \brief Enable Peripheral clock in PMC for SYS
2443 //*----------------------------------------------------------------------------
2444 static inline void AT91F_SYS_CfgPMC (void)
2446 AT91F_PMC_EnablePeriphClock(
2447 AT91C_BASE_PMC
, // PIO controller base address
2448 ((unsigned int) 1 << AT91C_ID_SYS
));
2451 //*----------------------------------------------------------------------------
2452 //* \fn AT91F_UHP_CfgPMC
2453 //* \brief Enable Peripheral clock in PMC for UHP
2454 //*----------------------------------------------------------------------------
2455 static inline void AT91F_UHP_CfgPMC (void)
2457 AT91F_PMC_EnablePeriphClock(
2458 AT91C_BASE_PMC
, // PIO controller base address
2459 ((unsigned int) 1 << AT91C_ID_UHP
));
2462 //*----------------------------------------------------------------------------
2463 //* \fn AT91F_SDRC_CfgPIO
2464 //* \brief Configure PIO controllers to drive SDRC signals
2465 //*----------------------------------------------------------------------------
2466 static inline void AT91F_SDRC_CfgPIO (void)
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
2490 //*----------------------------------------------------------------------------
2491 //* \fn AT91F_EMAC_CfgPMC
2492 //* \brief Enable Peripheral clock in PMC for EMAC
2493 //*----------------------------------------------------------------------------
2494 static inline void AT91F_EMAC_CfgPMC (void)
2496 AT91F_PMC_EnablePeriphClock(
2497 AT91C_BASE_PMC
, // PIO controller base address
2498 ((unsigned int) 1 << AT91C_ID_EMAC
));
2501 //*----------------------------------------------------------------------------
2502 //* \fn AT91F_EMAC_CfgPIO
2503 //* \brief Configure PIO controllers to drive EMAC signals
2504 //*----------------------------------------------------------------------------
2505 static inline void AT91F_EMAC_CfgPIO (void)
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
2523 //*----------------------------------------------------------------------------
2524 //* \fn AT91F_RTC_CfgPMC
2525 //* \brief Enable Peripheral clock in PMC for RTC
2526 //*----------------------------------------------------------------------------
2527 static inline void AT91F_RTC_CfgPMC (void)
2529 AT91F_PMC_EnablePeriphClock(
2530 AT91C_BASE_PMC
, // PIO controller base address
2531 ((unsigned int) 1 << AT91C_ID_SYS
));
2534 //*----------------------------------------------------------------------------
2535 //* \fn AT91F_SSC2_CfgPMC
2536 //* \brief Enable Peripheral clock in PMC for SSC2
2537 //*----------------------------------------------------------------------------
2538 static inline void AT91F_SSC2_CfgPMC (void)
2540 AT91F_PMC_EnablePeriphClock(
2541 AT91C_BASE_PMC
, // PIO controller base address
2542 ((unsigned int) 1 << AT91C_ID_SSC2
));
2545 //*----------------------------------------------------------------------------
2546 //* \fn AT91F_SSC2_CfgPIO
2547 //* \brief Configure PIO controllers to drive SSC2 signals
2548 //*----------------------------------------------------------------------------
2549 static inline void AT91F_SSC2_CfgPIO (void)
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
2563 //*----------------------------------------------------------------------------
2564 //* \fn AT91F_SSC1_CfgPMC
2565 //* \brief Enable Peripheral clock in PMC for SSC1
2566 //*----------------------------------------------------------------------------
2567 static inline void AT91F_SSC1_CfgPMC (void)
2569 AT91F_PMC_EnablePeriphClock(
2570 AT91C_BASE_PMC
, // PIO controller base address
2571 ((unsigned int) 1 << AT91C_ID_SSC1
));
2574 //*----------------------------------------------------------------------------
2575 //* \fn AT91F_SSC1_CfgPIO
2576 //* \brief Configure PIO controllers to drive SSC1 signals
2577 //*----------------------------------------------------------------------------
2578 static inline void AT91F_SSC1_CfgPIO (void)
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
2590 //*----------------------------------------------------------------------------
2591 //* \fn AT91F_SSC0_CfgPMC
2592 //* \brief Enable Peripheral clock in PMC for SSC0
2593 //*----------------------------------------------------------------------------
2594 static inline void AT91F_SSC0_CfgPMC (void)
2596 AT91F_PMC_EnablePeriphClock(
2597 AT91C_BASE_PMC
, // PIO controller base address
2598 ((unsigned int) 1 << AT91C_ID_SSC0
));
2601 //*----------------------------------------------------------------------------
2602 //* \fn AT91F_SPI_CfgPMC
2603 //* \brief Enable Peripheral clock in PMC for SPI
2604 //*----------------------------------------------------------------------------
2605 static inline void AT91F_SPI_CfgPMC (void)
2607 AT91F_PMC_EnablePeriphClock(
2608 AT91C_BASE_PMC
, // PIO controller base address
2609 ((unsigned int) 1 << AT91C_ID_SPI
));
2612 //*----------------------------------------------------------------------------
2613 //* \fn AT91F_SPI_CfgPIO
2614 //* \brief Configure PIO controllers to drive SPI signals
2615 //*----------------------------------------------------------------------------
2616 static inline void AT91F_SPI_CfgPIO (void)
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
2631 //*----------------------------------------------------------------------------
2632 //* \fn AT91F_TC5_CfgPMC
2633 //* \brief Enable Peripheral clock in PMC for TC5
2634 //*----------------------------------------------------------------------------
2635 static inline void AT91F_TC5_CfgPMC (void)
2637 AT91F_PMC_EnablePeriphClock(
2638 AT91C_BASE_PMC
, // PIO controller base address
2639 ((unsigned int) 1 << AT91C_ID_TC5
));
2642 //*----------------------------------------------------------------------------
2643 //* \fn AT91F_TC4_CfgPMC
2644 //* \brief Enable Peripheral clock in PMC for TC4
2645 //*----------------------------------------------------------------------------
2646 static inline void AT91F_TC4_CfgPMC (void)
2648 AT91F_PMC_EnablePeriphClock(
2649 AT91C_BASE_PMC
, // PIO controller base address
2650 ((unsigned int) 1 << AT91C_ID_TC4
));
2653 //*----------------------------------------------------------------------------
2654 //* \fn AT91F_TC3_CfgPMC
2655 //* \brief Enable Peripheral clock in PMC for TC3
2656 //*----------------------------------------------------------------------------
2657 static inline void AT91F_TC3_CfgPMC (void)
2659 AT91F_PMC_EnablePeriphClock(
2660 AT91C_BASE_PMC
, // PIO controller base address
2661 ((unsigned int) 1 << AT91C_ID_TC3
));
2664 //*----------------------------------------------------------------------------
2665 //* \fn AT91F_TC2_CfgPMC
2666 //* \brief Enable Peripheral clock in PMC for TC2
2667 //*----------------------------------------------------------------------------
2668 static inline void AT91F_TC2_CfgPMC (void)
2670 AT91F_PMC_EnablePeriphClock(
2671 AT91C_BASE_PMC
, // PIO controller base address
2672 ((unsigned int) 1 << AT91C_ID_TC2
));
2675 //*----------------------------------------------------------------------------
2676 //* \fn AT91F_TC1_CfgPMC
2677 //* \brief Enable Peripheral clock in PMC for TC1
2678 //*----------------------------------------------------------------------------
2679 static inline void AT91F_TC1_CfgPMC (void)
2681 AT91F_PMC_EnablePeriphClock(
2682 AT91C_BASE_PMC
, // PIO controller base address
2683 ((unsigned int) 1 << AT91C_ID_TC1
));
2686 //*----------------------------------------------------------------------------
2687 //* \fn AT91F_TC0_CfgPMC
2688 //* \brief Enable Peripheral clock in PMC for TC0
2689 //*----------------------------------------------------------------------------
2690 static inline void AT91F_TC0_CfgPMC (void)
2692 AT91F_PMC_EnablePeriphClock(
2693 AT91C_BASE_PMC
, // PIO controller base address
2694 ((unsigned int) 1 << AT91C_ID_TC0
));
2697 //*----------------------------------------------------------------------------
2698 //* \fn AT91F_SMC2_CfgPIO
2699 //* \brief Configure PIO controllers to drive SMC2 signals
2700 //*----------------------------------------------------------------------------
2701 static inline void AT91F_SMC2_CfgPIO (void)
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
2713 //*----------------------------------------------------------------------------
2714 //* \fn AT91F_PMC_CfgPMC
2715 //* \brief Enable Peripheral clock in PMC for PMC
2716 //*----------------------------------------------------------------------------
2717 static inline void AT91F_PMC_CfgPMC (void)
2719 AT91F_PMC_EnablePeriphClock(
2720 AT91C_BASE_PMC
, // PIO controller base address
2721 ((unsigned int) 1 << AT91C_ID_SYS
));
2724 //*----------------------------------------------------------------------------
2725 //* \fn AT91F_PMC_CfgPIO
2726 //* \brief Configure PIO controllers to drive PMC signals
2727 //*----------------------------------------------------------------------------
2728 static inline void AT91F_PMC_CfgPIO (void)
2730 // Configure PIO controllers to periph mode
2731 AT91F_PIO_CfgPeriph(
2732 AT91C_BASE_PIOA
, // PIO controller base address
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
2742 //*----------------------------------------------------------------------------
2743 //* \fn AT91F_PIOD_CfgPMC
2744 //* \brief Enable Peripheral clock in PMC for PIOD
2745 //*----------------------------------------------------------------------------
2746 static inline void AT91F_PIOD_CfgPMC (void)
2748 AT91F_PMC_EnablePeriphClock(
2749 AT91C_BASE_PMC
, // PIO controller base address
2750 ((unsigned int) 1 << AT91C_ID_PIOD
));
2753 //*----------------------------------------------------------------------------
2754 //* \fn AT91F_PIOC_CfgPMC
2755 //* \brief Enable Peripheral clock in PMC for PIOC
2756 //*----------------------------------------------------------------------------
2757 static inline void AT91F_PIOC_CfgPMC (void)
2759 AT91F_PMC_EnablePeriphClock(
2760 AT91C_BASE_PMC
, // PIO controller base address
2761 ((unsigned int) 1 << AT91C_ID_PIOC
));
2764 //*----------------------------------------------------------------------------
2765 //* \fn AT91F_PIOB_CfgPMC
2766 //* \brief Enable Peripheral clock in PMC for PIOB
2767 //*----------------------------------------------------------------------------
2768 static inline void AT91F_PIOB_CfgPMC (void)
2770 AT91F_PMC_EnablePeriphClock(
2771 AT91C_BASE_PMC
, // PIO controller base address
2772 ((unsigned int) 1 << AT91C_ID_PIOB
));
2775 //*----------------------------------------------------------------------------
2776 //* \fn AT91F_PIOA_CfgPMC
2777 //* \brief Enable Peripheral clock in PMC for PIOA
2778 //*----------------------------------------------------------------------------
2779 static inline void AT91F_PIOA_CfgPMC (void)
2781 AT91F_PMC_EnablePeriphClock(
2782 AT91C_BASE_PMC
, // PIO controller base address
2783 ((unsigned int) 1 << AT91C_ID_PIOA
));
2786 //*----------------------------------------------------------------------------
2787 //* \fn AT91F_TWI_CfgPMC
2788 //* \brief Enable Peripheral clock in PMC for TWI
2789 //*----------------------------------------------------------------------------
2790 static inline void AT91F_TWI_CfgPMC (void)
2792 AT91F_PMC_EnablePeriphClock(
2793 AT91C_BASE_PMC
, // PIO controller base address
2794 ((unsigned int) 1 << AT91C_ID_TWI
));
2797 //*----------------------------------------------------------------------------
2798 //* \fn AT91F_TWI_CfgPIO
2799 //* \brief Configure PIO controllers to drive TWI signals
2800 //*----------------------------------------------------------------------------
2801 static inline void AT91F_TWI_CfgPIO (void)
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
2811 //*----------------------------------------------------------------------------
2812 //* \fn AT91F_US3_CfgPMC
2813 //* \brief Enable Peripheral clock in PMC for US3
2814 //*----------------------------------------------------------------------------
2815 static inline void AT91F_US3_CfgPMC (void)
2817 AT91F_PMC_EnablePeriphClock(
2818 AT91C_BASE_PMC
, // PIO controller base address
2819 ((unsigned int) 1 << AT91C_ID_US3
));
2822 //*----------------------------------------------------------------------------
2823 //* \fn AT91F_US2_CfgPMC
2824 //* \brief Enable Peripheral clock in PMC for US2
2825 //*----------------------------------------------------------------------------
2826 static inline void AT91F_US2_CfgPMC (void)
2828 AT91F_PMC_EnablePeriphClock(
2829 AT91C_BASE_PMC
, // PIO controller base address
2830 ((unsigned int) 1 << AT91C_ID_US2
));
2833 //*----------------------------------------------------------------------------
2834 //* \fn AT91F_US2_CfgPIO
2835 //* \brief Configure PIO controllers to drive US2 signals
2836 //*----------------------------------------------------------------------------
2837 static inline void AT91F_US2_CfgPIO (void)
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
2847 //*----------------------------------------------------------------------------
2848 //* \fn AT91F_US1_CfgPMC
2849 //* \brief Enable Peripheral clock in PMC for US1
2850 //*----------------------------------------------------------------------------
2851 static inline void AT91F_US1_CfgPMC (void)
2853 AT91F_PMC_EnablePeriphClock(
2854 AT91C_BASE_PMC
, // PIO controller base address
2855 ((unsigned int) 1 << AT91C_ID_US1
));
2858 //*----------------------------------------------------------------------------
2859 //* \fn AT91F_US1_CfgPIO
2860 //* \brief Configure PIO controllers to drive US1 signals
2861 //*----------------------------------------------------------------------------
2862 static inline void AT91F_US1_CfgPIO (void)
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
2878 //*----------------------------------------------------------------------------
2879 //* \fn AT91F_US0_CfgPMC
2880 //* \brief Enable Peripheral clock in PMC for US0
2881 //*----------------------------------------------------------------------------
2882 static inline void AT91F_US0_CfgPMC (void)
2884 AT91F_PMC_EnablePeriphClock(
2885 AT91C_BASE_PMC
, // PIO controller base address
2886 ((unsigned int) 1 << AT91C_ID_US0
));
2889 //*----------------------------------------------------------------------------
2890 //* \fn AT91F_US0_CfgPIO
2891 //* \brief Configure PIO controllers to drive US0 signals
2892 //*----------------------------------------------------------------------------
2893 static inline void AT91F_US0_CfgPIO (void)
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
2905 //*----------------------------------------------------------------------------
2906 //* \fn AT91F_MCI_CfgPMC
2907 //* \brief Enable Peripheral clock in PMC for MCI
2908 //*----------------------------------------------------------------------------
2909 static inline void AT91F_MCI_CfgPMC (void)
2911 AT91F_PMC_EnablePeriphClock(
2912 AT91C_BASE_PMC
, // PIO controller base address
2913 ((unsigned int) 1 << AT91C_ID_MCI
));
2916 //*----------------------------------------------------------------------------
2917 //* \fn AT91F_MCI_CfgPIO
2918 //* \brief Configure PIO controllers to drive MCI signals
2919 //*----------------------------------------------------------------------------
2920 static inline void AT91F_MCI_CfgPIO (void)
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
2929 // Configure PIO controllers to periph mode
2930 AT91F_PIO_CfgPeriph(
2931 AT91C_BASE_PIOB
, // PIO controller base address
2933 ((unsigned int) AT91C_PB5_MCDA3
) |
2934 ((unsigned int) AT91C_PB3_MCDA1
) |
2935 ((unsigned int) AT91C_PB4_MCDA2
)); // Peripheral B
2938 //*----------------------------------------------------------------------------
2939 //* \fn AT91F_AIC_CfgPMC
2940 //* \brief Enable Peripheral clock in PMC for AIC
2941 //*----------------------------------------------------------------------------
2942 static inline void AT91F_AIC_CfgPMC (void)
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
));
2956 //*----------------------------------------------------------------------------
2957 //* \fn AT91F_UDP_CfgPMC
2958 //* \brief Enable Peripheral clock in PMC for UDP
2959 //*----------------------------------------------------------------------------
2960 static inline void AT91F_UDP_CfgPMC (void)
2962 AT91F_PMC_EnablePeriphClock(
2963 AT91C_BASE_PMC
, // PIO controller base address
2964 ((unsigned int) 1 << AT91C_ID_UDP
));
2967 //*----------------------------------------------------------------------------
2968 //* \fn AT91F_ST_CfgPMC
2969 //* \brief Enable Peripheral clock in PMC for ST
2970 //*----------------------------------------------------------------------------
2971 static inline void AT91F_ST_CfgPMC (void)
2973 AT91F_PMC_EnablePeriphClock(
2974 AT91C_BASE_PMC
, // PIO controller base address
2975 ((unsigned int) 1 << AT91C_ID_SYS
));
2978 #endif // lib_AT91RM9200_H