если компилить сей код с высокой оптимизацией - то всё работает,
если без оптимизации то нет.
может ещё какая инициализация нужна?
(что такое sturtup и куда его пихать?)
и вообще - как грамотно проект настроить.
загружаю я бинарнрик SAM-Bой с 0х100000
-------------------------------------------------------
#include "ioat91sam7s256.h"
#define __inline inline
#include "..\src\examples\Atmel\SAM7S256\Include\lib_AT91SAM7S256.h"
#define set(a,


#define clr(a,


#define bit(a,


#define LED_G ((unsigned int)0x1 << 18)
#define LED_Y ((unsigned int)0x1 << 17)
#define BUT_G ((unsigned int)0x1 << 19)
#define BUT_Y ((unsigned int)0x1 << 20)
#define LedOn(a) AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,a)
#define LedOff(a) AT91F_PIO_SetOutput(AT91C_BASE_PIOA,a)
#define Press(a) (!bit(AT91F_PIO_GetInput(AT91C_BASE_PIOA),a))
int main()
{
AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS ;
// Disable watchwog
AT91F_WDTSetMode(AT91C_BASE_WDTC,AT91C_WDTC_WDDIS);// AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;
//Enabling the Main Oscillator:
// Start up time = 8 * 6 slow clock time
AT91C_BASE_PMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x06 <<8) | AT91C_CKGR_MOSCEN ));
//Wait the startup time
while(!bit(AT91C_BASE_PMC->PMC_SR , AT91C_PMC_MOSCS)){}
//Setting PLL and divider:
//18432 / 192 * 625 = 60000(MHz);
//Wait 1 slow clock cycle
AT91C_BASE_PMC->PMC_PLLR = ((AT91C_CKGR_DIV & 192) | (AT91C_CKGR_PLLCOUNT & (1<<8)) | (AT91C_CKGR_MUL & (624<<16)));
// Wait the startup time
while(!bit(AT91C_BASE_PMC->PMC_SR , AT91C_PMC_LOCK)){}
while(!bit(AT91C_BASE_PMC->PMC_SR , AT91C_PMC_MCKRDY)){}
//Selection of Master Clock and Processor Clock
//select the PLL clock
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK ;
while(!bit(AT91C_BASE_PMC->PMC_SR , AT91C_PMC_MCKRDY));
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_PLL_CLK ;
while(!bit(AT91C_BASE_PMC->PMC_SR , AT91C_PMC_MCKRDY));
//enable the clock of the MC
AT91F_MC_CfgPMC (); // AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_SYS)
//enable the clock of the PIO
AT91F_PIOA_CfgPMC ();// AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA)
//configure ports
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,LED_G | LED_Y);// AT91C_BASE_PIOA->PIO_PER; ->PIO_OER
AT91F_PIO_CfgInput (AT91C_BASE_PIOA,BUT_G | BUT_Y);// AT91C_BASE_PIOA->PIO_ODR; ->PIO_PER
while(1)
{
if(Press(BUT_Y)) LedOn (LED_Y);
else LedOff(LED_Y);
}
}