#define DS_PIN_MASK (1U << 7) // Unfortunately, this cannot be inferred from the Pin constant
#define DS_DMA DMA1
#define DS_DMA_CHANNEL LL_DMA_CHANNEL_6
-#define DS_DEBUG
+#undef DS_DEBUG
#ifdef DS_DEBUG
#define DEBUG debug_printf
LL_TIM_SetAutoReload(TIM3, 999);
// Pull line down and start timer
- LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
LL_TIM_EnableCounter(TIM3);
+ LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
// Wait until the timer expires
while (LL_TIM_IsEnabledCounter(TIM3))
{
LL_TIM_OC_SetCompareCH2(TIM3, ((b & m) ? 1 : 89)); // 1: 1μs pulse, 0: 89μs pulse
LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_FORCED_ACTIVE);
- LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
LL_TIM_EnableCounter(TIM3);
+ LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
while (LL_TIM_IsEnabledCounter(TIM3))
;
}
LL_DMA_SetDataLength(DS_DMA, DS_DMA_CHANNEL, 1);
LL_DMA_EnableChannel(DS_DMA, DS_DMA_CHANNEL);
LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_FORCED_ACTIVE);
- LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
LL_TIM_EnableCounter(TIM3);
+ LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
while (LL_TIM_IsEnabledCounter(TIM3))
;
- debug_printf("XXX %08x\n", ds_dma_buffer);
+ DEBUG("XXX %08x\n", ds_dma_buffer);
if (ds_dma_buffer & DS_PIN_MASK)
out |= m;
LL_DMA_DisableChannel(DS_DMA, DS_DMA_CHANNEL);
for (uint i=0; i<n; i++)
{
uint b = ds_recv_byte();
+ // debug_printf("%02x ", b);
ds_buf[i] = b;
for (uint j=0; j<8; j++)
{
b >>= 1;
}
}
+ // debug_printf("\n");
if (crc)
{
ds_send_byte(0x33);
ds_recv_block(8);
- for(;;);
-
// FIXME: Configure precision
for (;;)