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