1. Можно ли как-то пользоваться SAM-BA после прошивки в контроллер своей программы,
не загружая ее с помощью замыкания перемычек на плате?
2. Не получается помигать светодиодом.
Команда, включающая или выключающая светодиод, которая находится
в LowLevelInit (сейча закоментарена) выполняется,
а дальше в Main - никаких движений
int main()
{
AT91F_LowLevelInit();
//программа как будто останавливается здесь
//loop forever
while(1)
{
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, (1<<5) );
wait();
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, (1<<5) );
wait();
}
}
---------------------------------------------------------------------------
#include "ioat91sam7s256.h"
#define __inline inline
#include "lib_AT91SAM7S256.h"
#define true -1
#define false 0
#define AT91F_Default_FIQ_handler 1
#define AT91F_Default_IRQ_handler 2
#define AT91F_Spurious_handler 3
void AT91F_LowLevelInit( void)
{
int i;
AT91PS_PMC pPMC = AT91C_BASE_PMC;
//* Set Flash Waite sate
// Single Cycle Access at Up to 30 MHz, or 40
AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS ;
//* Watchdog Disable
AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;
//* Set MCK at 48 054 850
// 1 Enabling the Main Oscillator:
// SCK = 1/32768 = 30.51 uSecond
// Start up time = 8 * 6 / SCK = 56 * 30.51 = 1,46484375 ms
pPMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x06 <<8) | AT91C_CKGR_MOSCEN ));
// Wait the startup time
while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
// 2 Checking the Main Oscillator Frequency (Optional)
// 3 Setting PLL and divider:
// - div by 14 Fin = 1.3165 =(18,432 / 14)
// - Mul 72+1: Fout = 96.1097 =(3,6864 *73)
// for 96 MHz the error is 0.11%
// Field out NOT USED = 0
// PLLCOUNT pll startup time estimate at : 0.844 ms
// PLLCOUNT 28 = 0.000844 /(1/32768)
pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 14 ) |
(AT91C_CKGR_PLLCOUNT & (28<<8)) |
(AT91C_CKGR_MUL & (72<<16)));
// Wait the startup time
while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
// 4. Selection of Master Clock and Processor Clock
// select the PLL clock divided by 2
pPMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2 ;
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK ;
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
// Set up the default interrupts handler vectors
AT91C_BASE_AIC->AIC_SVR[0] = (int) AT91F_Default_FIQ_handler ;
for (i=1;i < 31; i++)
{
AT91C_BASE_AIC->AIC_SVR[i] = (int) AT91F_Default_IRQ_handler ;
}
AT91C_BASE_AIC->AIC_SPU = (int) AT91F_Spurious_handler ;
//------------------------------------------------------------------
//Init of PIO
//enable clock to PIOA
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA );
//config directions
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, (1<<5) ); //PER & OER
//AT91F_PIO_SetOutput( AT91C_BASE_PIOA, (1<<5) );
}
__ramfunc void wait(void)
{
int time;
for (time = 0; time < 1E+6; time++);
}