static void App_TaskStart(void *p_arg) { volatile uint32_t status; int8u bufp[7] = {0xc4,0x01,0x01,0x00,0x00,0x00,0x55}; uint8_t *ptr; uint8_t err; (void) p_arg; //系统滴答安装 OS_CPU_SysTickInit(); //初始化信号量 app_eventcreate(); //初始化其他任务 app_taskcreate(); //初始化基础硬件 BSP_Init(); dw1000_init(); { dwtconf temp; temp.config.chan = 3; temp.config.prf = DWT_PRF_16M; temp.config.txPreambLength = DWT_PLEN_256; temp.config.rxPAC = DWT_PAC16; temp.config.rxCode = 5; temp.config.txCode = 5; temp.config.nsSFD = 1; temp.config.dataRate = DWT_BR_850K; temp.config.smartPowerEn = 0; temp.config.phrMode = 0; temp.mode = LOCA_LISTENER; dw1000_config(&temp); } dwt_rxenable(0); USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_CDC_cb, &USR_cb); //dw1000_intenable(); //发送log //Shell_SendDatas(strlen(logstr), logstr); //改变自己优先级 变为工作指示灯 //OSTaskDel(OS_PRIO_SELF); OSTaskChangePrio(OS_PRIO_SELF, OS_LOWEST_PRIO - 4); while(TURE) { // OSTimeDlyHMSM(0, 0, 0, 10); //dwt_writetxdata(127,msg,0); //dwt_writetxfctrl(127,0); //dwt_starttx(DWT_START_TX_IMMEDIATE); // bufp[1] ++; //status = dwt_read32bitreg(SYS_STATUS_ID); ptr = OSQPend(qmsg, 0, &err); if (err == OS_ERR_NONE) { VCP_fops.pIf_DataTx(ptr+1, ptr[0]); free(ptr); } } }
int main(void) { /* * System initializations. * - HAL initialization, this also initializes the configured * device drivers and performs the board-specific initializations. * - Kernel initialization, the main() function becomes a thread * and the RTOS is active. */ halInit(); chSysInit(); // enable usb usbstartup(); //enable debug print thread vInitDebugPrint((BaseSequentialStream *) &SDU1); palClearPad(GPIOA, GPIOA_PIN0); chThdSleepMilliseconds(20000); palSetPad(GPIOA, GPIOA_PIN0); //enable interrupt extStart(&EXTD1, &extcfg); // start thread to be activated by interrupt. start_thd(); bool sender = false; if(palReadPad(GPIOC, GPIOC_PIN5) == PAL_HIGH){ sender = true; } uint8_t rxbuf[4]; dw1000_conf_t config; if(sender){ config.shortaddr.u16 = 0xFA77; } else{ config.shortaddr.u16 = 0xBEEF; //config.shortaddr.u16 = 0xBEFF; } dw.state = UNINITIALIZED; dw1000_euid_t euid; euid.u64 = 1; dw1000_generate_recommended_conf( &default_dw1000_hal, DW1000_DATARATE_850, DW1000_CHANNEL_2, euid, &config); dw.config = &config; dw1000_init(&dw); uint32_t zero = \ DW1000_EVENT_TXFRS | \ DW1000_EVENT_RXDFR | \ DW1000_EVENT_AFFREJ | \ DW1000_EVENT_RXFCE | \ DW1000_EVENT_RXPHE | \ DW1000_EVENT_LDEERR | \ DW1000_EVENT_RXRFSL | \ DW1000_EVENT_RXSFDTO | \ DW1000_EVENT_HPDWARN | \ DW1000_EVENT_TXBERR \ ; dw1000_set_interrupts(&default_dw1000_hal,zero); dw1000_receive(&dw); if(sender){ set_ranging_callback(calibration_cb); palSetPad(GPIOC, GPIOC_PIN8); } else{ palClearPad(GPIOC, GPIOC_PIN8); } int per_loop =0; uint8_t sleep =20; while(1) { //palTogglePad(GPIOC, GPIOC_PIN8); chThdSleepMilliseconds(sleep); dw1000_shortaddr_t dst; if(sender){ dst.u16 = 0xBEEF; request_ranging(&dw, dst); chThdSleepMilliseconds(sleep); dst.u16 =0xBEFF; request_ranging(&dw, dst); } dw1000_get_event_counters(&default_dw1000_hal, counter); if (per_loop == 100){ per_loop = 0; // printf(" PHR_ERRORS: %u \n\r", counter[PHR_ERRORS]); // printf(" RSD_ERRORS: %u \n\r", counter[RSD_ERRORS]); // printf(" FCS_GOOD: %u \n\r", counter[FCS_GOOD]); // printf(" FCS_ERRORS: %u \n\r", counter[FCS_ERRORS]); // printf(" FILTER_REJ: %u \n\r", counter[FILTER_REJECTIONS]); // printf(" RX_OVERRUNS: %u \n\r", counter[RX_OVERRUNS]); // printf(" SFD_TO: %u \n\r", counter[SFD_TIMEOUTS]); // printf(" PREAMBLE_TO: %u \n\r", counter[PREAMBLE_TIMEOUTS]); // printf(" RX_TIMEOUTS: %u \n\r", counter[RX_TIMEOUTS]); // printf(" TX_SENT: %u \n\r", counter[TX_SENT]); // printf(" HPWARN: %u \n\r", counter[HALF_PERIOD_WARNINGS]); // printf(" TX_PWRUP_WARN: %u \n\r", counter[TX_PWRUP_WARNINGS]); } per_loop++; } }