📄 d_lowspeed.r
字号:
//
// Date init 14.12.2004
//
// Revision date $Date:: 19-09-06 15:05 $
//
// Filename $Workfile:: d_lowspeed.r $
//
// Version $Revision:: 24 $
//
// Archive $Archive:: /LMS2006/Sys01/Main/Firmware/Source/d_lowspeed $
//
// Platform C
//
#ifdef SAM7S256
#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
#define CHANNEL_ONE_CLK AT91C_PIO_PA23 /* PA23 is Clk */
#define CHANNEL_ONE_DATA AT91C_PIO_PA18 /* PA18 is Data */
#define CHANNEL_TWO_CLK AT91C_PIO_PA28 /* PA28 is Clk */
#define CHANNEL_TWO_DATA AT91C_PIO_PA19 /* PA19 is Data */
#define CHANNEL_THREE_CLK AT91C_PIO_PA29 /* PA29 is Clk */
#define CHANNEL_THREE_DATA AT91C_PIO_PA20 /* PA20 is Data */
#define CHANNEL_FOUR_CLK AT91C_PIO_PA30 /* PA30 is Clk */
#define CHANNEL_FOUR_DATA AT91C_PIO_PA2 /* PA2 is Data */
#else
#define CHANNEL_ONE_CLK AT91C_PIO_PA28 /* PA28 is Clk */
#define CHANNEL_ONE_DATA AT91C_PIO_PA20 /* PA20 is Data */
#endif
typedef struct
{
UWORD MaskBit;
UBYTE ChannelState;
UBYTE TxState;
UBYTE RxState;
UBYTE ReStartState;
UBYTE TxByteCnt;
UBYTE RxByteCnt;
UBYTE *pComOutBuffer;
UBYTE *pComInBuffer;
UBYTE AckStatus;
UBYTE RxBitCnt;
UBYTE ReStartBit;
UBYTE ComDeviceAddress;
UBYTE RxWaitCnt;
}LOWSPEEDPARAMETERS;
static LOWSPEEDPARAMETERS LowSpeedData[4];
ULONG DATA_PINS[4] = {CHANNEL_ONE_DATA, CHANNEL_TWO_DATA, CHANNEL_THREE_DATA, CHANNEL_FOUR_DATA};
ULONG CLK_PINS[4] = {CHANNEL_ONE_CLK, CHANNEL_TWO_CLK, CHANNEL_THREE_CLK, CHANNEL_FOUR_CLK};
#define LOWSPEED_CHANNEL1 0
#define LOWSPEED_CHANNEL2 1
#define LOWSPEED_CHANNEL3 2
#define LOWSPEED_CHANNEL4 3
#define NO_OF_LOWSPEED_COM_CHANNEL 4
#define MASK_BIT_8 0x80
#define PIO_INQ 0x04
//Used for variable ChannelState
#define LOWSPEED_IDLE 0x00
#define LOWSPEED_TX_STOP_BIT 0x01
#define LOWSPEED_TRANSMITTING 0x02
#define LOWSPEED_RECEIVING 0x04
#define LOWSPEED_TEST_WAIT_STATE 0x08
#define LOWSPEED_RESTART_CONDITION 0x10
#define LOWSPEED_WAIT_BEFORE_RX 0x20
//Used for variable TxState
#define TX_IDLE 0x00
#define TX_DATA_MORE_DATA 0x01
#define TX_DATA_CLK_HIGH 0x02
#define TX_EVALUATE_ACK_CLK_HIGH 0x03
#define TX_DATA_READ_ACK_CLK_LOW 0x04
#define TX_DATA_CLK_LOW 0x05
#define TX_ACK_EVALUATED_CLK_LOW 0x06
//Used for variable RxState
#define RX_IDLE 0x00
#define RX_START_BIT_CLK_HIGH 0x01
#define RX_DATA_CLK_HIGH 0x02
#define RX_ACK_TX_CLK_HIGH 0x03
#define RX_DATA_CLK_LOW 0x04
#define RX_DONE_OR_NOT_CLK_LOW 0x05
//Used for variable ReStart
#define RESTART_STATE_IDLE 0x00
#define RESTART_STATE_ONE 0x01
#define RESTART_STATE_TWO 0x02
#define RESTART_STATE_THREE 0x03
#define RESTART_STATE_FOUR 0x04
#define RESTART_STATE_FIVE 0x05
#define RESTART_STATE_SIX 0x06
#define RESTART_STATE_SEVEN 0x07
#define LOWSpeedTxInit {\
LowSpeedData[LOWSPEED_CHANNEL1].ChannelState = 0;\
LowSpeedData[LOWSPEED_CHANNEL2].ChannelState = 0;\
LowSpeedData[LOWSPEED_CHANNEL3].ChannelState = 0;\
LowSpeedData[LOWSPEED_CHANNEL4].ChannelState = 0;\
}
#define LOWSpeedTimerInit {\
*AT91C_PMC_PCER = 0x400; /* Enable clock for PWM, PID10*/\
*AT91C_PWMC_MR = 0x01; /* CLKA is output from prescaler */\
*AT91C_PWMC_MR |= 0x600; /* Prescaler MCK divided with 64 */\
*AT91C_PWMC_CH0_CMR = 0x06; /* Channel 0 uses MCK divided by 64 */\
*AT91C_PWMC_CH0_CMR &= 0xFFFFFEFF; /* Left alignment on periode */\
*AT91C_PWMC_CH0_CPRDR = 0x20; /* Set to 39 => 52uSecondes interrupt */\
*AT91C_PWMC_IDR = AT91C_PWMC_CHID0; /* Disable interrupt for PWM output channel 0 */\
*AT91C_AIC_IDCR = 0x400; /* Disable AIC intterupt on ID10 PWM */\
AT91C_AIC_SVR[10] = (unsigned int)LowSpeedPwmIrqHandler;\
AT91C_AIC_SMR[10] = 0x01; /* Enable trigger on level */\
*AT91C_AIC_ICCR = 0x400; /* Clear interrupt register PID10*/\
*AT91C_PWMC_IER = AT91C_PWMC_CHID0; /* Enable interrupt for PWM output channel 0 */\
*AT91C_AIC_IECR = 0x400; /* Enable interrupt from PWM */\
}
#define LOWSpeedExit
#define ENABLEDebugOutput {\
*AT91C_PIOA_PER = AT91C_PIO_PA29; /* Enable PIO on PA029 */\
*AT91C_PIOA_OER = AT91C_PIO_PA29; /* PA029 set to Output */\
*AT91C_PIOA_CODR = 0x20000000;\
}
#define SETDebugOutputHigh *AT91C_PIOA_SODR = 0x20000000
#define SETDebugOutputLow *AT91C_PIOA_CODR = 0x20000000
#define SETClkComOneHigh *AT91C_PIOA_SODR = CHANNEL_ONE_CLK
#define SETClkComOneLow *AT91C_PIOA_CODR = CHANNEL_ONE_CLK
#define GetClkComOnePinLevel *AT91C_PIOA_PDSR & CHANNEL_ONE_CLK
#define SETClkComTwoHigh *AT91C_PIOA_SODR = CHANNEL_TWO_CLK
#define SETClkComTwoLow *AT91C_PIOA_CODR = CHANNEL_TWO_CLK
#define GetClkComTwoPinLevel *AT91C_PIOA_PDSR & CHANNEL_TWO_CLK
#define SETClkComThreeHigh *AT91C_PIOA_SODR = CHANNEL_THREE_CLK
#define SETClkComThreeLow *AT91C_PIOA_CODR = CHANNEL_THREE_CLK
#define GetClkComThreePinLevel *AT91C_PIOA_PDSR & CHANNEL_THREE_CLK
#define SETClkComFourHigh *AT91C_PIOA_SODR = CHANNEL_FOUR_CLK
#define SETClkComFourLow *AT91C_PIOA_CODR = CHANNEL_FOUR_CLK
#define GetClkComFourPinLevel *AT91C_PIOA_PDSR & CHANNEL_FOUR_CLK
#define SETDataComOneHigh *AT91C_PIOA_SODR = CHANNEL_ONE_DATA
#define SETDataComOneLow *AT91C_PIOA_CODR = CHANNEL_ONE_DATA
#define GetDataComOnePinLevel *AT91C_PIOA_PDSR & CHANNEL_ONE_DATA
#define GETDataComOnePinDirection *AT91C_PIOA_OSR & CHANNEL_ONE_DATA
#define SETDataComTwoHigh *AT91C_PIOA_SODR = CHANNEL_TWO_DATA
#define SETDataComTwoLow *AT91C_PIOA_CODR = CHANNEL_TWO_DATA
#define GetDataComTwoPinLevel *AT91C_PIOA_PDSR & CHANNEL_TWO_DATA
#define GETDataComTwoPinDirection *AT91C_PIOA_OSR & CHANNEL_TWO_DATA
#define SETDataComThreeHigh *AT91C_PIOA_SODR = CHANNEL_THREE_DATA
#define SETDataComThreeLow *AT91C_PIOA_CODR = CHANNEL_THREE_DATA
#define GetDataComThreePinLevel *AT91C_PIOA_PDSR & CHANNEL_THREE_DATA
#define GETDataComThreePinDirection *AT91C_PIOA_OSR & CHANNEL_THREE_DATA
#define SETDataComFourHigh *AT91C_PIOA_SODR = CHANNEL_FOUR_DATA
#define SETDataComFourLow *AT91C_PIOA_CODR = CHANNEL_FOUR_DATA
#define GetDataComFourPinLevel *AT91C_PIOA_PDSR & CHANNEL_FOUR_DATA
#define GETDataComFourPinDirection *AT91C_PIOA_OSR & CHANNEL_FOUR_DATA
#define SETDataComOneToInput *AT91C_PIOA_ODR = CHANNEL_ONE_DATA;
#define SETDataComOneToOutput *AT91C_PIOA_OER = CHANNEL_ONE_DATA;
#define SETDataComTwoToInput *AT91C_PIOA_ODR = CHANNEL_TWO_DATA;
#define SETDataComTwoToOutput *AT91C_PIOA_OER = CHANNEL_TWO_DATA;
#define SETDataComThreeToInput *AT91C_PIOA_ODR = CHANNEL_THREE_DATA;
#define SETDataComThreeToOutput *AT91C_PIOA_OER = CHANNEL_THREE_DATA;
#define SETDataComFourToInput *AT91C_PIOA_ODR = CHANNEL_FOUR_DATA;
#define SETDataComFourToOutput *AT91C_PIOA_OER = CHANNEL_FOUR_DATA;
#define DISABLEPullupDataComOne *AT91C_PIOA_PPUDR = CHANNEL_ONE_DATA;
#define DISABLEPullupClkComOne *AT91C_PIOA_PPUDR = CHANNEL_ONE_CLK;
#define DISABLEPullupDataComTwo *AT91C_PIOA_PPUDR = CHANNEL_TWO_DATA;
#define DISABLEPullupClkComTwo *AT91C_PIOA_PPUDR = CHANNEL_TWO_CLK;
#define DISABLEPullupDataComThree *AT91C_PIOA_PPUDR = CHANNEL_THREE_DATA;
#define DISABLEPullupClkComThree *AT91C_PIOA_PPUDR = CHANNEL_THREE_CLK;
#define DISABLEPullupDataComFour *AT91C_PIOA_PPUDR = CHANNEL_FOUR_DATA;
#define DISABLEPullupClkComFour *AT91C_PIOA_PPUDR = CHANNEL_FOUR_CLK;
#define ENABLEPullupDataComOne *AT91C_PIOA_PPUER = CHANNEL_ONE_DATA;
#define ENABLEPullupClkComOne *AT91C_PIOA_PPUER = CHANNEL_ONE_CLK;
#define ENABLEPullupDataComTwo *AT91C_PIOA_PPUER = CHANNEL_TWO_DATA;
#define ENABLEPullupClkComTwo *AT91C_PIOA_PPUER = CHANNEL_TWO_CLK;
#define ENABLEPullupDataComThree *AT91C_PIOA_PPUER = CHANNEL_THREE_DATA;
#define ENABLEPullupClkComThree *AT91C_PIOA_PPUER = CHANNEL_THREE_CLK;
#define ENABLEPullupDataComFour *AT91C_PIOA_PPUER = CHANNEL_FOUR_DATA;
#define ENABLEPullupClkComFour *AT91C_PIOA_PPUER = CHANNEL_FOUR_CLK;
#define SETClkLow(ChannelNr) {\
if (ChannelNr == 0)\
{\
SETClkComOneLow;\
}\
else\
{\
if (ChannelNr == 1)\
{\
SETClkComTwoLow;\
}\
else\
{\
if (ChannelNr == 2)\
{\
SETClkComThreeLow;\
}\
else\
{\
if (ChannelNr == 3)\
{\
SETClkComFourLow;\
}\
}\
}\
}\
}
#define SETClkHigh(ChannelNr) {\
if (ChannelNr == 0)\
{\
SETClkComOneHigh;\
}\
else\
{\
if (ChannelNr == 1)\
{\
SETClkComTwoHigh;\
}\
else\
{\
if (ChannelNr == 2)\
{\
SETClkComThreeHigh;\
}\
else\
{\
if (ChannelNr == 3)\
{\
SETClkComFourHigh;\
}\
}\
}\
}\
}
#define SETDataLow(ChannelNr) {\
if (ChannelNr == 0)\
{\
SETDataComOneLow;\
}\
else\
{\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -