-
Path: news-archive.icm.edu.pl!news.rmf.pl!news.icm.edu.pl!news.supermedia.pl!newsfeed
.pionier.net.pl!news.gazeta.pl!not-for-mail
From: "pawel" <p...@p...onet.pl>
Newsgroups: pl.misc.elektronika
Subject: at91sam7 i uart
Date: Thu, 11 Feb 2010 12:26:31 +0100
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 134
Message-ID: <hl0ph9$c97$1@inews.gazeta.pl>
NNTP-Posting-Host: ahe98.internetdsl.tpnet.pl
X-Trace: inews.gazeta.pl 1265887593 12583 83.16.186.98 (11 Feb 2010 11:26:33 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Thu, 11 Feb 2010 11:26:33 +0000 (UTC)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579
X-Priority: 3
X-RFC2646: Format=Flowed; Original
X-Newsreader: Microsoft Outlook Express 6.00.2900.5843
X-User: pavnet
X-EsetScannerBuild: 6575
X-MSMail-Priority: Normal
Xref: news-archive.icm.edu.pl pl.misc.elektronika:581898
[ ukryj nagłówki ]Witam.
Próbuję uruchomić UART na płytce startowej zl11 z modułem zl12 i procesorem
at91sam7s256.
Niestety mam do czynienia z tym procesorem pierwszy raz i nie wychodzi mi
wysłanie znaku.
Czy mógłby któryś z grupowiczów wskazać gdzie mogę mieć błąd, może źle
ustawiam taktowanie,
zastosowany kwarc ma 12MHz.
Z moich wyliczeń MCK powinien być 48MHz.
Uarta próbuję uruchomić na 9600.
Dzięki serdeczne za pomoc.
Paweł
////////////////////////////////////////////////////
///////////
LowLevelInit(){
AT91PS_PMC pPMC = AT91C_BASE_PMC;
//Flash i watchdog
......
//Aktywowanie głównego generatora MAINCK
// 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));
//Aktywacja PLL
//DIV=3 12MHz/3=4MHz
//Mul=23 4*(23+1)=96Mhz
// PLL 96MHz
pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x03) |
(AT91C_CKGR_PLLCOUNT & (28<<8))
|
(AT91C_CKGR_MUL & (23<<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 ; //dzielenie PLL na 2
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK ; //wybranie źródła PLL
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
//MCK=48MHz ????
..........
}
////////////////////////////////////////////////////
////
#define MCK 48000000
#define BR 9600 /* Baud Rate */
#define BRD (MCK/16/BR) /* Baud Rate Divisor */
volatile AT91S_USART * pUSART = AT91C_BASE_US0; /* Global Pointer to
USART0 */
void uart0_init (void) { /* Initialize Serial Interface */
//aktywowanie zegara na usart
volatile AT91PS_PMC pPMC = AT91C_BASE_PMC;
pPMC->PMC_PCER |= (1 << AT91C_ID_US0);
volatile AT91PS_PIO pPIO = AT91C_BASE_PIOA;
pPIO->PIO_PDR = AT91C_PA0_RXD0 | /* Enable RxD0 Pin */
AT91C_PA1_TXD0; /* Enalbe TxD0
Pin */
//ustawienie peripheral na PIOA na A
pPIO->PIO_ASR = AT91C_PIO_PA0 | AT91C_PIO_PA1;
pUSART->US_CR = AT91C_US_RSTRX | /* Reset Receiver */
AT91C_US_RSTTX | /* Reset Transmitter */
AT91C_US_RXDIS | /* Receiver Disable */
AT91C_US_TXDIS; /* Transmitter Disable */
pUSART->US_MR = AT91C_US_USMODE_NORMAL | /* Normal Mode */
AT91C_US_CLKS_CLOCK | /* Clock = MCK */
AT91C_US_CHRL_8_BITS | /* 8-bit Data */
AT91C_US_PAR_NONE | /* No Parity */
AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */
pUSART->US_BRGR = BRD; /* Baud Rate Divisor */
pUSART->US_CR = AT91C_US_RXEN | /* Receiver Enable */
AT91C_US_TXEN; /*
Transmitter Enable */
}
/////////////////////////////////////////
//wysyłanie znaku
int uart0_putc(int ch)
{
while (!(pUSART->US_CSR & AT91C_US_TXRDY)); /* Wait for Empty Tx Buffer
*/
return (pUSART->US_THR = ch); /* Transmit Character */
}
//////////////////////////////////////
void init(void)
{
// enable peripheral clocks for PIO controllers
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOA) | (1<<AT91C_ID_PIOB);
// enable reset-key on board
AT91C_BASE_RSTC->RSTC_RMR = (0xA5000000 | AT91C_RSTC_URSTEN);
//uart init
uart0_init();
}
/////////////////////////////////////////
int main( void )
{
init();
for(;;)
{
uart0_putc('H') ;
uart0_putc('e') ;
uart0_putc('l') ;
uart0_putc('l') ;
uart0_putc('o') ;
uart0_putc('\r') ;
uart0_putc('\n') ;
}
return(0);
}
Następne wpisy z tego wątku
- 11.02.10 13:44 pawel
Najnowsze wątki z tej grupy
- pradnica krokowa
- Nieustający podziw...
- Coś dusi.
- akumulator napięcie 12.0v
- Podłączenie DMA 8257 do 8085
- pozew za naprawę sprzętu na youtube
- gasik
- Zbieranie danych przez www
- reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- Problem z odczytem karty CF
- 74F vs 74HCT
- Newag ciąg dalszy
- Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- Szukam: czujnik ruchu z możliwością zaączenia na stałe
- kabelek - kynar ?
Najnowsze wątki
- 2025-01-17 Zniknął list gończy za "Frogiem". Frog się nam odnalazł?
- 2025-01-17 Kto wytłumaczy "głupiemu" prezydentowi Dudzie wielką moc prawną "dekretu premiera" TUSKA? [(C)Korneluk (2025)]
- 2025-01-17 Warszawa => Inżynier oprogramowania .Net <=
- 2025-01-17 Natalia z Andrychowa
- 2025-01-17 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-01-17 Warszawa => System Architect (Java background) <=
- 2025-01-17 Warszawa => Full Stack .Net Engineer <=
- 2025-01-17 Gliwice => IT Expert (Network Systems area) <=
- 2025-01-17 Lublin => Programista Delphi <=
- 2025-01-17 Warszawa => Developer .NET (mid) <=
- 2025-01-17 Ostrów Wielkopolski => Konsultant Wdrożeniowy Comarch XL/Optima (Ksi
- 2025-01-17 Katowice => Senior Field Sales (system ERP) <=
- 2025-01-17 Wróblewo => Analityk finansowy <=
- 2025-01-17 Żerniki => Specjalista ds. Employer Brandingu <=
- 2025-01-17 pradnica krokowa