void SendChar() { uchar i,n,flag; for(n = 0 ;n<5 ; n++) { ACC = SendBuf[n] ; flag = P; IO = 0; for(i=0;i<8;i++) //发送一个字节 { Delay_100us(); if(SendBuf[n] & 0x01) IO = 1; else IO = 0; SendBuf[n] >>=1; } Delay_100us(); IO = flag; //发送保存的奇偶位 Delay_100us(); IO = 1; //发送停止位 Delay_100us(); Delay_100us(); } }
/*****************上电发送复位请求******************/ void Rest() { Delay() ; IO = 1; //必须为高等待接收LKT加密芯片发送的起始位 REST = 0; Delay_100us(); REST = 1; }
void main() { Rest(); ReceArt(17); //接收复位信息 Delay_100us(); SendChar() ; ReceArt(19); //接收随机数信息 P0 = buf[17]; while(1); }
/****************读取LTK4101的返回信息并将其存入数据缓存区****************/ void ReceArt(char m) { uchar i,n; for(n=0;n<m;n++) { while(IO); for(i=0;i<8;i++) //读一个字节函数 { Delay_100us(); buf[n] >>= 1; if(1 == IO) buf[n] |= 0x80; } Delay_100us(); ACC = buf[n]; if(IO == P) //判断偶校验位 { Delay_100us(); Delay_100us(); } } }
/*=====================================================================================================*/ int main( void ) { u32 i = PWM_MOTOR_MIN; SystemInit(); GPIO_Config(); PWM_Config(); // PWM1 = PWM_MOTOR_MIN; // PWM2 = PWM_MOTOR_MIN; // PWM3 = PWM_MOTOR_MIN; // PWM4 = PWM_MOTOR_MIN; // PWM5 = PWM_MOTOR_MIN; // PWM6 = PWM_MOTOR_MIN; // PWM7 = PWM_MOTOR_MIN; // PWM8 = PWM_MOTOR_MIN; // PWM9 = PWM_MOTOR_MIN; // PWM10 = PWM_MOTOR_MIN; // PWM11 = PWM_MOTOR_MIN; // PWM12 = PWM_MOTOR_MIN; while(1) { LED_G = ~LED_G; while(KEY == 1) { PWM1 = i; PWM2 = i; PWM3 = i; PWM4 = i; PWM5 = i; PWM6 = i; PWM7 = i; PWM8 = i; PWM9 = i; PWM10 = i; PWM11 = i; PWM12 = i; i++; if(i>=PWM_MOTOR_MAX) { i = PWM_MOTOR_MIN; LED_R = ~LED_R; } Delay_100us(5); } Delay_100ms(1); } }
/*=====================================================================================================*/ int main( void ) { uint32_t i = PWM_MOTOR_MIN; GPIO_Config(); PWM_Config(); while(1) { LED_G = !LED_G; if(KEY_BO == 1) { PWM1 = PWM_MOTOR_MIN; PWM2 = PWM_MOTOR_MIN; PWM3 = PWM_MOTOR_MAX; PWM4 = PWM_MOTOR_MAX; } while(KEY_WU == 1) { PWM1 = i; PWM2 = i; PWM3 = i; PWM4 = i; PWM5 = i; PWM6 = i; PWM7 = i; PWM8 = i; PWM9 = i; PWM10 = i; PWM11 = i; i++; if(i >= PWM_MOTOR_MAX) { i = PWM_MOTOR_MIN; LED_R = !LED_R; } Delay_100us(5); } Delay_100ms(1); } }
/* 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); }