⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_lowspeed.r

📁 乐高机器人的源码,开发平台是IAR_for_AVR.
💻 R
📖 第 1 页 / 共 3 页
字号:
            *LowSpeedData[ChannelNr].pComOutBuffer += 0x01;
			LowSpeedData[ChannelNr].ChannelState = LOWSPEED_TRANSMITTING;
			LowSpeedData[ChannelNr].MaskBit = MASK_BIT_8;
			LowSpeedData[ChannelNr].TxByteCnt = 0x01;
			LowSpeedData[ChannelNr].TxState = TX_DATA_CLK_HIGH;
			LowSpeedData[ChannelNr].AckStatus = 0;
          }
          break;
        }
      }
      break;

      case LOWSPEED_WAIT_BEFORE_RX:
      {
        LowSpeedData[ChannelNr].RxWaitCnt++;
        if (LowSpeedData[ChannelNr].RxWaitCnt > 5)
        {
          LowSpeedData[ChannelNr].ChannelState = LOWSPEED_RECEIVING;
          SETDataToInput(ChannelNr);
        }
      }
      break;

      case LOWSPEED_RECEIVING:
      {
        switch(LowSpeedData[ChannelNr].RxState)
        {
          case RX_START_BIT_CLK_HIGH:
          {
            SETClkLow(ChannelNr);
            LowSpeedData[ChannelNr].RxState = RX_DATA_CLK_LOW;
          }
          break;

          case RX_DATA_CLK_HIGH:
          {
            LowSpeedData[ChannelNr].RxBitCnt++;
            if(PinStatus & DATA_PINS[ChannelNr])
            {
              *LowSpeedData[ChannelNr].pComInBuffer |= 0x01;
            }
            SETClkLow(ChannelNr);
            if (LowSpeedData[ChannelNr].RxBitCnt < 8)
            {
              *LowSpeedData[ChannelNr].pComInBuffer = *LowSpeedData[ChannelNr].pComInBuffer << 1;
            }
            else
            {
              if (LowSpeedData[ChannelNr].RxByteCnt > 1)
              {
                SETDataToOutput(ChannelNr);
                SETDataLow(ChannelNr);
              }
            }
            LowSpeedData[ChannelNr].RxState = RX_DATA_CLK_LOW;
          }
          break;

          case RX_ACK_TX_CLK_HIGH:
          {
            SETClkLow(ChannelNr);
            SETDataToInput(ChannelNr);
            LowSpeedData[ChannelNr].pComInBuffer++;
		    LowSpeedData[ChannelNr].RxByteCnt--;
		    LowSpeedData[ChannelNr].RxBitCnt = 0;
	        LowSpeedData[ChannelNr].RxState = RX_DONE_OR_NOT_CLK_LOW;
          }
          break;

          case RX_DATA_CLK_LOW:
          {
            SETClkHigh(ChannelNr);
            if (LowSpeedData[ChannelNr].RxBitCnt == 8)
            {
              LowSpeedData[ChannelNr].RxState = RX_ACK_TX_CLK_HIGH;
            }
            else
            {
              LowSpeedData[ChannelNr].RxState = RX_DATA_CLK_HIGH;
            }
          }
          break;

          case RX_DONE_OR_NOT_CLK_LOW:
          {
            if (LowSpeedData[ChannelNr].RxByteCnt == 0)
            {
              LowSpeedData[ChannelNr].ChannelState = LOWSPEED_IDLE;
              LowSpeedData[ChannelNr].RxState = RX_IDLE;
              SETClkHigh(ChannelNr);
            }
            else
            {
              LowSpeedData[ChannelNr].RxState = RX_START_BIT_CLK_HIGH;
            }
          }
          break;
        }
      }
      break;

      default:
      break;
    }
  }
}


#define ENABLETxPins(ChannelNumber)			   {\
											     if (ChannelNumber == LOWSPEED_CHANNEL1)\
											     {\
											       *AT91C_PIOA_PER   = CHANNEL_ONE_CLK | CHANNEL_ONE_DATA; /* Enable PIO on PA20 & PA28 */\
												   *AT91C_PIOA_PPUDR = CHANNEL_ONE_CLK | CHANNEL_ONE_DATA; /* Disable Pull-up resistor  */\
												   *AT91C_PIOA_ODR   = CHANNEL_ONE_CLK | CHANNEL_ONE_DATA; /* PA20 & PA28 set to Input  */\
												 }\
											     if (ChannelNumber == LOWSPEED_CHANNEL2)\
											     {\
												   *AT91C_PIOA_PER   = CHANNEL_TWO_CLK | CHANNEL_TWO_DATA; /* Enable PIO on PA20 & PA28 */\
												   *AT91C_PIOA_PPUDR = CHANNEL_TWO_CLK | CHANNEL_TWO_DATA; /* Disable Pull-up resistor */\
												   *AT91C_PIOA_ODR   = CHANNEL_TWO_CLK | CHANNEL_TWO_DATA; /* PA20 & PA28 set to Input */\
											     }\
											     if (ChannelNumber == LOWSPEED_CHANNEL3)\
											     {\
											       *AT91C_PIOA_PER   = CHANNEL_THREE_CLK | CHANNEL_THREE_DATA; /* */\
												   *AT91C_PIOA_PPUDR = CHANNEL_THREE_CLK | CHANNEL_THREE_DATA; /* */\
												   *AT91C_PIOA_ODR   = CHANNEL_THREE_CLK | CHANNEL_THREE_DATA; /* */\
											     }\
											     if (ChannelNumber == LOWSPEED_CHANNEL4)\
											     {\
											       *AT91C_PIOA_PER   = CHANNEL_FOUR_CLK | CHANNEL_FOUR_DATA; /* */\
												   *AT91C_PIOA_PPUDR = CHANNEL_FOUR_CLK | CHANNEL_FOUR_DATA; /* */\
												   *AT91C_PIOA_ODR   = CHANNEL_FOUR_CLK | CHANNEL_FOUR_DATA; /* */\
											     }\
                                               }

