Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[atmega128][C] Obsluga karty mmc.

tomson071 17 Jul 2008 22:01 1337 1
  • #1
    tomson071
    Level 10  
    Mam problem nie rozumiem kilku funkcji w programie do obslugi karty MMC.


    Code:
    #include <avr/io.h>
    
    #include "mmc.h"

    extern u08 mmc_sbuf[];         // Bufor danych w pamięci RAM mikrokontrolera

    void send_buf(u16 count) funkcja która czeka na gotowość uart-a a następnie zapisuje do jego rejestru danych UDR1 dane z pamięci RAM mikrokontrolera
    {
       u16 i;
       for(i=0; i<count; i++)
       {
          while( !(UCSR1A & (1<<UDRE1)) );      // Czekaj na gotowość nadajnika
          UDR1 = mmc_sbuf[i];            // Wyślij bajt z bufora
       }
    }

    void printu32(u32 u_val)   // wyslij liczbe U32 przez uart
    {
       u08 scratch[16]; utworzenie 16 bajtowej tablicy
       u08 *ptr; utworzenie wskaźnika do adresu w pamięci

       ptr = scratch + 16;
       *--ptr = 0;
       do
       {
          *--ptr = u_val % 10 + '0'; jeśli się nie myle to tu jest zapisywana wartość u_val tylko że chyba od końca… ale pewnien nie jestem
          u_val /= 10;
       }while (u_val);

       while (*ptr)
       {
          while( !(UCSR1A & (1<<UDRE1)) );      // Czekaj na gotowość nadajnika
          UDR1 = *ptr++;            // Wyślij bajt z bufora
       }
    }



    void eol(void)
    {
       while( !(UCSR1A & (1<<UDRE1)) );   // Czekaj na gotowość nadajnika
       UDR1 = 13;            // Wyślij CR
       while( !(UCSR1A & (1<<UDRE1)) );   // Czekaj na gotowość nadajnika
       UDR1 = 10;            // Wyślij LF
    }


    int main(void)
    {
       u32 poj;
       UCSR1B = (1<<TXEN1);         // Inicjalizacja nadajnika RS232
       UBRR1H  = 0;
       UBRR1L  = 38;//25;            // Ustawienie 19200 bodów przy kwarcu 8MHz

       u08 i;
       mmc_reset();            // Reset karty

       mmc_get_cid();            // Identyfikacja karty
       send_buf(16);            // Wyślij CID przez uart
       eol();

       poj = mmc_capacity();         // pobierz ilość sektorów
       printu32(poj);            // wyślij przez uart
       eol();

       for(i=0; i<10; i++)
       {
          mmc_read_sector(i);      // Odczytaj sektor o adresie w zmiennej i
          send_buf(512);         // Wyślij dane przez UART
          eol();
       }
       while(1);            // Koniec pracy
    }


    chodzi mi konkretnie o uart co sie tam dzieje??pomoze mi ktos???

    Kod proszę umieszczać w znacznikach code. Przeniosłem z Programowanie Ogólne - krzychoocpp
  • #2
    maly_elektronik
    Level 23  
    A czego konkretnie nie rozumiesz w tym kodzie :?:
    Sprecyzuj trochę bo nie wiem od czego mam zacząć :?: Którego miejsca nie rozumiesz :?: