📄 d_lowspeed.r
字号:
*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 + -