/* * Manages the DMA Half Transfer complete interrupt. */ void BSP_AUDIO_IN_HalfTransfer_CallBack(void) { arm_copy_q7((q7_t *)AUDIO_BUFFER_IN, (q7_t *)AUDIO_BUFFER_OUT, AUDIO_BLOCK_SIZE*4); // copy the new recording data for (int i=0;i<AUDIO_BLOCK_SIZE;i++) { audio_buffer[i] = AUDIO_BUFFER_IN[i*2]; } run_kws(); return; }
/* * Manages the DMA Transfer complete interrupt. */ void BSP_AUDIO_IN_TransferComplete_CallBack(void) { arm_copy_q7((q7_t *)AUDIO_BUFFER_IN + AUDIO_BLOCK_SIZE*4, (q7_t *)AUDIO_BUFFER_OUT + AUDIO_BLOCK_SIZE*4, AUDIO_BLOCK_SIZE*4); // copy the new recording data for (int i=0;i<AUDIO_BLOCK_SIZE;i++) { audio_buffer[i] = AUDIO_BUFFER_IN[2*AUDIO_BLOCK_SIZE+i*2]; } run_kws(); return; }
void ConfluentEfficiencyExchange(void *pvParameters) { char *pinBuffer = (char*) pvParameters; char *poutBuffer = NULL; pinBuffer = &pinBuffer[LIS_START]; if (pdTRUE == xSemaphoreTake(TargetInformationEmpty, portMAX_DELAY)) { if (pdTRUE == xSemaphoreTake(TargetInformationCounterMutex, portMAX_DELAY)) { if (poutBuffer = GetBuffer(&TargetInformationPool)) { arm_copy_q7(pinBuffer, poutBuffer, TARGETNUM + 1); xSemaphoreGive(TargetInformationCounterMutex); } xSemaphoreGive(TargetInformationFull); } } // printf("TargetInformation: %d %d %d %d %d %d %d\r\n", pinBuffer[0],pinBuffer[1],pinBuffer[2],pinBuffer[3],pinBuffer[4],pinBuffer[5],pinBuffer[6]); }
void Discovery(void *pvParameters) { char *pBuffer = NULL; if (pdTRUE == xSemaphoreTake(SendPacketPoolEmpty, portMAX_DELAY)) { if (pdTRUE == xSemaphoreTake(SendPacketPoolCounterMutex, portMAX_DELAY)) { pBuffer = GetBuffer(&SendPacketPool); xSemaphoreGive(SendPacketPoolCounterMutex); pBuffer[DES_NUM] = 0x00; pBuffer[SRC_NUM] = SELFADDRESS; pBuffer[PRC_NUM] = DISCOVERY_ACCOMPLISHED; pBuffer[LEN_NUM] = NbrCount; arm_copy_q7(NbrList + 1, &pBuffer[LIS_START], NbrList[0]); //arm_copy_q7(&inBuffer[0], &pBuffer[LIS_START], TARGETINFORMATIONLENGTH); xSemaphoreGive(SendPacketPoolFull); } } }
void TargetInformaion(void *pvParameters) { u8 *pinBuffer; u8 *pBuffer = NULL; pinBuffer = (u8*) pvParameters; if (pdTRUE == xSemaphoreTake(TargetInformationEmpty, portMAX_DELAY)) { if (pdTRUE == xSemaphoreTake(TargetInformationCounterMutex, portMAX_DELAY)) { if (pBuffer = GetBuffer(&TargetInformationPool)) { xSemaphoreGive(TargetInformationCounterMutex); arm_copy_q7(&pinBuffer[LIS_START], &pBuffer[0], pinBuffer[LEN_NUM]); xSemaphoreGive(TargetInformationFull); } } } }
/* This function runs before the OS start. */ void NetworkConnecting() { int i, p, test, test1; int sendcounter = 0; u32 *pu32 = NULL; test1 = Timer2Counter; test = Timer2Counter; sPacketbuf[DES_NUM] = SELFADDRESS; sPacketbuf[SRC_NUM] = SELFADDRESS; CC2500_SeleChannel(0); CC2500_SetRecvAddr(SELFADDRESS); CC2500_SetRxd(); CC2500_SendPacket(sPacketbuf,PACKET_LEN); CC2500_SetRxd(); sPacketbuf[DES_NUM]=0x00; NbrList[0]=NbrCount; // while(RESET==RNG_GetFlagStatus(RNG_FLAG_DRDY)); // Delay_100us(RNG_GetRandomNumber() & 0x000000f); pu32 = (u32*) &sPacketbuf[1]; while (0 == NodeFlag[SELFADDRESS]) { if (ISIDLE) { NbrList[0] = NbrCount; sPacketbuf[PRC_NUM] = DISCOVERY_MESSAGE; arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1); pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp. CRC_ResetDR(); pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1); p = Bernoulli(1.0/(MAXNUM-NbrCount+1)); //Delay_100us(1); if (ISIDLE) { if (0 == DelayFlag) { if (p/*Bernoulli(1.0/(MAXNUM-NbrCount+1))*/) { CC2500_SendPacket(sPacketbuf, PACKET_LEN); CC2500_SetRxd(); DelayFlag=1; } } else { Preemptive_Delay_100us(25, &DelayFlag); DelayFlag=0; } } } } test1 = Timer2Counter - test1; while(MAXNUM > NbrCount) { if (0 != DiscoveryHelp) { if (ISIDLE) { Delay_100us(1); if (ISIDLE) { if (Bernoulli(1.0/(MAXNUM-NbrCount+1))) { NbrList[0] = NbrCount; sPacketbuf[PRC_NUM] = DISCOVERY_MESSAGE; arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1); pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp. CRC_ResetDR(); pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1); CC2500_SendPacket(sPacketbuf, PACKET_LEN); CC2500_SetRxd(); } } } DiscoveryHelp = 0; } } test = Timer2Counter - test; while(RESET==RNG_GetFlagStatus(RNG_FLAG_DRDY)); Delay_100us(RNG_GetRandomNumber() & 0x000000f); pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp. sendcounter = 3; while (0 != sendcounter) { if (ISIDLE) { Delay_100us(1); if (ISIDLE) { NbrList[0] = NbrCount; sPacketbuf[PRC_NUM] = DISCOVERY_ACCOMPLISHED; arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1); CRC_ResetDR(); pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1); CC2500_SendPacket(sPacketbuf, PACKET_LEN); CC2500_SetRxd(); sendcounter--; } } Delay_100us(10); } printf("NeighbourList:\r\n"); for (i=0;i<MAXNUM;i++) { printf("%#x\r\n",NbrList[1+i]); } printf("t1 = %d\r\n", test1); printf("t = %d\r\n", test); }