dbgu.c
上传用户:xukun0987
上传日期:2022-07-16
资源大小:216k
文件大小:6k
- /* ----------------------------------------------------------------------------
- * ATMEL Microcontroller Software Support
- * ----------------------------------------------------------------------------
- * Copyright (c) 2008, Atmel Corporation
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the disclaimer below.
- *
- * Atmel's name may not be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ----------------------------------------------------------------------------
- */
- //------------------------------------------------------------------------------
- // Headers
- //------------------------------------------------------------------------------
- #include "dbgu.h"
- #include <stdarg.h>
- #include <board.h>
- //------------------------------------------------------------------------------
- // Global functions
- //------------------------------------------------------------------------------
- //------------------------------------------------------------------------------
- /// Initializes the DBGU with the given parameters, and enables both the
- /// transmitter and the receiver. The mode parameter contains the value of the
- /// DBGU_MR register.
- /// Value DBGU_STANDARD can be used for mode to get the most common configuration
- /// (i.e. aysnchronous, 8bits, no parity, 1 stop bit, no flow control).
- /// param mode Operating mode to configure.
- /// param baudrate Desired baudrate (e.g. 115200).
- /// param mck Frequency of the system master clock in Hz.
- //------------------------------------------------------------------------------
- void DBGU_Configure(
- unsigned int mode,
- unsigned int baudrate,
- unsigned int mck)
- {
- // Reset & disable receiver and transmitter, disable interrupts
- AT91C_BASE_DBGU->DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX;
- AT91C_BASE_DBGU->DBGU_IDR = 0xFFFFFFFF;
-
- // Configure baud rate
- AT91C_BASE_DBGU->DBGU_BRGR = mck / (baudrate * 16);
-
- // Configure mode register
- AT91C_BASE_DBGU->DBGU_MR = mode;
-
- // Disable DMA channel
- AT91C_BASE_DBGU->DBGU_PTCR = AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS;
- // Enable receiver and transmitter
- AT91C_BASE_DBGU->DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN;
- }
- //------------------------------------------------------------------------------
- /// Outputs a character on the DBGU line.
- /// note This function is synchronous (i.e. uses polling).
- /// param c Character to send.
- //------------------------------------------------------------------------------
- void DBGU_PutChar(unsigned char c)
- {
- // Wait for the transmitter to be ready
- while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY) == 0);
-
- // Send character
- AT91C_BASE_DBGU->DBGU_THR = c;
-
- // Wait for the transfer to complete
- while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY) == 0);
- }
- //------------------------------------------------------------------------------
- /// Return 1 if a character can be read in DBGU
- //------------------------------------------------------------------------------
- unsigned int DBGU_IsRxReady()
- {
- return (AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_RXRDY);
- }
- //------------------------------------------------------------------------------
- /// Reads and returns a character from the DBGU.
- /// note This function is synchronous (i.e. uses polling).
- /// return Character received.
- //------------------------------------------------------------------------------
- unsigned char DBGU_GetChar(void)
- {
- while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_RXRDY) == 0);
- return AT91C_BASE_DBGU->DBGU_RHR;
- }
- #ifndef NOFPUT
- #include <stdio.h>
- //------------------------------------------------------------------------------
- /// exclude
- /// Implementation of fputc using the DBGU as the standard output. Required
- /// for printf().
- /// param c Character to write.
- /// param pStream Output stream.
- /// param The character written if successful, or -1 if the output stream is
- /// not stdout or stderr.
- //------------------------------------------------------------------------------
- signed int fputc(signed int c, FILE *pStream)
- {
- if ((pStream == stdout) || (pStream == stderr)) {
-
- DBGU_PutChar(c);
- return c;
- }
- else {
- return EOF;
- }
- }
- //------------------------------------------------------------------------------
- /// exclude
- /// Implementation of fputs using the DBGU as the standard output. Required
- /// for printf(). Does NOT currently use the PDC.
- /// param pStr String to write.
- /// param pStream Output stream.
- /// return Number of characters written if successful, or -1 if the output
- /// stream is not stdout or stderr.
- //------------------------------------------------------------------------------
- signed int fputs(const char *pStr, FILE *pStream)
- {
- signed int num = 0;
- while (*pStr != 0) {
- if (fputc(*pStr, pStream) == -1) {
- return -1;
- }
- num++;
- pStr++;
- }
- return num;
- }
- #undef putchar
- //------------------------------------------------------------------------------
- /// exclude
- /// Outputs a character on the DBGU.
- /// param c Character to output.
- /// return The character that was output.
- //------------------------------------------------------------------------------
- signed int putchar(signed int c)
- {
- return fputc(c, stdout);
- }
- #endif //#ifndef NOFPUT