eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › at91sam7 i uart
Ilość wypowiedzi w tym wątku: 2

  • 1. Data: 2010-02-11 11:26:31
    Temat: at91sam7 i uart
    Od: "pawel" <p...@p...onet.pl>

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




  • 2. Data: 2010-02-11 13:44:40
    Temat: Re: at91sam7 i uart
    Od: "pawel" <p...@p...onet.pl>

    Już działa pomyliłem pliki nagłówkowe.



strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: