#include "/include/at91sam7S64/at91sam7s64.h"
#include "/include/at91sam7s64/lib_at91sam7s64.h"
void AT91F_LowLevelInit(void);
void usart0_init(void);
void usart0_write(char * tx_buffer, unsigned int tx_counter);
#define MCLK 48000000
#define BAUD 19200
int CMain(void)
{
int index = 500000;
AT91F_LowLevelInit();
usart0_init();
while(1)
{
usart0_write("Hello, World!\n", 14);
while(index--);
index = 500000;
}
return 0;
}
void AT91F_LowLevelInit(void)
{
//Disables the Watchdog Timer
AT91C_BASE_WDTC-> WDTC_WDMR = AT91C_WDTC_WDDIS;
//Enabling the Main Oscillator
AT91C_BASE_PMC-> PMC_MOR = 0x01 | 0x07 < < 8;
while (!(AT91C_BASE_PMC-> PMC_SR & AT91C_PMC_MOSCS))
//Setting PLL and divider
AT91C_BASE_PMC-> PMC_PLLR = 24 | (0x28 < < 8) | (124 < < 16) | AT91C_CKGR_USBDIV_1;
while (!(AT91C_BASE_PMC-> PMC_SR & AT91C_PMC_LOCK));
while (!(AT91C_BASE_PMC-> PMC_SR & AT91C_PMC_MCKRDY));
//Selection of Processor Clock
AT91C_BASE_PMC-> PMC_MCKR = AT91C_PMC_PRES_CLK_2;
while (!(AT91C_BASE_PMC-> PMC_SR & AT91C_PMC_MCKRDY));
//Selection of Master Clock
AT91C_BASE_PMC-> PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
while (!(AT91C_BASE_PMC-> PMC_SR & AT91C_PMC_MCKRDY));
}
void usart0_init(void)
{
//AT91C_BASE_PMC-> PMC_PCER=1 < <AT91C_ID_PIOA|1 < <AT91C_ID_US0;
AT91F_US0_CfgPMC();
AT91F_US0_CfgPIO();
AT91F_US_Configure(
AT91C_BASE_US0,
MCLK,
AT91C_US_ASYNC_MODE,
BAUD,
0);
AT91C_BASE_US0-> US_CR = AT91C_US_RXEN | AT91C_US_TXEN | AT91C_US_STTTO;
}
void usart0_write(char * tx_buffer, unsigned int tx_counter)
{
//while( (AT91C_BASE_US0-> US_CSR & AT91C_US_TXRDY) == false );
AT91C_BASE_PDC_US0-> PDC_TPR = (unsigned int)tx_buffer;
AT91C_BASE_PDC_US0-> PDC_TCR = tx_counter;
AT91F_PDC_EnableTx (AT91C_BASE_PDC_US0);
//while (AT91C_BASE_PDC_US0-> PDC_TCR & 0xFFFF);
}