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

📄 main.c

📁 at91的linux demo程序
💻 C
字号:
/*-----------------------------------------------------------------------------
 *           ATMEL Microcontroller Software Support  -  ROUSSET  -
 *-----------------------------------------------------------------------------
 * 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.
 *----------------------------------------------------------------------------
 * File Name           : main.c
 * Object              :
 * Creation            : GGi   24/07/2006
 * 1.0 07/Aug/06 JPP   : Change disclaimer and include
 *----------------------------------------------------------------------------
*/

#include "project.h"

#define AT91C_RTT_PRESCAL_1_SECOND     0x8000

//*-----------------------------------------------------------------------------
//* Function Name       : AT91F_Init_RTT
//* Object              : Initialize RTT
//*---------------------------------------------------------------------------*/
void AT91F_Init_RTT(void){
  AT91C_BASE_RTTC->RTTC_RTMR = (AT91C_RTT_PRESCAL_1_SECOND & AT91C_RTTC_RTPRES );
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_DBGU_Printk
//* \brief This function is used to send a string through the DBGU channel
//* (Very low level debugging)
//*----------------------------------------------------------------------------
void AT91F_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++);
	}
}

//*-----------------------------------------------------------------------------
//* Function Name       : GetTickCount()
//* Object              : Return the number of systimer tick
//*---------------------------------------------------------------------------*/
unsigned int GetTickCount(void)
{
	return AT91C_BASE_RTTC -> RTTC_RTVR;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_PIO_Init
//* \brief NandFlash init
//*----------------------------------------------------------------------------
void AT91F_PIO_Init (void)
{
    // First, enable the clock of the PIO
       AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91D_ID_PIO_LED ) ;
       AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91D_ID_PIO_SW ) ;

       AT91F_PIO_CfgInput(AT91D_BASE_PIO_SW,AT91B_BP_MASK);

    // then, we configure the PIO Lines corresponding to LED1 to LED2 to be
    // outputs. No need to set these pins to be driven by the PIO because it is
    // GPIO pins only.
       AT91F_PIO_CfgOutput( AT91D_BASE_PIO_LED, AT91B_LED_MASK ) ;

    // Clear the LED's. On the board we must apply a "1" to turn off LEDs
       AT91F_PIO_SetOutput( AT91D_BASE_PIO_LED, AT91B_LED_MASK ) ;
    // Clear the LED's. On the board we must apply a "0" to turn on LEDs
       AT91F_PIO_ClearOutput( AT91D_BASE_PIO_LED, AT91B_LED_MASK ) ;
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_DBGU_Init
//* \brief NandFlash init
//*----------------------------------------------------------------------------
void AT91F_DBGU_Init (void)
{
	// Configure DBGU
    AT91F_US_ResetRx((AT91PS_USART)AT91C_BASE_DBGU);
    AT91F_US_Configure(
		(AT91PS_USART)AT91C_BASE_DBGU, // DBGU base address
		AT91B_MASTER_CLOCK,            // 100 MHz
		AT91C_US_ASYNC_MODE,           // mode Register to be programmed
		AT91B_DBGU_BAUD_RATE,          // baudrate to be programmed
		0                              // timeguard to be programmed
	);
	// Open PIO for DBGU
    AT91F_DBGU_CfgPIO();
	// Enable Transmitter
    AT91F_US_EnableTx((AT91PS_USART)AT91C_BASE_DBGU);
}

//*----------------------------------------------------------------------------
//* Function Name       : main
//* Object              : Main function
//*---------------------------------------------------------------------------*/
int main(void)
{
	unsigned int tick;
    // Init DBGU
        AT91F_DBGU_Init();
    // Print to consol
        AT91F_DBGU_Printk("\n\n\r=========================\n\r");
        AT91F_DBGU_Printk("AT91SAM9260  Init example\n\r");
        AT91F_DBGU_Printk("=========================\n\r");

    // Init Led AND Switch
        AT91F_PIO_Init();
    // Init RTT
        AT91F_Init_RTT();

    // Infinite loop
       tick = GetTickCount();

	while (1) {
        AT91F_DBGU_Printk(".");
        while (tick == GetTickCount());
        if ((AT91F_PIO_GetInput (AT91D_BASE_PIO_SW) & AT91B_SW1) != AT91B_SW1 )
        {
            if ((AT91F_PIO_GetInput (AT91D_BASE_PIO_LED) & AT91B_POWERLED) != AT91B_POWERLED  )
                AT91F_PIO_SetOutput( AT91D_BASE_PIO_LED, AT91B_POWERLED ) ;
            else
                AT91F_PIO_ClearOutput( AT91D_BASE_PIO_LED, AT91B_POWERLED ) ;
        }// End AT91B_SW1
        if ((AT91F_PIO_GetInput (AT91D_BASE_PIO_LED) & AT91B_LED1) != AT91B_LED1  )
            AT91F_PIO_SetOutput( AT91D_BASE_PIO_LED, AT91B_LED1 ) ;
        else
            AT91F_PIO_ClearOutput( AT91D_BASE_PIO_LED, AT91B_LED1 ) ;
	    tick = GetTickCount();
    }// END While (1)

}


⌨️ 快捷键说明

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