X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=bertos%2Fhw%2Fhw_afsk.h;h=e31c5bfd67077721f9f4737e25ef1597b0da8c0e;hb=2a398044dd1d7b2af34a96c19ad378c25b546579;hp=1ffed2fd043e5101d6e7f21ea57e013ae5056808;hpb=e1aa79e276934cbaceeb77a85b945074e3c1bbc8;p=bertos.git diff --git a/bertos/hw/hw_afsk.h b/bertos/hw/hw_afsk.h index 1ffed2fd..e31c5bfd 100644 --- a/bertos/hw/hw_afsk.h +++ b/bertos/hw/hw_afsk.h @@ -40,47 +40,80 @@ #ifndef HW_AFSK_H #define HW_AFSK_H +#include "cfg/cfg_arch.h" + #if !(ARCH & ARCH_UNITTEST) #warning TODO:This is an example implementation, you must implement it! - #define AFSK_ADC_INIT() do { /* Implement me */ } while (0) + + /** + * Initialize the specified channel of the ADC for AFSK needs. + * The adc should be configured to have a continuos stream of convertions. + * For every convertion there must be an ISR that read the sample + * and call afsk_adc_isr(), passing the context and the sample. + * + * \param ch channel to be used for AFSK demodulation. + * \param ctx AFSK context (\see Afsk). This parameter must be saved and + * passed back to afsk_adc_isr() for every convertion. + */ + #define AFSK_ADC_INIT(ch, ctx) do { (void)ch, (void)ctx; } while (0) #define AFSK_STROBE_INIT() do { /* Implement me */ } while (0) #define AFSK_STROBE_ON() do { /* Implement me */ } while (0) #define AFSK_STROBE_OFF() do { /* Implement me */ } while (0) - #define DEFINE_AFSK_ADC_ISR() void afsk_adc_isr(void) + /** + * Initialize the specified channel of the DAC for AFSK needs. + * The DAC has to be configured in order to call an ISR for every sample sent. + * The DAC doesn't have to start the IRQ immediatly but have to wait + * the AFSK driver to call AFSK_DAC_IRQ_START(). + * The ISR must then call afsk_dac_isr() passing the AFSK context. + * \param ch DAC channel to be used for AFSK modulation. + * \param ctx AFSK context (\see Afsk). This parameter must be saved and + * passed back to afsk_dac_isr() for every convertion. + */ + #define AFSK_DAC_INIT(ch, ctx) do { (void)ch, (void)ctx; } while (0) + + /** + * Start DAC convertions on channel \a ch. + * \param ch DAC channel. + */ + #define AFSK_DAC_IRQ_START(ch) do { (void)ch; /* Implement me */ } while (0) - #define AFSK_READ_ADC() (0) + /** + * Stop DAC convertions on channel \a ch. + * \param ch DAC channel. + */ + #define AFSK_DAC_IRQ_STOP(ch) do { (void)ch; /* Implement me */ } while (0) - #define DEFINE_AFSK_DAC_ISR() void afsk_dac_isr(void) - #define AFSK_DAC_IRQ_START() do { /* Implement me */ } while (0) - #define AFSK_DAC_IRQ_STOP() do { /* Implement me */ } while (0) - #define AFSK_SET_DAC(val) do { (void)val; } while (0) + /** + * Set the next DAC value for channel \a ch. + * This macro is called by afsk_dac_isr() to set the next DAC output value. + * \param ch DAC channel. + * \param val Next DAC output value for channel. + */ + #define AFSK_DAC_SET(ch, val) do { (void)ch; (void)val; } while (0) #else /* (ARCH & ARCH_UNITTEST) */ #include + #include + /* For test */ - extern int8_t afsk_adc_val; extern uint32_t data_written; extern FILE *fp_dac; extern bool afsk_tx_test; - #define AFSK_ADC_INIT() do { } while (0) + #define AFSK_ADC_INIT(ch, ctx) do { (void)ch, (void)ctx; } while (0) #define AFSK_STROBE_INIT() /* Implement me */ #define AFSK_STROBE_ON() /* Implement me */ #define AFSK_STROBE_OFF() /* Implement me */ - void afsk_adc_isr(void); - #define DEFINE_AFSK_ADC_ISR() void afsk_adc_isr(void) - - #define AFSK_READ_ADC() (afsk_adc_val) - - #define DEFINE_AFSK_DAC_ISR() void afsk_dac_isr(void) - #define AFSK_DAC_IRQ_START() do { afsk_tx_test = true; } while (0) - #define AFSK_DAC_IRQ_STOP() do { afsk_tx_test = false; } while (0) - #define AFSK_SET_DAC(_val) \ + #define AFSK_DAC_INIT(ch, ctx) do { (void)ch, (void)ctx; } while (0) + #define AFSK_DAC_IRQ_START(ch) do { (void)ch; afsk_tx_test = true; } while (0) + #define AFSK_DAC_IRQ_STOP(ch) do { (void)ch; afsk_tx_test = false; } while (0) + #define AFSK_DAC_SET(ch, _val) \ do { \ + (void)ch; \ int8_t val = (_val) - 128; \ ASSERT(fwrite(&val, 1, sizeof(val), fp_dac) == sizeof(val)); \ data_written++; \