#define TxData(ChannelNumber, Status, DataOutBuffer, NumberOfByte) {\
											     if (ChannelNumber == LOWSPEED_CHANNEL1)\
											     {\
											       if (GetDataComOnePinLevel && GetClkComOnePinLevel)\
										           {\
									                 *AT91C_PIOA_PER   = CHANNEL_ONE_CLK | CHANNEL_ONE_DATA; /* Enable PIO on PA20 & PA28 */\
												     *AT91C_PIOA_OER   = CHANNEL_ONE_CLK | CHANNEL_ONE_DATA; /* PA20 & PA28 set to Output  */\
												     *AT91C_PIOA_PPUDR = CHANNEL_ONE_CLK | CHANNEL_ONE_DATA; /* Disable Pull-up resistor  */\
												     SETClkComOneHigh;\
									                 LowSpeedData[LOWSPEED_CHANNEL1].pComOutBuffer = DataOutBuffer;\
									                 LowSpeedData[LOWSPEED_CHANNEL1].ComDeviceAddress = *LowSpeedData[LOWSPEED_CHANNEL1].pComOutBuffer;\
									                 LowSpeedData[LOWSPEED_CHANNEL1].MaskBit = MASK_BIT_8;\
										             LowSpeedData[LOWSPEED_CHANNEL1].TxByteCnt = NumberOfByte;\
										             LowSpeedData[LOWSPEED_CHANNEL1].ChannelState = LOWSPEED_TRANSMITTING;\
									                 LowSpeedData[LOWSPEED_CHANNEL1].TxState = TX_DATA_CLK_HIGH;\
										             SETDataComOneLow;\
										             LowSpeedData[LOWSPEED_CHANNEL1].AckStatus = 0;\
									                 Status = 1;\
									               }\
									               else\
									               {\
									                 Status = 0;\
									               }\
											     }\
											     if (ChannelNumber == LOWSPEED_CHANNEL2)\
											     {\
											       if (GetDataComTwoPinLevel && GetClkComTwoPinLevel)\
										           {\
									                 *AT91C_PIOA_PER   = CHANNEL_TWO_CLK | CHANNEL_TWO_DATA; /* Enable PIO on PA20 & PA28 */\
												     *AT91C_PIOA_OER   = CHANNEL_TWO_CLK | CHANNEL_TWO_DATA; /* PA20 & PA28 set to Output  */\
												     *AT91C_PIOA_PPUDR = CHANNEL_TWO_CLK | CHANNEL_TWO_DATA; /* Disable Pull-up resistor  */\
												     SETClkComTwoHigh;\
									                 LowSpeedData[LOWSPEED_CHANNEL2].pComOutBuffer = DataOutBuffer;\
									                 LowSpeedData[LOWSPEED_CHANNEL2].ComDeviceAddress = *LowSpeedData[LOWSPEED_CHANNEL2].pComOutBuffer;\
									                 LowSpeedData[LOWSPEED_CHANNEL2].MaskBit = MASK_BIT_8;\
										             LowSpeedData[LOWSPEED_CHANNEL2].TxByteCnt = NumberOfByte;\
										             LowSpeedData[LOWSPEED_CHANNEL2].ChannelState = LOWSPEED_TRANSMITTING;\
									                 LowSpeedData[LOWSPEED_CHANNEL2].TxState = TX_DATA_CLK_HIGH;\
										             SETDataComTwoLow;\
										             LowSpeedData[LOWSPEED_CHANNEL2].AckStatus = 0;\
									                 Status = 1;\
									               }\
									               else\
									               {\
									                 Status = 0;\
									               }\
											     }\
											     if (ChannelNumber == LOWSPEED_CHANNEL3)\
											     {\
											       if (GetDataComThreePinLevel && GetClkComThreePinLevel)\
										           {\
									                 *AT91C_PIOA_PER   = CHANNEL_THREE_CLK | CHANNEL_THREE_DATA; /* */\
												     *AT91C_PIOA_OER   = CHANNEL_THREE_CLK | CHANNEL_THREE_DATA; /* */\
												     *AT91C_PIOA_PPUDR = CHANNEL_THREE_CLK | CHANNEL_THREE_DATA; /* */\
												     SETClkComThreeHigh;\
									                 LowSpeedData[LOWSPEED_CHANNEL3].pComOutBuffer = DataOutBuffer;\
									                 LowSpeedData[LOWSPEED_CHANNEL3].ComDeviceAddress = *LowSpeedData[LOWSPEED_CHANNEL3].pComOutBuffer;\
									                 LowSpeedData[LOWSPEED_CHANNEL3].MaskBit = MASK_BIT_8;\
										             LowSpeedData[LOWSPEED_CHANNEL3].TxByteCnt = NumberOfByte;\
										             LowSpeedData[LOWSPEED_CHANNEL3].ChannelState = LOWSPEED_TRANSMITTING;\
									                 LowSpeedData[LOWSPEED_CHANNEL3].TxState = TX_DATA_CLK_HIGH;\
										             SETDataComThreeLow;\
										             LowSpeedData[LOWSPEED_CHANNEL3].AckStatus = 0;\
									                 Status = 1;\
									               }\
									               else\
									               {\
									                 Status = 0;\
									               }\
											     }\
											     if (ChannelNumber == LOWSPEED_CHANNEL4)\
											     {\
											       if (GetDataComFourPinLevel && GetClkComFourPinLevel)\
										           {\
									                 *AT91C_PIOA_PER   = CHANNEL_FOUR_CLK | CHANNEL_FOUR_DATA; /* */\
												     *AT91C_PIOA_OER   = CHANNEL_FOUR_CLK | CHANNEL_FOUR_DATA; /* */\
												     *AT91C_PIOA_PPUDR = CHANNEL_FOUR_CLK | CHANNEL_FOUR_DATA; /* */\
												     SETClkComFourHigh;\
									                 LowSpeedData[LOWSPEED_CHANNEL4].pComOutBuffer = DataOutBuffer;\
									                 LowSpeedData[LOWSPEED_CHANNEL4].ComDeviceAddress = *LowSpeedData[LOWSPEED_CHANNEL4].pComOutBuffer;\
									                 LowSpeedData[LOWSPEED_CHANNEL4].MaskBit = MASK_BIT_8;\
										             LowSpeedData[LOWSPEED_CHANNEL4].TxByteCnt = NumberOfByte;\
										             LowSpeedData[LOWSPEED_CHANNEL4].ChannelState = LOWSPEED_TRANSMITTING;\
									                 LowSpeedData[LOWSPEED_CHANNEL4].TxState = TX_DATA_CLK_HIGH;\
										             SETDataComFourLow;\
										             LowSpeedData[LOWSPEED_CHANNEL4].AckStatus = 0;\
									                 Status = 1;\
									               }\
									               else\
									               {\
									                 Status = 0;\
									               }\
											     }\
											   }

#define RxData(ChannelNumber, DataInBuffer, RxBytes) {\
											           LowSpeedData[ChannelNumber].pComInBuffer = DataInBuffer;\
									                   LowSpeedData[ChannelNumber].RxBitCnt = 0;\
												       LowSpeedData[ChannelNumber].RxByteCnt = RxBytes;\
									                   LowSpeedData[ChannelNumber].RxState = RX_DATA_CLK_LOW;\
									                   LowSpeedData[ChannelNumber].ReStartBit = 1;\
									                   LowSpeedData[ChannelNumber].RxWaitCnt = 0;\
											         }
											
											
#define STATUSTxCom(ChannelNumber, Status)     {\
											     if (LowSpeedData[ChannelNumber].ChannelState != 0)\
											     {\
											       if (LowSpeedData[ChannelNumber].TxByteCnt == 0)\
											       {\
											         if (LowSpeedData[ChannelNumber].MaskBit == 0)\
											         {\
											           if (LowSpeedData[ChannelNumber].AckStatus == 1)\
											           {\
													     Status = 0x01;  /* TX SUCCESS  */\
											           }\
											           else\
											           {\
											             Status = 0xFF; /* TX ERROR */\
											           }\
											         }\
											         else\
											         {\
											           Status = 0;\
											         }\
											       }\
											       else\
											       {\
											         Status = 0;\
											       }\
											     }\
											     else\
											     {\
											       if (LowSpeedData[ChannelNumber].RxByteCnt == 0)\
											       {\
											         if (LowSpeedData[ChannelNumber].AckStatus == 1)\
											         {\
													   Status = 0x01;  /* TX SUCCESS  */\
											         }\
											         else\
											         {\
											           Status = 0xFF; /* TX ERROR */\
											         }\
											       }\
											       else\
											       {\
											         Status = 0xFF; /* TX ERROR */\
											       }\
											     }\
											   }
											
#define STATUSRxCom(ChannelNumber, Status)     {\
                                                 if (LowSpeedData[ChannelNumber].ChannelState == LOWSPEED_IDLE)\
											     {\
											       if (LowSpeedData[ChannelNumber].RxByteCnt == 0)\
											       {\
											         Status = 0x01;  /* RX SUCCESS  */\
											       }\
											       else\
											       {\
											         Status = 0xFF; /* RX ERROR */\
											       }\
											     }\
											     else\
											     {\
											       Status = 0;\
											     }\
                                               }


#endif

#ifdef    PCWIN

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -