diff --git a/firmware/common/gpdma.c b/firmware/common/gpdma.c new file mode 100644 index 00000000..14fc6406 --- /dev/null +++ b/firmware/common/gpdma.c @@ -0,0 +1,46 @@ +/* + * Copyright 2013 Jared Boone + * + * This file is part of HackRF. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include + +#include + +void gpdma_controller_enable() { + GPDMA_CONFIG |= GPDMA_CONFIG_E(1); + while( (GPDMA_CONFIG & GPDMA_CONFIG_E_MASK) == 0 ); +} + +void gpdma_channel_enable(const uint_fast8_t channel) { + GPDMA_CCONFIG(channel) |= GPDMA_CCONFIG_E(1); +} + +void gpdma_channel_disable(const uint_fast8_t channel) { + GPDMA_CCONFIG(channel) &= ~GPDMA_CCONFIG_E_MASK; + while( (GPDMA_ENBLDCHNS & GPDMA_ENBLDCHNS_ENABLEDCHANNELS(1 << channel)) ); +} + +void gpdma_channel_interrupt_tc_clear(const uint_fast8_t channel) { + GPDMA_INTTCCLEAR = GPDMA_INTTCCLEAR_INTTCCLEAR(1 << channel); +} + +void gpdma_channel_interrupt_error_clear(const uint_fast8_t channel) { + GPDMA_INTERRCLR = GPDMA_INTERRCLR_INTERRCLR(1 << channel); +} diff --git a/firmware/common/gpdma.h b/firmware/common/gpdma.h new file mode 100644 index 00000000..53310456 --- /dev/null +++ b/firmware/common/gpdma.h @@ -0,0 +1,35 @@ +/* + * Copyright 2013 Jared Boone + * + * This file is part of HackRF. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GPDMA_H__ +#define __GPDMA_H__ + +#include + +void gpdma_controller_enable(); + +void gpdma_channel_enable(const uint_fast8_t channel); +void gpdma_channel_disable(const uint_fast8_t channel); + +void gpdma_channel_interrupt_tc_clear(const uint_fast8_t channel); +void gpdma_channel_interrupt_error_clear(const uint_fast8_t channel); + +#endif/*__GPDMA_H__*/