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