logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega128][C] Obsluga karty mmc.

tomson071 17 Lip 2008 22:01 1394 1
REKLAMA
  • #1 5352770
    tomson071
    Poziom 10  
    Mam problem nie rozumiem kilku funkcji w programie do obslugi karty MMC.


    #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
  • REKLAMA
  • #2 5358720
    maly_elektronik
    Poziom 23  
    A czego konkretnie nie rozumiesz w tym kodzie :?:
    Sprecyzuj trochę bo nie wiem od czego mam zacząć :?: Którego miejsca nie rozumiesz :?:
REKLAMA