FAQ | Points | Add... | Recent posts | Search | Register | Log in


[lpc1768][c] wysyłanie danych na port z wykorzystaniem timera i układu dma


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> ARM Microcontrollers -> [lpc1768][c] wysyłanie danych na port z wykorzystaniem timera i układu dma
Author
Message
sbady
Poziom 3
Poziom 3


Joined: 23 Aug 2009
Posts: 7

Post#1 Post from the author of the topic 10 Jan 2012 21:12   

[lpc1768][c] wysyłanie danych na port z wykorzystaniem timera i układu dma


Witam, zacząłem ostatnio zabawę z arm'ami a dokładniej z procesorem lpc1768, przeczytałem już trochę dokumentacji jednak niektóre aspekty są dla mnie niejasne i byłbym wdzięczny gdyby ktoś obyty z tematem wytłumaczył mi co nieco, ale do rzeczy, na stronie http://msys-mv.blogspot.com/2011/01/dma-in-lpc17xx.html znalazłem fajny opis dotyczący wysyłania danych na port z wykorzystaniem układu dma i timera, program wygląda tak:

Code C - [expand]
LPC_SC->PCONP |= 1 << 2; // włączenie timera
LPC_SC->PCLKSEL0 |= 0x01 << 4; // ustawienie zegara dla timera
LPC_TIM1->MR0 = 1 << 25; // ustawienie wartości do której timer ma zliczać
LPC_TIM1->MCR = 1 << 1; // zresetuj timer gdy timer doliczy do wartości zapisanej w rejestrze MR0


póki co wszystko jasne, teraz ta gorsza część

Code C - [expand]
LPC_SC->PCONP |= 1 << 29; //podłączenie układu dma do zasilania
LPC_GPDMA->DMACConfig |= 1 << 0; //włączenie dma
LPC_GPDMA->DMACSync |= 1 << 10; //pierwsza niejasność
LPC_SC->DMAREQSEL |= 1 << 2; // w momencie dopasowania wartości timera do wartości zapisanej w MR0 wysyłane jest żądanie transmisji do układu dma
LPC_GPDMA->DMACIntErrClr |= 0xff; // wyzerowanie flag błędów przerwań
LPC_GPDMA->DMACIntTCClear |= 0xff; // wyzerowanie flag przerwań
LPC_GPDMACH0->DMACCDestAddr = (uint32_t) &(LPC_GPIO1->FIOPIN3); // ustawienie portu jako adres źródłowy dla układu dma
LPC_GPDMACH0->DMACCSrcAddr = (uint32_t) &data[0]; // ustawienie pierwszego elementu tablicy data jako adres źródłowy dla układu dma
LPC_GPDMACH0->DMACCLLI = 0; // LLI nie wykorzystywane tutaj
LPC_GPDMACH0->DMACCControl = 200 | ( 1 << 26 ); // 200 - ilość bajtów do przesłania, 1<<26 inkrementuj adres źródłowy
LPC_GPDMACH0->DMACCConfig = ( 10 << 6 ) | ( 1 << 11); // druga niejaność, 1<<11 - typ transferu (mem2per)
LPC_GPDMACH0->DMACCConfig |= 1; //włączenie kamału dma


i teraz mam pytanie dotyczące tych dwóch niejasności czyli
a)
Code C - [expand]
LPC_GPDMA->DMACSync |= 1 << 10;


w dokumentacji można przeczytać:

Code:
15:0   DMACSync    0 - synchronization logic for the corresponding DMA request signals are enabled.
                   1 - synchronization logic for the corresponding request line signals are disabled.

czyli jak mniemam zapisanie 1 do rejestru DMACSync wyłącza logikę synchronizacji na konkretne żądania (tutaj na żądanie timera 1) (?) dlaczego akurat w tym przypadku jest to wyłączane??

oraz

b)
Code C - [expand]
LPC_GPDMACH0->DMACCConfig = ( 10 << 6 )


w dokumentacji odnośnie tych bitów jest napisane:
Code:
10:6    DestPeripheral    Destination peripheral. This value selects the DMA destination request peripheral. This field is ignored if the destination of the transfer is to memory. See Table 543 for peripheral identification.


EDIT 2012.01.11 14:50

chodzi tutaj zapewne o to, że kanał dma (tutaj 0) ma zareagować na żądanie przesłania danych wygenerowane przez timer1 ale dlaczego umieszcza się adres timera1 w DestPeripheral a nie w SrcPeripheral (tak jak na to wskazywałaby logika bo przecież to timer1 generuje żądanie czyli jest tak jakby źródłem żądania)? Jak dla mnie jest to zupełnie nie jasne i czy mógłby mi ktoś wytłumaczyć jak mam rozumować wartości, które zapisuje się do DestPeripheral i SrcPeripheral rejestru DMACC0Config?

pozdrawiam
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 10 Jan 2012 21:12   





Back to top
   
sbady
Poziom 3
Poziom 3


Joined: 23 Aug 2009
Posts: 7

Post#2 Post from the author of the topic 26 Jan 2012 22:28   

Re: [lpc1768][c] wysyłanie danych na port z wykorzystaniem timera i układu dma


nikt? nic? czyli mam rozumieć że wysyłanie danych na port z wykorzystaniem dma i np timera nie jest wykorzystywane?
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 26 Jan 2012 22:28   





Back to top
   
sbady
Poziom 3
Poziom 3


Joined: 23 Aug 2009
Posts: 7

Post#3 Post from the author of the topic 06 Feb 2012 21:05   

Re: [lpc1768][c] wysyłanie danych na port z wykorzystaniem timera i układu dma


to sobie sam odpowiem... pierwszą niejasność wyjaśnia zdanie zamieszczone na stronie dotyczącej architektury ARM
Quote:
You must use synchronization logic when the peripheral generating the DMA request runs on a different clock to the DMAC. For peripherals running on the same clock as the DMAC, disabling the synchronization logic improves the DMA request response time.

ogólnie rzecz biorąc powyżej zamieszczony kod będzie działał poprawnie również wtedy, gdy bit synchronizacji nie będzie ustawiony (gdy synchronizacja będzie włączona), druga niejasność jest wyjaśniona w komentarzach autora opisu konfiguracji dma, do którego link zamieściłem w pierwszym poście, pozdrawiam
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> ARM Microcontrollers -> [lpc1768][c] wysyłanie danych na port z wykorzystaniem timera i układu dma
Page 1 of 1
Similar topics
stm32f407 - jaka maxymalna częstotliwość transferu DMA (PORT-RAM) (43)
Konwersja danych w rs232, BASCOM, wysyłanie danych. (3)
RS 232 transmisja danych. Wysyłanie danych, odbieranie informacji z czujników. (4)
[AT91SAM7S] Przykład kodu z wykorzystaniem PDC (DMA) (5)
Przetwornik C/A z wykorzystaniem timera (9)
[Atmega32][C]+[C#]Wysyłanie tablicy danych przez port szeregowy (27)
[Java] Wysyłanie danych na port COM niebuforowanych. (1)
Re: C++ WYSYŁANIE konkretnej liczby na port (2)
wysyłanie bajtu na port com (ster.PWM) (4)
Visual studio, wysyłanie wartości hex na port com (4)

Page generation time: 0.154 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed