Mam problem nie rozumiem kilku funkcji w programie do obslugi karty MMC.
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
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