![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Versão atual 13-12-2013.
Dependencies: EthernetInterface mbed-rtos mbed
Drivers/dma.c@0:65c41a68b49a, 2013-12-13 (annotated)
- Committer:
- rebonatto
- Date:
- Fri Dec 13 11:42:59 2013 +0000
- Revision:
- 0:65c41a68b49a
Versao atual 13-12-2013.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebonatto | 0:65c41a68b49a | 1 | /* |
rebonatto | 0:65c41a68b49a | 2 | * dma.c |
rebonatto | 0:65c41a68b49a | 3 | * |
rebonatto | 0:65c41a68b49a | 4 | * Created on: 03/07/2011 |
rebonatto | 0:65c41a68b49a | 5 | * Author: francisco |
rebonatto | 0:65c41a68b49a | 6 | */ |
rebonatto | 0:65c41a68b49a | 7 | #include <LPC17xx.h> |
rebonatto | 0:65c41a68b49a | 8 | #include "dma.h" |
rebonatto | 0:65c41a68b49a | 9 | |
rebonatto | 0:65c41a68b49a | 10 | #define LPC_GPDMACH ((LPC_GPDMACH_TypeDef **) LPC_GPDMACH0_BASE ) |
rebonatto | 0:65c41a68b49a | 11 | |
rebonatto | 0:65c41a68b49a | 12 | void init_dma() |
rebonatto | 0:65c41a68b49a | 13 | { |
rebonatto | 0:65c41a68b49a | 14 | LPC_SC->PCONP |= 1<<29; //Power GPDMA module |
rebonatto | 0:65c41a68b49a | 15 | |
rebonatto | 0:65c41a68b49a | 16 | LPC_GPDMA->DMACConfig = 1; //Enable GPDMA |
rebonatto | 0:65c41a68b49a | 17 | |
rebonatto | 0:65c41a68b49a | 18 | //Clear any previous interrupts |
rebonatto | 0:65c41a68b49a | 19 | LPC_GPDMA->DMACIntTCClear = 0xFF; |
rebonatto | 0:65c41a68b49a | 20 | LPC_GPDMA->DMACIntErrClr = 0xFF; |
rebonatto | 0:65c41a68b49a | 21 | |
rebonatto | 0:65c41a68b49a | 22 | NVIC_SetPriority(DMA_IRQn,(1<<__NVIC_PRIO_BITS) - 1); |
rebonatto | 0:65c41a68b49a | 23 | NVIC_EnableIRQ(DMA_IRQn); |
rebonatto | 0:65c41a68b49a | 24 | } |
rebonatto | 0:65c41a68b49a | 25 | |
rebonatto | 0:65c41a68b49a | 26 | void setup_channel(dmaLinkedListNode* pList,int ch,int src,int dst) |
rebonatto | 0:65c41a68b49a | 27 | { |
rebonatto | 0:65c41a68b49a | 28 | //Initialize the channel with previously configured LL; |
rebonatto | 0:65c41a68b49a | 29 | LPC_GPDMACH0->DMACCSrcAddr = pList->sourceAddr; |
rebonatto | 0:65c41a68b49a | 30 | LPC_GPDMACH0->DMACCDestAddr = pList->destAddr; |
rebonatto | 0:65c41a68b49a | 31 | LPC_GPDMACH0->DMACCControl = pList->dmaControl; |
rebonatto | 0:65c41a68b49a | 32 | LPC_GPDMACH0->DMACCLLI = (unsigned long int) pList & 0xFFFFFFFC; //Lower bits must be 0 |
rebonatto | 0:65c41a68b49a | 33 | |
rebonatto | 0:65c41a68b49a | 34 | int transfer_type; |
rebonatto | 0:65c41a68b49a | 35 | if(src == DMA_MEMORY && dst != DMA_MEMORY) |
rebonatto | 0:65c41a68b49a | 36 | { |
rebonatto | 0:65c41a68b49a | 37 | transfer_type = DMA_MEMORY_TO_PERIPHERAL; |
rebonatto | 0:65c41a68b49a | 38 | src = 0; |
rebonatto | 0:65c41a68b49a | 39 | } |
rebonatto | 0:65c41a68b49a | 40 | else if(src != DMA_MEMORY && dst == DMA_MEMORY) |
rebonatto | 0:65c41a68b49a | 41 | { |
rebonatto | 0:65c41a68b49a | 42 | transfer_type = DMA_PERIPHERAL_TO_MEMORY; |
rebonatto | 0:65c41a68b49a | 43 | dst = 0; |
rebonatto | 0:65c41a68b49a | 44 | } |
rebonatto | 0:65c41a68b49a | 45 | else if(src == DMA_MEMORY && dst == DMA_MEMORY) |
rebonatto | 0:65c41a68b49a | 46 | { |
rebonatto | 0:65c41a68b49a | 47 | transfer_type = DMA_MEMORY_TO_MEMORY; |
rebonatto | 0:65c41a68b49a | 48 | src=dst = 0; |
rebonatto | 0:65c41a68b49a | 49 | } |
rebonatto | 0:65c41a68b49a | 50 | else if(src != DMA_MEMORY && dst != DMA_MEMORY) |
rebonatto | 0:65c41a68b49a | 51 | transfer_type = DMA_PERIPHERAL_TO_PERIPHERAL; |
rebonatto | 0:65c41a68b49a | 52 | |
rebonatto | 0:65c41a68b49a | 53 | //Set up all relevant bits |
rebonatto | 0:65c41a68b49a | 54 | LPC_GPDMACH0->DMACCConfig = (src<<1) | (dst<<5) | (transfer_type<<11) | (1<<15); |
rebonatto | 0:65c41a68b49a | 55 | |
rebonatto | 0:65c41a68b49a | 56 | //Finally, enable the channel - |
rebonatto | 0:65c41a68b49a | 57 | LPC_GPDMACH0->DMACCConfig |= 1<<0; |
rebonatto | 0:65c41a68b49a | 58 | } |
rebonatto | 0:65c41a68b49a | 59 | |
rebonatto | 0:65c41a68b49a | 60 | void stop_channel() |
rebonatto | 0:65c41a68b49a | 61 | { |
rebonatto | 0:65c41a68b49a | 62 | LPC_GPDMACH0->DMACCConfig &= ~(1<<0); |
rebonatto | 0:65c41a68b49a | 63 | } |