Versão limpa em 04/09/2014. Telnet funcionando.
Dependencies: EthernetInterface mbed-rtos mbed NTPClient
Drivers/dma.c@43:69afea5f5a4d, 2016-01-18 (annotated)
- Committer:
- rebonatto
- Date:
- Mon Jan 18 18:26:03 2016 +0000
- Revision:
- 43:69afea5f5a4d
- Parent:
- 0:66d8bd1f9d4c
Aquisi??o sem DMA, 256 amostras.; Buffer simples com copia de buffer para calculo da FFT.; Com telnetr e TFTP ativos. Telnet funcionando sem travar.; Vers?o com WhatDog.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebonatto | 0:66d8bd1f9d4c | 1 | /* |
rebonatto | 0:66d8bd1f9d4c | 2 | * dma.c |
rebonatto | 0:66d8bd1f9d4c | 3 | * |
rebonatto | 0:66d8bd1f9d4c | 4 | * Created on: 03/07/2011 |
rebonatto | 0:66d8bd1f9d4c | 5 | * Author: francisco |
rebonatto | 0:66d8bd1f9d4c | 6 | */ |
rebonatto | 0:66d8bd1f9d4c | 7 | #include <LPC17xx.h> |
rebonatto | 0:66d8bd1f9d4c | 8 | #include "dma.h" |
rebonatto | 0:66d8bd1f9d4c | 9 | |
rebonatto | 0:66d8bd1f9d4c | 10 | #define LPC_GPDMACH ((LPC_GPDMACH_TypeDef **) LPC_GPDMACH0_BASE ) |
rebonatto | 0:66d8bd1f9d4c | 11 | |
rebonatto | 0:66d8bd1f9d4c | 12 | void init_dma() |
rebonatto | 0:66d8bd1f9d4c | 13 | { |
rebonatto | 0:66d8bd1f9d4c | 14 | LPC_SC->PCONP |= 1<<29; //Power GPDMA module |
rebonatto | 0:66d8bd1f9d4c | 15 | |
rebonatto | 0:66d8bd1f9d4c | 16 | LPC_GPDMA->DMACConfig = 1; //Enable GPDMA |
rebonatto | 0:66d8bd1f9d4c | 17 | |
rebonatto | 0:66d8bd1f9d4c | 18 | //Clear any previous interrupts |
rebonatto | 0:66d8bd1f9d4c | 19 | LPC_GPDMA->DMACIntTCClear = 0xFF; |
rebonatto | 0:66d8bd1f9d4c | 20 | LPC_GPDMA->DMACIntErrClr = 0xFF; |
rebonatto | 0:66d8bd1f9d4c | 21 | |
rebonatto | 0:66d8bd1f9d4c | 22 | NVIC_SetPriority(DMA_IRQn,(1<<__NVIC_PRIO_BITS) - 1); |
rebonatto | 0:66d8bd1f9d4c | 23 | NVIC_EnableIRQ(DMA_IRQn); |
rebonatto | 0:66d8bd1f9d4c | 24 | } |
rebonatto | 0:66d8bd1f9d4c | 25 | |
rebonatto | 0:66d8bd1f9d4c | 26 | void setup_channel(dmaLinkedListNode* pList,int ch,int src,int dst) |
rebonatto | 0:66d8bd1f9d4c | 27 | { |
rebonatto | 0:66d8bd1f9d4c | 28 | //Initialize the channel with previously configured LL; |
rebonatto | 0:66d8bd1f9d4c | 29 | LPC_GPDMACH0->DMACCSrcAddr = pList->sourceAddr; |
rebonatto | 0:66d8bd1f9d4c | 30 | LPC_GPDMACH0->DMACCDestAddr = pList->destAddr; |
rebonatto | 0:66d8bd1f9d4c | 31 | LPC_GPDMACH0->DMACCControl = pList->dmaControl; |
rebonatto | 0:66d8bd1f9d4c | 32 | LPC_GPDMACH0->DMACCLLI = (unsigned long int) pList & 0xFFFFFFFC; //Lower bits must be 0 |
rebonatto | 0:66d8bd1f9d4c | 33 | |
rebonatto | 0:66d8bd1f9d4c | 34 | int transfer_type; |
rebonatto | 0:66d8bd1f9d4c | 35 | if(src == DMA_MEMORY && dst != DMA_MEMORY) |
rebonatto | 0:66d8bd1f9d4c | 36 | { |
rebonatto | 0:66d8bd1f9d4c | 37 | transfer_type = DMA_MEMORY_TO_PERIPHERAL; |
rebonatto | 0:66d8bd1f9d4c | 38 | src = 0; |
rebonatto | 0:66d8bd1f9d4c | 39 | } |
rebonatto | 0:66d8bd1f9d4c | 40 | else if(src != DMA_MEMORY && dst == DMA_MEMORY) |
rebonatto | 0:66d8bd1f9d4c | 41 | { |
rebonatto | 0:66d8bd1f9d4c | 42 | transfer_type = DMA_PERIPHERAL_TO_MEMORY; |
rebonatto | 0:66d8bd1f9d4c | 43 | dst = 0; |
rebonatto | 0:66d8bd1f9d4c | 44 | } |
rebonatto | 0:66d8bd1f9d4c | 45 | else if(src == DMA_MEMORY && dst == DMA_MEMORY) |
rebonatto | 0:66d8bd1f9d4c | 46 | { |
rebonatto | 0:66d8bd1f9d4c | 47 | transfer_type = DMA_MEMORY_TO_MEMORY; |
rebonatto | 0:66d8bd1f9d4c | 48 | src=dst = 0; |
rebonatto | 0:66d8bd1f9d4c | 49 | } |
rebonatto | 0:66d8bd1f9d4c | 50 | else if(src != DMA_MEMORY && dst != DMA_MEMORY) |
rebonatto | 0:66d8bd1f9d4c | 51 | transfer_type = DMA_PERIPHERAL_TO_PERIPHERAL; |
rebonatto | 0:66d8bd1f9d4c | 52 | |
rebonatto | 0:66d8bd1f9d4c | 53 | //Set up all relevant bits |
rebonatto | 0:66d8bd1f9d4c | 54 | LPC_GPDMACH0->DMACCConfig = (src<<1) | (dst<<5) | (transfer_type<<11) | (1<<15); |
rebonatto | 0:66d8bd1f9d4c | 55 | |
rebonatto | 0:66d8bd1f9d4c | 56 | //Finally, enable the channel - |
rebonatto | 0:66d8bd1f9d4c | 57 | LPC_GPDMACH0->DMACCConfig |= 1<<0; |
rebonatto | 0:66d8bd1f9d4c | 58 | } |
rebonatto | 0:66d8bd1f9d4c | 59 | |
rebonatto | 0:66d8bd1f9d4c | 60 | void stop_channel() |
rebonatto | 0:66d8bd1f9d4c | 61 | { |
rebonatto | 0:66d8bd1f9d4c | 62 | LPC_GPDMACH0->DMACCConfig &= ~(1<<0); |
rebonatto | 0:66d8bd1f9d4c | 63 | } |