реклама на сайте
подробности

 
 
> Научите работать с IAR и AT91SAM7S
solder
сообщение Oct 5 2006, 10:41
Сообщение #1





Группа: Новичок
Сообщений: 13
Регистрация: 21-04-06
Пользователь №: 16 337



Проблемма в следующем:

если компилить сей код с высокой оптимизацией - то всё работает,
если без оптимизации то нет.

может ещё какая инициализация нужна?
(что такое sturtup и куда его пихать?)

и вообще - как грамотно проект настроить.
загружаю я бинарнрик SAM-Bой с 0х100000

-------------------------------------------------------

#include "ioat91sam7s256.h"
#define __inline inline
#include "..\src\examples\Atmel\SAM7S256\Include\lib_AT91SAM7S256.h"


#define set(a,cool.gif ((a) |= (cool.gif)
#define clr(a,cool.gif ((a) &=~ (cool.gif)
#define bit(a,cool.gif ((a) & (cool.gif)

#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);
}

}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016