📄 dbgu.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 + -