люди, что делаю не так??? вот код начальной инициализации...
Код
void LowLevelInit(void)
{
int i;
AT91PS_PMC pPMC = AT91C_BASE_PMC;
//* Set Flash Wait sate
// Single Cycle Access at Up to 30 MHz, or 40
// if MCK = 48 054 841 I have 50 Cycle for 1 usecond ( flied MC_FMR->FMCN
// result: AT91C_MC_FMR = 0x00320100 (MC Flash Mode Register)
AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(50 << 16)) | AT91C_MC_FWS_1FWS;
//* Watchdog Disable
// result: AT91C_WDTC_WDMR = 0x00008000 (Watchdog Mode Register)
AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;
//* Set MCK at 48 054 841
// 1 Enabling the Main Oscillator:
// SCK = 1/32768 = 30.51 uSecond
// Start up time = 8 * 6 / SCK = 56 * 30.51 = 1,46484375 ms
// result: AT91C_CKGR_MOR = 0x00000601 (Main Oscillator Register)
pPMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x06 << 8) | AT91C_CKGR_MOSCEN ));
// Wait the startup time
while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
// PMC Clock Generator PLL Register setup
//
// The following settings are used: DIV = 14
// MUL = 72
// PLLCOUNT = 10
//
// Main Clock (MAINCK from crystal oscillator) = 18432000 hz (see AT91SAM7-EK schematic)
// MAINCK / DIV = 18432000/14 = 1316571 hz
// PLLCK = 1316571 * (MUL + 1) = 1316571 * (72 + 1) = 1316571 * 73 = 96109683 hz
//
// PLLCOUNT = number of slow clock cycles before the LOCK bit is set
// in PMC_SR after CKGR_PLLR is written.
//
// PLLCOUNT = 10
//
// OUT = 0 (not used)
// result: AT91C_CKGR_PLLR = 0x00000000480A0E (PLL Register)
pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 14) |
(AT91C_CKGR_PLLCOUNT & (10<<8)) |
(AT91C_CKGR_MUL & (72<<16)));
// Wait the startup time (until PMC Status register LOCK bit is set)
while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
// PMC Master Clock (MCK) Register setup
//
// CSS = 3 (PLLCK clock selected)
//
// PRES = 1 (MCK = PLLCK / 2) = 96109683/2 = 48054841 hz
//
// Note: Master Clock MCK = 48054841 hz (this is the CPU clock speed)
// result: AT91C_PMC_MCKR = 0x00000007 (Master Clock Register)
pPMC->PMC_MCKR = AT91C_PMC_CSS_PLL_CLK | AT91C_PMC_PRES_CLK_2;
//pPMC->PMC_MCKR = AT91C_PMC_CSS_MAIN_CLK; //18432000 HZ
// Set up the default interrupts handler vectors
AT91C_BASE_AIC->AIC_IECR = 0x0;
AT91C_BASE_AIC->AIC_IDCR = 0xffffffff;
/*
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;
*/
}
вот мой код настройки УСАРТА
Код
volatile AT91PS_PIO pPIO = AT91C_BASE_PIOA;
//for LED
pPIO->PIO_PER = LED_MASK; //perepherial enable register
pPIO->PIO_OER = LED_MASK; //output enable register
pPIO->PIO_SODR = LED_MASK;
pPIO->PIO_CODR = LED_MASK;
/*for USART*/
volatile AT91PS_PMC pPMC = AT91C_BASE_PMC; //peripheal clock
pPMC->PMC_PCER = (1 << AT91C_ID_US1)|(1 << AT91C_ID_US0); //clock USART1
pPIO->PIO_PDR = (1 << 5)| /*disable PIO */
(1 << 6)|
(1 << 21)|
(1 << 22);
pPIO->PIO_ASR = (1 << 5)| /*enable peripheral A*/
(1 << 6)|
(1 << 21)|
(1 << 22);
int maskPIO;
maskPIO = pPIO->PIO_OSR | (1 << 6) | (1 << 22);
pPIO->PIO_OER = maskPIO; //output USART
volatile AT91PS_USART pUS1 = AT91C_BASE_US1; //settings USART
pUS1->US_BRGR = CD1; //baudrate
pUS1->US_IDR = 0xffffffff;
pUS1->US_MR = AT91C_US_USMODE_NORMAL|
AT91C_US_CLKS_CLOCK| /*AT91C_US_CLKS_SLOW*/
AT91C_US_CHRL_8_BITS|
AT91C_US_NBSTOP_2_BIT|
AT91C_US_DSNACK;
pUS1->US_CR = 0x50; //RXEN and TXEN enable
вот мой код передачи байта и зажигание светодиода...
Код
while(1)
{
pPIO->PIO_SODR |= LED_MASK;
for(qwe = 0; qwe < 100000; qwe++);
pPIO->PIO_CODR |= LED_MASK;
for(qwe = 0; qwe < 100000; qwe++);
pUS1->US_THR = 0x1CC; //transmit char to PC!!!
}
связка у меня такая eclipse + arm-elf-gb + openOCD + wiggler + МК at91sam7...
помогите... мозг уже плавится... руки дрожат... не дайте пропасть душе моей...
светодиодами моргает прекрасно... на кнопочки реагирует...