From 6c5075bc99ba07f46562f7f10db14e153d7a93ec Mon Sep 17 00:00:00 2001 From: jhansen Date: Mon, 26 Apr 2010 21:49:44 +0000 Subject: git-svn-id: https://mindboards.svn.sourceforge.net/svnroot/mindboards/lms_nbcnxc_128/trunk@6 c9361245-7fe8-9947-84e8-057757c4e366 --- AT91SAM7S256/Source/d_lowspeed.r | 743 +++++++++++++-------------------------- 1 file changed, 237 insertions(+), 506 deletions(-) (limited to 'AT91SAM7S256/Source/d_lowspeed.r') diff --git a/AT91SAM7S256/Source/d_lowspeed.r b/AT91SAM7S256/Source/d_lowspeed.r index 4b3b8ba..e215b3c 100644 --- a/AT91SAM7S256/Source/d_lowspeed.r +++ b/AT91SAM7S256/Source/d_lowspeed.r @@ -58,6 +58,10 @@ 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}; +const ULONG CLK_OR_DATA_PINS[4] = {CHANNEL_ONE_CLK | CHANNEL_ONE_DATA, + CHANNEL_TWO_CLK | CHANNEL_TWO_DATA, + CHANNEL_THREE_CLK | CHANNEL_THREE_DATA, + CHANNEL_FOUR_CLK | CHANNEL_FOUR_DATA}; #define LOWSPEED_CHANNEL1 0 #define LOWSPEED_CHANNEL2 1 @@ -70,17 +74,17 @@ ULONG CLK_PINS[4] = {CHANNEL_ONE_CLK, CHANNEL_TWO_CLK, CHANNEL_THREE_CLK, CHANNE #define PIO_INQ 0x04 //Used for variable ChannelState -#define LOWSPEED_IDLE 0x00 -#define LOWSPEED_TX_STOP_BIT 0x01 +#define LOWSPEED_IDLE 0x00 +#define LOWSPEED_TX_STOP_BIT 0x01 #define LOWSPEED_TRANSMITTING 0x02 -#define LOWSPEED_RECEIVING 0x04 +#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_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 @@ -88,351 +92,174 @@ ULONG CLK_PINS[4] = {CHANNEL_ONE_CLK, CHANNEL_TWO_CLK, CHANNEL_THREE_CLK, CHANNE #define TX_ACK_EVALUATED_CLK_LOW 0x06 //Used for variable RxState -#define RX_IDLE 0x00 -#define RX_START_BIT_CLK_HIGH 0x01 +#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_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_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 LOWSpeedTxInit {\ + LowSpeedData[LOWSPEED_CHANNEL1].ChannelState = 0;\ + LowSpeedData[LOWSPEED_CHANNEL2].ChannelState = 0;\ + LowSpeedData[LOWSPEED_CHANNEL3].ChannelState = 0;\ + LowSpeedData[LOWSPEED_CHANNEL4].ChannelState = 0;\ +} -#define SETDataComThreeHigh *AT91C_PIOA_SODR = CHANNEL_THREE_DATA +#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 SETDataComThreeLow *AT91C_PIOA_CODR = CHANNEL_THREE_DATA +#define LOWSpeedExit -#define GetDataComThreePinLevel *AT91C_PIOA_PDSR & CHANNEL_THREE_DATA +#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 GETDataComThreePinDirection *AT91C_PIOA_OSR & CHANNEL_THREE_DATA +#define SETDebugOutputHigh *AT91C_PIOA_SODR = 0x20000000 +#define SETDebugOutputLow *AT91C_PIOA_CODR = 0x20000000 -#define SETDataComFourHigh *AT91C_PIOA_SODR = CHANNEL_FOUR_DATA +#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 SETDataComFourLow *AT91C_PIOA_CODR = CHANNEL_FOUR_DATA +#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 GetDataComFourPinLevel *AT91C_PIOA_PDSR & CHANNEL_FOUR_DATA +#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 GETDataComFourPinDirection *AT91C_PIOA_OSR & CHANNEL_FOUR_DATA +#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 SETDataComOneToInput *AT91C_PIOA_ODR = CHANNEL_ONE_DATA; +#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 SETDataComOneToOutput *AT91C_PIOA_OER = 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 SETDataComTwoToInput *AT91C_PIOA_ODR = 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 SETDataComTwoToOutput *AT91C_PIOA_OER = CHANNEL_TWO_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 SETDataComThreeToInput *AT91C_PIOA_ODR = CHANNEL_THREE_DATA; +#define SETDataComOneToInput *AT91C_PIOA_ODR = CHANNEL_ONE_DATA; +#define SETDataComOneToOutput *AT91C_PIOA_OER = CHANNEL_ONE_DATA; -#define SETDataComThreeToOutput *AT91C_PIOA_OER = CHANNEL_THREE_DATA; +#define SETDataComTwoToInput *AT91C_PIOA_ODR = CHANNEL_TWO_DATA; +#define SETDataComTwoToOutput *AT91C_PIOA_OER = CHANNEL_TWO_DATA; -#define SETDataComFourToInput *AT91C_PIOA_ODR = CHANNEL_FOUR_DATA; +#define SETDataComThreeToInput *AT91C_PIOA_ODR = CHANNEL_THREE_DATA; +#define SETDataComThreeToOutput *AT91C_PIOA_OER = CHANNEL_THREE_DATA; -#define SETDataComFourToOutput *AT91C_PIOA_OER = CHANNEL_FOUR_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 DISABLEPullupDataComOne *AT91C_PIOA_PPUDR = CHANNEL_ONE_DATA; +#define DISABLEPullupClkComOne *AT91C_PIOA_PPUDR = CHANNEL_ONE_CLK; -#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 DISABLEPullupDataComTwo *AT91C_PIOA_PPUDR = CHANNEL_TWO_DATA; +#define DISABLEPullupDataComThree *AT91C_PIOA_PPUDR = CHANNEL_THREE_DATA; +#define DISABLEPullupClkComThree *AT91C_PIOA_PPUDR = CHANNEL_THREE_CLK; -#define DISABLEPullupClkComTwo *AT91C_PIOA_PPUDR = CHANNEL_TWO_CLK; +#define DISABLEPullupDataComFour *AT91C_PIOA_PPUDR = CHANNEL_FOUR_DATA; +#define DISABLEPullupClkComFour *AT91C_PIOA_PPUDR = CHANNEL_FOUR_CLK; -#define DISABLEPullupDataComThree *AT91C_PIOA_PPUDR = CHANNEL_THREE_DATA; +#define ENABLEPullupDataComOne *AT91C_PIOA_PPUER = CHANNEL_ONE_DATA; +#define ENABLEPullupClkComOne *AT91C_PIOA_PPUER = CHANNEL_ONE_CLK; -#define DISABLEPullupClkComThree *AT91C_PIOA_PPUDR = CHANNEL_THREE_CLK; +#define ENABLEPullupDataComTwo *AT91C_PIOA_PPUER = CHANNEL_TWO_DATA; +#define ENABLEPullupClkComTwo *AT91C_PIOA_PPUER = CHANNEL_TWO_CLK; -#define DISABLEPullupDataComFour *AT91C_PIOA_PPUDR = CHANNEL_FOUR_DATA; +#define ENABLEPullupDataComThree *AT91C_PIOA_PPUER = CHANNEL_THREE_DATA; +#define ENABLEPullupClkComThree *AT91C_PIOA_PPUER = CHANNEL_THREE_CLK; -#define DISABLEPullupClkComFour *AT91C_PIOA_PPUDR = CHANNEL_FOUR_CLK; +#define ENABLEPullupDataComFour *AT91C_PIOA_PPUER = CHANNEL_FOUR_DATA; +#define ENABLEPullupClkComFour *AT91C_PIOA_PPUER = CHANNEL_FOUR_CLK; -#define ENABLEPullupDataComOne *AT91C_PIOA_PPUER = CHANNEL_ONE_DATA; +#define SETClkLow(ChannelNr) {\ + *AT91C_PIOA_CODR = CLK_PINS[ChannelNr];\ + LowSpeedData[ChannelNr].ClkStatus = 0;\ +} -#define ENABLEPullupClkComOne *AT91C_PIOA_PPUER = CHANNEL_ONE_CLK; +#define SETClkHigh(ChannelNr) {\ + *AT91C_PIOA_SODR = CLK_PINS[ChannelNr];\ + LowSpeedData[ChannelNr].ClkStatus = 1;\ +} -#define ENABLEPullupDataComTwo *AT91C_PIOA_PPUER = CHANNEL_TWO_DATA; +#define SETDataLow(ChannelNr) {\ + *AT91C_PIOA_CODR = DATA_PINS[ChannelNr];\ +} -#define ENABLEPullupClkComTwo *AT91C_PIOA_PPUER = CHANNEL_TWO_CLK; +#define SETDataHigh(ChannelNr) {\ + *AT91C_PIOA_SODR = DATA_PINS[ChannelNr];\ +} -#define ENABLEPullupDataComThree *AT91C_PIOA_PPUER = CHANNEL_THREE_DATA; +#define SETDataToInput(ChannelNr) {\ + *AT91C_PIOA_ODR = DATA_PINS[ChannelNr];\ +} -#define ENABLEPullupClkComThree *AT91C_PIOA_PPUER = CHANNEL_THREE_CLK; +#define SETDataToOutput(ChannelNr) {\ + *AT91C_PIOA_OER = DATA_PINS[ChannelNr];\ +} -#define ENABLEPullupDataComFour *AT91C_PIOA_PPUER = CHANNEL_FOUR_DATA; +#define GetClkPinLevel(ChannelNr) (*AT91C_PIOA_PDSR & CLK_PINS[ChannelNr]) +#define GetDataPinLevel(ChannelNr) (*AT91C_PIOA_PDSR & DATA_PINS[ChannelNr]) +#define GETDataPinDirection(ChannelNr) (*AT91C_PIOA_OSR & DATA_PINS[ChannelNr]) -#define ENABLEPullupClkComFour *AT91C_PIOA_PPUER = CHANNEL_FOUR_CLK; +#define ENABLEPWMTimerForLowCom {\ + *AT91C_PWMC_ENA = AT91C_PWMC_CHID0; /* Enable PWM output channel 0 */\ +} -#define SETClkLow(ChannelNr) {\ - if (ChannelNr == 0)\ - {\ - SETClkComOneLow;\ - }\ - else\ - {\ - if (ChannelNr == 1)\ - {\ - SETClkComTwoLow;\ - }\ - else\ - {\ - if (ChannelNr == 2)\ - {\ - SETClkComThreeLow;\ - }\ - else\ - {\ - if (ChannelNr == 3)\ - {\ - SETClkComFourLow;\ - }\ - }\ - }\ - }\ - LowSpeedData[ChannelNr].ClkStatus = 0;\ - } - -#define SETClkHigh(ChannelNr) {\ - if (ChannelNr == 0)\ - {\ - SETClkComOneHigh;\ - }\ - else\ - {\ - if (ChannelNr == 1)\ - {\ - SETClkComTwoHigh;\ - }\ - else\ - {\ - if (ChannelNr == 2)\ - {\ - SETClkComThreeHigh;\ - }\ - else\ - {\ - if (ChannelNr == 3)\ - {\ - SETClkComFourHigh;\ - }\ - }\ - }\ - }\ - LowSpeedData[ChannelNr].ClkStatus = 1;\ - } - -#define SETDataLow(ChannelNr) {\ - if (ChannelNr == 0)\ - {\ - SETDataComOneLow;\ - }\ - else\ - {\ - if (ChannelNr == 1)\ - {\ - SETDataComTwoLow;\ - }\ - else\ - {\ - if (ChannelNr == 2)\ - {\ - SETDataComThreeLow;\ - }\ - else\ - {\ - if (ChannelNr == 3)\ - {\ - SETDataComFourLow;\ - }\ - }\ - }\ - }\ - } - -#define SETDataHigh(ChannelNr) {\ - if (ChannelNr == 0)\ - {\ - SETDataComOneHigh;\ - }\ - else\ - {\ - if (ChannelNr == 1)\ - {\ - SETDataComTwoHigh;\ - }\ - else\ - {\ - if (ChannelNr == 2)\ - {\ - SETDataComThreeHigh;\ - }\ - else\ - {\ - if (ChannelNr == 3)\ - {\ - SETDataComFourHigh;\ - }\ - }\ - }\ - }\ - } - -#define SETDataToInput(ChannelNr) {\ - if (ChannelNr == 0)\ - {\ - SETDataComOneToInput;\ - }\ - else\ - {\ - if (ChannelNr == 1)\ - {\ - SETDataComTwoToInput;\ - }\ - else\ - {\ - if (ChannelNr == 2)\ - {\ - SETDataComThreeToInput;\ - }\ - else\ - {\ - if (ChannelNr == 3)\ - {\ - SETDataComFourToInput;\ - }\ - }\ - }\ - }\ - } - - -#define SETDataToOutput(ChannelNr) {\ - if (ChannelNr == 0)\ - {\ - SETDataComOneToOutput;\ - }\ - else\ - {\ - if (ChannelNr == 1)\ - {\ - SETDataComTwoToOutput;\ - }\ - else\ - {\ - if (ChannelNr == 2)\ - {\ - SETDataComThreeToOutput;\ - }\ - else\ - {\ - if (ChannelNr == 3)\ - {\ - SETDataComFourToOutput;\ - }\ - }\ - }\ - }\ - } - - -#define ENABLEPWMTimerForLowCom {\ - *AT91C_PWMC_ENA = AT91C_PWMC_CHID0; /* Enable PWM output channel 0 */\ - } - -#define DISABLEPWMTimerForLowCom {\ - *AT91C_PWMC_DIS = AT91C_PWMC_CHID0; /* Disable PWM output channel 0 */\ - } +#define DISABLEPWMTimerForLowCom {\ + *AT91C_PWMC_DIS = AT91C_PWMC_CHID0; /* Disable PWM output channel 0 */\ +} -#define OLD_DISABLEPWMTimerForLowCom {\ - *AT91C_PWMC_DIS = AT91C_PWMC_CHID0; /* Disable PWM output channel 0 */\ - *AT91C_PWMC_IDR = AT91C_PWMC_CHID0; /* Disable interrupt from PWM output channel 0 */\ - *AT91C_AIC_IDCR = 0x400; /* Disable Irq from PID10 */\ - *AT91C_AIC_ICCR = 0x400; /* Clear interrupt register PID10*/\ - *AT91C_PMC_PCDR = 0x400; /* Disable clock for PWM, PID10*/\ - } +#define OLD_DISABLEPWMTimerForLowCom {\ + *AT91C_PWMC_DIS = AT91C_PWMC_CHID0; /* Disable PWM output channel 0 */\ + *AT91C_PWMC_IDR = AT91C_PWMC_CHID0; /* Disable interrupt from PWM output channel 0 */\ + *AT91C_AIC_IDCR = 0x400; /* Disable Irq from PID10 */\ + *AT91C_AIC_ICCR = 0x400; /* Clear interrupt register PID10*/\ + *AT91C_PMC_PCDR = 0x400; /* Disable clock for PWM, PID10*/\ +} __ramfunc void LowSpeedPwmIrqHandler(void) { @@ -625,11 +452,11 @@ __ramfunc void LowSpeedPwmIrqHandler(void) LowSpeedData[ChannelNr].ReStartBit = 0; LowSpeedData[ChannelNr].pComOutBuffer = &LowSpeedData[ChannelNr].ComDeviceAddress; *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; + 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; } @@ -687,9 +514,9 @@ __ramfunc void LowSpeedPwmIrqHandler(void) SETClkLow(ChannelNr); SETDataToInput(ChannelNr); LowSpeedData[ChannelNr].pComInBuffer++; - LowSpeedData[ChannelNr].RxByteCnt--; - LowSpeedData[ChannelNr].RxBitCnt = 0; - LowSpeedData[ChannelNr].RxState = RX_DONE_OR_NOT_CLK_LOW; + LowSpeedData[ChannelNr].RxByteCnt--; + LowSpeedData[ChannelNr].RxBitCnt = 0; + LowSpeedData[ChannelNr].RxState = RX_DONE_OR_NOT_CLK_LOW; } break; @@ -744,205 +571,109 @@ __ramfunc void LowSpeedPwmIrqHandler(void) } -#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 ENABLETxPins(ChannelNumber) {\ + *AT91C_PIOA_PER = CLK_OR_DATA_PINS[ChannelNumber]; /* Enable PIO on PA20 & PA28 */\ + *AT91C_PIOA_PPUDR = CLK_OR_DATA_PINS[ChannelNumber]; /* Disable Pull-up resistor */\ + *AT91C_PIOA_ODR = CLK_OR_DATA_PINS[ChannelNumber]; /* PA20 & PA28 set to Input */\ +} #define TxData(ChannelNumber, Status, DataOutBuffer, NumberOfByte) {\ - if (ChannelNumber == LOWSPEED_CHANNEL1)\ - {\ - if ((GetDataComOnePinLevel && GetClkComOnePinLevel) && (LowSpeedData[LOWSPEED_CHANNEL1].ChannelState == LOWSPEED_IDLE))\ - {\ - *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;\ - SETDataComOneLow;\ - LowSpeedData[LOWSPEED_CHANNEL1].ClkStatus = 1;\ - 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].TxState = TX_DATA_CLK_HIGH;\ - LowSpeedData[LOWSPEED_CHANNEL1].AckStatus = 0;\ - LowSpeedData[LOWSPEED_CHANNEL1].ChannelState = LOWSPEED_TRANSMITTING;\ - Status = 1;\ - }\ - else\ - {\ - Status = 0;\ - }\ - }\ - if (ChannelNumber == LOWSPEED_CHANNEL2)\ - {\ - if ((GetDataComTwoPinLevel && GetClkComTwoPinLevel) && (LowSpeedData[LOWSPEED_CHANNEL2].ChannelState == LOWSPEED_IDLE))\ - {\ - *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;\ - SETDataComTwoLow;\ - LowSpeedData[LOWSPEED_CHANNEL2].ClkStatus = 1;\ - 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].TxState = TX_DATA_CLK_HIGH;\ - LowSpeedData[LOWSPEED_CHANNEL2].AckStatus = 0;\ - LowSpeedData[LOWSPEED_CHANNEL2].ChannelState = LOWSPEED_TRANSMITTING;\ - Status = 1;\ - }\ - else\ - {\ - Status = 0;\ - }\ - }\ - if (ChannelNumber == LOWSPEED_CHANNEL3)\ - {\ - if ((GetDataComThreePinLevel && GetClkComThreePinLevel) && (LowSpeedData[LOWSPEED_CHANNEL3].ChannelState == LOWSPEED_IDLE))\ - {\ - *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;\ - SETDataComThreeLow;\ - LowSpeedData[LOWSPEED_CHANNEL3].ClkStatus = 1;\ - 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].TxState = TX_DATA_CLK_HIGH;\ - LowSpeedData[LOWSPEED_CHANNEL3].AckStatus = 0;\ - LowSpeedData[LOWSPEED_CHANNEL3].ChannelState = LOWSPEED_TRANSMITTING;\ - Status = 1;\ - }\ - else\ - {\ - Status = 0;\ - }\ - }\ - if (ChannelNumber == LOWSPEED_CHANNEL4)\ - {\ - if ((GetDataComFourPinLevel && GetClkComFourPinLevel) && (LowSpeedData[LOWSPEED_CHANNEL4].ChannelState == LOWSPEED_IDLE))\ - {\ - *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;\ - SETDataComFourLow;\ - LowSpeedData[LOWSPEED_CHANNEL4].ClkStatus = 1;\ - 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].TxState = TX_DATA_CLK_HIGH;\ - LowSpeedData[LOWSPEED_CHANNEL4].AckStatus = 0;\ - LowSpeedData[LOWSPEED_CHANNEL4].ChannelState = LOWSPEED_TRANSMITTING;\ - 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;\ - } + if ((GetDataPinLevel(ChannelNumber) && GetClkPinLevel(ChannelNumber)) && (LowSpeedData[ChannelNumber].ChannelState == LOWSPEED_IDLE))\ + {\ + *AT91C_PIOA_PER = CLK_OR_DATA_PINS[ChannelNumber]; /* Enable PIO on PA20 & PA28 */\ + *AT91C_PIOA_OER = CLK_OR_DATA_PINS[ChannelNumber]; /* PA20 & PA28 set to Output */\ + *AT91C_PIOA_PPUDR = CLK_OR_DATA_PINS[ChannelNumber]; /* Disable Pull-up resistor */\ + SETClkHigh(ChannelNumber);\ + SETDataLow(ChannelNumber);\ + LowSpeedData[ChannelNumber].ClkStatus = 1;\ + LowSpeedData[ChannelNumber].pComOutBuffer = DataOutBuffer;\ + LowSpeedData[ChannelNumber].ComDeviceAddress = *LowSpeedData[ChannelNumber].pComOutBuffer;\ + LowSpeedData[ChannelNumber].MaskBit = MASK_BIT_8;\ + LowSpeedData[ChannelNumber].TxByteCnt = NumberOfByte;\ + LowSpeedData[ChannelNumber].TxState = TX_DATA_CLK_HIGH;\ + LowSpeedData[ChannelNumber].AckStatus = 0;\ + LowSpeedData[ChannelNumber].ChannelState = LOWSPEED_TRANSMITTING;\ + Status = 1;\ + }\ + else\ + {\ + Status = 0;\ + }\ +} + +#define RxData(ChannelNumber, DataInBuffer, RxBytes, NoRestart) {\ + LowSpeedData[ChannelNumber].pComInBuffer = DataInBuffer;\ + LowSpeedData[ChannelNumber].RxBitCnt = 0;\ + LowSpeedData[ChannelNumber].RxByteCnt = RxBytes;\ + LowSpeedData[ChannelNumber].RxState = RX_DATA_CLK_LOW;\ + LowSpeedData[ChannelNumber].ReStartBit = (1 - (NoRestart & (1<