⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbgu.c

📁 IAR5.2下 AT91SAM9260 ARM 对 MCP2515 控制源化码
💻 C
字号:
/* ----------------------------------------------------------------------------
 *         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>
            
//*-----------------------------------------------------------------------------
//*                     Exported functions
//*-----------------------------------------------------------------------------
//*-----------------------------------------------------------------------------
//* 函数名称:  DBGU_Configure
//* 函数功能:  配制调试串口
//* 入口参数:  1. mode      : 串口模式
//*            2. baudrate  : 波特率
//*            3. mck       : 系统主频
//* 返回值 :  无
//*-----------------------------------------------------------------------------
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
    //* 禁止 DMA
    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;
}


//*----------------------------------------------------------------------------
//* \fn    AT91F_US_TxReady
//* \brief Return 1 if a character can be written in US_THR
//*----------------------------------------------------------------------------
unsigned int AT91F_US_TxReady (AT91PS_USART pUSART)     // \arg pointer to a USART controller
{
    return (pUSART->US_CSR & AT91C_US_TXRDY);
}


//*----------------------------------------------------------------------------
//* \fn    AT91F_US_PutChar
//* \brief Send a character,does not check if ready to send
//*----------------------------------------------------------------------------
void AT91F_US_PutChar (AT91PS_USART pUSART, int character )
{
    pUSART->US_THR = (character & 0x1FF);
}


//**********************************************************************
//*函数名称 : DBGU_Printk
//*函数功能 : 向串口输出字符串
//*入口参数 : *buffer: 要输出的字符串起始地址     
//*返回值   : 无    
//**********************************************************************
void DBGU_Printk(char *buffer) 		// \arg pointer to a string ending by \0
{
    while(*buffer != '\0') 
    {
        while (!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
        AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU, *buffer++);
    }
}


//*-----------------------------------------------------------------------------
//* 函数名称:  DBGU_PutChar
//* 函数功能:  从串口输出一个字符
//* 入口参数:  c: 待输出的字符
//* 返回值 :  无
//*-----------------------------------------------------------------------------
static 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);
}


//*-----------------------------------------------------------------------------
//* 函数名称:  DBGU_GetChar
//* 函数功能:  从串获取一个字符
//* 入口参数:  无
//* 返回值 :  获取的字符
//*-----------------------------------------------------------------------------
unsigned char DBGU_GetChar()
{
    while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_RXRDY) == 0);
    return AT91C_BASE_DBGU->DBGU_RHR;
}


#ifndef NOFPUT

#include <stdio.h>

//------------------------------------------------------------------------------
/// Implementation of fputc using the DBGU as the standard output. Required
/// for printf().
/// Returns the character written if successful, or -1 if the output stream is
/// not stdout or stderr.
/// \param c  Character to write.
/// \param pStream  Output stream.
//------------------------------------------------------------------------------
signed int fputc(signed int c, FILE *pStream)
{
    if ((pStream == stdout) || (pStream == stderr)) 
    {
        DBGU_PutChar(c);
        return c;
    }
    else 
        return EOF;
}


//------------------------------------------------------------------------------
/// Implementation of fputs using the DBGU as the standard output. Required
/// for printf(). Does NOT currently use the PDC.
/// Returns the number of characters written if successful, or -1 if the output
/// stream is not stdout or stderr.
/// \param pStr  String to write.
/// \param pStream  Output stream.
//------------------------------------------------------------------------------
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

//------------------------------------------------------------------------------
/// Outputs a character on the DBGU. Returns the character itself.
/// \param c  Character to output.
//------------------------------------------------------------------------------
signed int putchar(signed int c)
{
    return fputc(c, stdout);
}

#endif //#ifndef NOFPUT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -