mbed library sources
Dependents: Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more
Superseded
This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.
Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.
If you are looking for a stable and tested release, please import one of the official mbed library releases:
Import librarymbed
The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Diff: targets/hal/TARGET_Atmel/TARGET_SAM21/dma_api_HAL.h
- Revision:
- 579:53297373a894
diff -r dd2bc6eabbef -r 53297373a894 targets/hal/TARGET_Atmel/TARGET_SAM21/dma_api_HAL.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/hal/TARGET_Atmel/TARGET_SAM21/dma_api_HAL.h Wed Jul 01 09:45:11 2015 +0100 @@ -0,0 +1,106 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _DMA_API_HAL_H +#define _DMA_API_HAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <compiler.h> +#include "dma.h" + +enum dma_status_flags { + DMA_NOT_USED = (uint32_t)1, + DMA_ALLOCATED = (DMA_NOT_USED << 1), + DMA_TEMPORARY = (DMA_NOT_USED << 2), + DMA_ERROR = (DMA_NOT_USED << 3), +}; + +/* No other capabilities supported now */ +#define DMA_CAP_NONE 0 + +#define DMA_ADDRESS_INC_DISABLE 0 +#define DMA_ADDRESS_INC_ENABLE 1 + +#define DMA_TRANSFER_ERROR ((uint32_t)1 << 1) +#define DMA_TRANSFER_COMPLETE ((uint32_t)1 << 2) + +#define DMA_EVENT_ALL (DMA_TRANSFER_ERROR | DMA_TRANSFER_COMPLETE) + + +COMPILER_ALIGNED(16) +struct dma_instance_s { + struct dma_resource resource; + DmacDescriptor descriptor; + uint8_t status; + uint32_t events; + uint32_t handler; +}; + +/** Setup a DMA descriptor for specified resource + * + * @param[in] channel_index DMA channel id + * @param[in] src source address + * @param[in] src_inc_enable source address auto increment enable flag + * @param[in] desc destination address + * @param[in] desc_inc_enable destination address auto increment enable flag + * @param[in] length length of data to be transferred + * @param[in] beat_size beat size to be set + * @return void + */ +void dma_setup_transfer(uint8_t channelid, uint32_t src, bool src_inc_enable, uint32_t desc, bool desc_inc_enable, uint32_t length, uint8_t beat_size); + +/** Start DMA transfer + * + * Kick starts transfer in DMA channel with specified channel id + * @param[in] channelid Channel id of DMA channel + * @return non zero if success otherwise zero + */ +bool dma_start_transfer(int channelid); + +/** DMA channel busy check + * + * To check whether DMA channel is busy with a job or not + * @param[in] channelid Channel id of DMA channel + * @return non zero if busy otherwise zero + */ +bool dma_busy(int channelid); + +/** DMA channel transfer completion check + * + * To check whether DMA channel job is completed or not + * @param[in] channelid Channel id of DMA channel + * @return non zero if busy otherwise zero + */ +bool dma_is_transfer_complete(int channelid); + +/** Registers callback function for DMA + * + * Registers callback function for DMA for specified events + * @param[in] channelid Channel id of DMA channel + * @param[in] handler Callback function pointer + * @param[in] event Events mask + * @return void + */ +void dma_set_handler(int channelid, uint32_t handler, uint32_t event); + +#ifdef __cplusplus +} +#endif + +#endif /* _DMA_API_HAL_H */ \ No newline at end of file