diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio_capture.c')
-rw-r--r-- | c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio_capture.c | 255 |
1 files changed, 0 insertions, 255 deletions
diff --git a/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio_capture.c b/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio_capture.c deleted file mode 100644 index 10528c1bcc..0000000000 --- a/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/pio_capture.c +++ /dev/null @@ -1,255 +0,0 @@ -/* ---------------------------------------------------------------------------- */ -/* Atmel Microcontroller Software Support */ -/* SAM Software Package License */ -/* ---------------------------------------------------------------------------- */ -/* Copyright (c) 2015, Atmel Corporation */ -/* */ -/* All rights reserved. */ -/* */ -/* Redistribution and use in source and binary forms, with or without */ -/* modification, are permitted provided that the following condition is met: */ -/* */ -/* - Redistributions of source code must retain the above copyright notice, */ -/* this list of conditions and the disclaimer below. */ -/* */ -/* Atmel's name may not be used to endorse or promote products derived from */ -/* this software without specific prior written permission. */ -/* */ -/* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR */ -/* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE */ -/* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, */ -/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */ -/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ -/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */ -/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ -/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ -/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* ---------------------------------------------------------------------------- */ - -/** \addtogroup pio_capture_module Working with PIO Parallel Capture Mode - * \ingroup peripherals_module - * The PIO Parallel Capture Mode driver provides the interface to configure - * and use the PIO Parallel Capture Mode peripheral.\n - * - * The PIO Controller integrates an interface able to read data from a CMOS digital - * image sensor, a high-speed parallel ADC, a DSP synchronous port in synchronous - * mode, etc.... For better understanding and to ease reading, the following - * description uses an example with a CMOS digital image sensor - * - * To use the PIO Parallel Capture, the user has to follow these few steps: - * <ul> - * <li> Enable PIOA peripheral clock </li> - * <li> Configure the PDC </li> - * <li> Configure the PIO Capture interrupt </li> - * <li> Enable the PDC </li> - * <li> Enable the PIO Capture </li> - * <li> Wait for interrupt </li> - * <li> Disable the interrupt </li> - * <li> Read the DATA </li> - * </ul> - * - * For more accurate information, please look at the PIO Parallel Capture Mode - * section of the Datasheet. - * - * <b>API Usage:</b> - * - * -# Configurate the interrupt for PIOA, can be done by - * PIO_InitializeInterrupts() - * -# Initialize the PIO Parallel Capture API by filing the SpioCaptureInit - * structure - * options: - * - alwaysSampling: for sample data with or without take in account - * ENABLE pins. - * - halfSampling: for sample all data or only one time out of two - * -# Call PIO_CaptureInit() for init and enable the PDC, init the PIO capture. - * -# Call PIO_CaptureEnable() for enable the PIO Parallel Capture. - * -# When an interrupt is received, the PIO_CaptureHandler() is call and the - * respective callback is launch. - * -# When the transfer is complete, the user need to disable interrupt with - * PIO_CaptureDisableIt(). Otherwise, the PDC will send an interrupt. - * -# The data receive by the PIO Parallel Capture is inside the buffer passed - * in the PIO_CaptureInit(). - * - * Related files :\n - * \ref pio_capture.c\n - * \ref pio_capture.h\n - */ -/*@{*/ -/*@}*/ -/** - * \file - * - * Implementation of PIO Parallel Capture. - * - */ - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "chip.h" - -#include <assert.h> - -#define PIO_PCISR_RXBUFF (0x1u<<3) -#define PIO_PCISR_ENDRX (0x1u<<2) -/*---------------------------------------------------------------------------- - * Local Functions - *----------------------------------------------------------------------------*/ -/** Copy the API structure for interrupt handler */ -static SpioCaptureInit *_PioCaptureCopy; - -/*---------------------------------------------------------------------------- - * Global Functions - *----------------------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------*/ -/** - * \brief The PIO_CaptureHandler must be called by the PIO Capture Interrupt - * Service Routine with the corresponding PIO Capture instance. - */ -/*----------------------------------------------------------------------------*/ -extern void PIO_CaptureHandler(void) -{ - volatile uint32_t pio_captureSr; - uint32_t k; - - /* Read the status register*/ - pio_captureSr = PIOA->PIO_PCISR; - k = pio_captureSr; - pio_captureSr = k & PIOA->PIO_PCIMR; - - if (pio_captureSr & PIO_PCISR_DRDY) { - /* Parallel Capture Mode Data Ready */ - if (_PioCaptureCopy->CbkDataReady != NULL) - _PioCaptureCopy->CbkDataReady(_PioCaptureCopy); - else - TRACE_DEBUG("IT PIO Capture Data Ready received (no callback)\n\r"); - } - - if (pio_captureSr & PIO_PCISR_OVRE) { - /* Parallel Capture Mode Overrun Error */ - if (_PioCaptureCopy->CbkOverrun != NULL) - _PioCaptureCopy->CbkOverrun(_PioCaptureCopy); - else - TRACE_DEBUG("IT PIO Capture Overrun Error received (no callback)\n\r"); - } - - if (pio_captureSr & PIO_PCISR_RXBUFF) { - /* Reception Buffer Full */ - if (_PioCaptureCopy->CbkBuffFull != NULL) - _PioCaptureCopy->CbkBuffFull(_PioCaptureCopy); - else { - TRACE_DEBUG("IT PIO Capture Reception Buffer Full received \ - (no callback)\n\r"); - } - } - - if (pio_captureSr & PIO_PCISR_ENDRX) { - /* End of Reception Transfer */ - if (_PioCaptureCopy->CbkEndReception != NULL) - _PioCaptureCopy->CbkEndReception(_PioCaptureCopy); - else { - TRACE_DEBUG("IT PIO Capture End of Reception Transfer \ - received (no callback)\n\r"); - } - } -} - -/*----------------------------------------------------------------------------*/ -/** - * \brief Disable Interrupt of the PIO Capture - * \param itToDisable : Interrupt to disable - */ -/*----------------------------------------------------------------------------*/ -void PIO_CaptureDisableIt(uint32_t itToDisable) -{ - /* Parallel capture mode is enabled */ - PIOA->PIO_PCIDR = itToDisable; -} - -/*----------------------------------------------------------------------------*/ -/** - * \brief Enable Interrupt of the PIO Capture - * \param itToEnable : Interrupt to enable - */ -/*----------------------------------------------------------------------------*/ -void PIO_CaptureEnableIt(uint32_t itToEnable) -{ - /* Parallel capture mode is enabled */ - PIOA->PIO_PCIER = itToEnable; -} - -/*----------------------------------------------------------------------------*/ -/** - * \brief Enable the PIO Capture - */ -/*----------------------------------------------------------------------------*/ -void PIO_CaptureEnable(void) -{ - /* PDC: Receive Pointer Register */ - // PIOA->PIO_RPR = (uint32_t)_PioCaptureCopy->pData; - // /* PDC: Receive Counter Register */ - // /* Starts peripheral data transfer if corresponding channel is active */ - // PIOA->PIO_RCR = PIO_RCR_RXCTR(_PioCaptureCopy->dPDCsize); - - /* Parallel capture mode is enabled */ - PIOA->PIO_PCMR |= PIO_PCMR_PCEN; -} - -/*----------------------------------------------------------------------------*/ -/** - * \brief Disable the PIO Capture - */ -/*----------------------------------------------------------------------------*/ -void PIO_CaptureDisable(void) -{ - /* Parallel capture mode is disabled */ - PIOA->PIO_PCMR &= (uint32_t)(~PIO_PCMR_PCEN); -} - -/*----------------------------------------------------------------------------*/ -/** - * \brief Initialize the PIO Capture - * \param dsize : - * 0 = The reception data in the PIO_PCRHR register is a BYTE (8-bit). - * 1 = The reception data in the PIO_PCRHR register is a HALF-WORD (16-bit). - * 2/3 = The reception data in the PIO_PCRHR register is a WORD (32-bit). - * \param alwaysSampling: ALWYS: Parallel Capture Mode Always Sampling - * 0 = The parallel capture mode samples the data when both data enables are active. - * 1 = The parallel capture mode samples the data whatever the data enables are. - * \param halfSampling: HALFS: Parallel Capture Mode Half Sampling - * 0 = The parallel capture mode samples all the data. - * 1 = The parallel capture mode samples the data only one time out of two. - * \param modeFirstSample: FRSTS: Parallel Capture Mode First Sample - * This bit is useful only if the HALFS bit is set to 1. If data are numbered - * in the order that they are received with an index from 0 to n: - * 0 = Only data with an even index are sampled. - * 1 = Only data with an odd index are sampled. - */ -/*----------------------------------------------------------------------------*/ -void PIO_CaptureInit(SpioCaptureInit *pInit) -{ - PMC_EnablePeripheral(ID_PIOA); - - assert((pInit->dsize < 0x4)); - assert((pInit->alwaysSampling < 2)); - assert((pInit->halfSampling < 2)); - assert((pInit->modeFirstSample < 2)); - /* Copy the API structure for interrupt handler */ - _PioCaptureCopy = pInit; - - if (pInit->CbkDataReady != NULL) - PIOA->PIO_PCIER = PIO_PCISR_DRDY; - - if (pInit->CbkOverrun != NULL) - PIOA->PIO_PCIER = PIO_PCISR_OVRE; - - if (pInit->CbkEndReception != NULL) - PIOA->PIO_PCIER = PIO_PCISR_ENDRX; - - if (pInit->CbkBuffFull != NULL) - PIOA->PIO_PCIER = PIO_PCISR_RXBUFF; -} - |