?? dbgu.c
字號(hào):
/* ----------------------------------------------------------------------------
* 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
//*-----------------------------------------------------------------------------
//*-----------------------------------------------------------------------------
//* 函數(shù)名稱(chēng): DBGU_Configure
//* 函數(shù)功能: 配制調(diào)試串口
//* 入口參數(shù): 1. mode : 串口模式
//* 2. baudrate : 波特率
//* 3. mck : 系統(tǒng)主頻
//* 返回值 : 無(wú)
//*-----------------------------------------------------------------------------
void DBGU_Configure(unsigned int mode,
unsigned int baudrate,
unsigned int mck)
{
//* Reset & disable receiver and transmitter, disable interrupts
//* 復(fù)位并禁止調(diào)試串口接收與發(fā)送,禁止中斷
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
//* 使能串口接收與發(fā)送
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);
}
//**********************************************************************
//*函數(shù)名稱(chēng) : DBGU_Printk
//*函數(shù)功能 : 向串口輸出字符串
//*入口參數(shù) : *buffer: 要輸出的字符串起始地址
//*返回值 : 無(wú)
//**********************************************************************
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++);
}
}
//*-----------------------------------------------------------------------------
//* 函數(shù)名稱(chēng): DBGU_PutChar
//* 函數(shù)功能: 從串口輸出一個(gè)字符
//* 入口參數(shù): c: 待輸出的字符
//* 返回值 : 無(wú)
//*-----------------------------------------------------------------------------
static void DBGU_PutChar(unsigned char c)
{
//* Wait for the transmitter to be ready
//* 等待發(fā)送緩存器空
while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY) == 0);
//* Send character
//* 發(fā)送字符
AT91C_BASE_DBGU->DBGU_THR = c;
//* Wait for the transfer to complete
//* 等待發(fā)送完成
while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY) == 0);
}
//*-----------------------------------------------------------------------------
//* 函數(shù)名稱(chēng): DBGU_GetChar
//* 函數(shù)功能: 從串獲取一個(gè)字符
//* 入口參數(shù): 無(wú)
//* 返回值 : 獲取的字符
//*-----------------------------------------------------------------------------
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -