[color=black]Hi All,[/color]
[color=black]I’m working on STM32F103, and I’m using double buffer to validate TDOA[/color] [color=black]algorithm. Label communication frequency is 0.5Hz. But for my anchor, after one or two interrupts are generated, it is no longer generated. And the SYS_STATUS_ID value is 0xFFFFFFFF.[/color]
[color=black]When I receive data using polling, I can receive it all. The relevant code is [/color]
[color=black]while(!((u32_reg_stat = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR | SYS_STATUS_RXOVRR)))[/color]
[color=black]{ };[/color]
[color=black][color=black]if(u32_reg_stat & SYS_STATUS_RXFCG)[/color]
[/color]
[color=black]{[/color]
[color=black]// Clear all receive status bits[/color]
[color=black]….[/color]
[color=black]}[/color]
[color=black]if(u32_reg_stat & SYS_STATUS_RXOVRR)[/color]
[color=black]{[/color]
[color=black]// Clear rx overrun status bits[/color]
[color=black]….[/color]
[color=black]}[/color]
[color=black]if(u32_reg_stat & SYS_STATUS_ALL_RX_ERR)[/color]
[color=black]{[/color]
[color=black]// Clear all error status bits[/color]
[color=black]….[/color]
[color=black][color=black]}[/color][/color]
[color=black]…[/color]
[color=black]I have read a few threads on this topic on the forum. For example, [/color]
[color=black][color=black]https://www.decawave.com/decaforum/showthread.php?tid=32&highlight=0xFFFFFFFF[/color][/color]
[color=black][color=black]https://www.decawave.com/decaforum/showthread.php?tid=1096&highlight=double[/color][/color]
[color=black][color=black]https://www.decawave.com/decaforum/showthread.php?tid=3&highlight=double[/color][/color]
[color=black]I confirm that my SPI is working properly. And my default communication configuration is,[/color]
[color=black]Channel [/color][color=black][size=x-small]5[/size][/color]
[color=black]RX/TX Code: 9[/color]
[color=black]PRF 64M[/color]
[color=black]Rate: 6.8M[/color]
[color=black]Preamble len[/color][color=black][size=x-small]gth[/size][/color][color=black]: [/color][color=black][size=x-small]256[/size][/color]
[color=black]PAC: [/color][color=black][size=x-small]16[/size][/color]
[color=black]standard SFD[/color]
[color=black]standard PHR mode[/color]
[color=black]no smart power[/color]
[color=black]PG delay 0xC[/color][color=black][size=x-small]0[/size][/color]
[color=black]power [/color][color=black][size=small]0x85858585[/size][/color]
[color=black] [/color]
[color=black][size=small]In addition, the interrupt related processing code is as follows,[/size][/color]
[color=black][size=small][color=black]u32_read_stat = dwt_read32bitreg(SYS_STATUS_ID);[/color]
[/size][/color]
[color=black]if(u32_read_stat & SYS_STATUS_RXFCG)[/color]
[color=black]{[/color]
[color=black]// Clear all receive status bits[/color]
[color=black]dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_GOOD); [/color]
[color=black]// Read frame info [/color]
[color=black]u16_finfo16 = dwt_read16bitoffsetreg(RX_FINFO_ID, 0);[/color]
[color=black]// Report frame length [/color]
[color=black]u32_frame_len = u16_finfo16 & RX_FINFO_RXFL_MASK_1023;[/color]
[color=black]//rx reenable[/color]
[color=black]dwt_rxenable(DWT_START_RX_IMMEDIATE | DWT_NO_SYNC_PTRS);[/color]
[color=black]// read rx data[/color]
[color=black]dwt_readrxdata(su8_dw1000_IRQ_rx_buf, u32_frame_len, 0);[/color]
[color=black]// Toggle the Host side Receive Buffer Pointer[/color]
[color=black]dwt_writetodevice(SYS_CTRL_ID, SYS_CTRL_HRBT_OFFSET, 1, &u8_ctrl_regval);[/color]
[color=black]}[/color]
[color=black]if(u32_read_stat & SYS_STATUS_TXFRS)[/color]
[color=black]{[/color]
[color=black]//tx data[/color]
[color=black]gb_dw1000_tx_irq = true;[/color]
[color=black]//Clear tx status bits[/color]
[color=black]}[/color]
[color=black]if(u32_read_stat & SYS_STATUS_RXOVRR) [/color]
[color=black]{[/color]
[color=black]//Clear rx overrun status bit[/color]
[color=black]dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXOVRR);[/color]
[color=black]//[/color] [color=black]turn off the transceiver[/color]
[color=black]dwt_forcetrxoff();[/color]
[color=black]//[/color] [color=black]resets the receiver[/color]
[color=black]dwt_rxreset();[/color]
[color=black]//rx reenable[/color]
[color=black]dwt_rxenable(DWT_START_RX_IMMEDIATE);[/color]
[color=black]}[/color]
[color=black]if(u32_read_stat & SYS_STATUS_ALL_RX_ERR)[/color]
[color=black]{[/color]
[color=black]//Clear error bits[/color]
[color=black]//[/color] [color=black]turn off the transceiver[/color]
[color=black]//[/color] [color=black]resets the receiver[/color]
[color=black]//rx reenable[/color]
[color=black]}[/color]
[color=black] [/color]
[color=black]Where is the problem with my code? Please give some advice.[/color]
[color=black]Thanks.[/color]
[color=black][size=small][color=black]Andrew[/color][/size][/color]