beautypg.com

Dynamixel dx-series – Robotis Dynamixel DX-117 User Manual

Page 37

background image

36

DYNAMIXEL

DX-Series

#define RX_TIMEOUT_COUNT2 10000L //10mSec
#define RX_TIMEOUT_COUNT1 (RX_TIMEOUT_COUNT2*10L) //1Sec

unsigned long ulCounter;
byte bCount;

ulCounter = 0;
while(gbRxBufferReadPointer == gbRxBufferWritePointer)
{
if(ulCounter++ > RX_TIMEOUT_COUNT1)
{
return 0;
}
}
bCount = 0;
for(bCount = 0; bCount < 254; bCount++) //Maximum Data Length Limit : 255
{
ulCounter = 0;
while(gbRxBufferReadPointer == gbRxBufferWritePointer)
{
if(ulCounter++ > RX_TIMEOUT_COUNT2)
{
return bCount;
}
}
bpRxBuffer[bCount] = gbpInterruptRxBuffer[gbRxBufferReadPointer++];
}
return bCount;
}

byte TxPacket(byte *bpTxBuffer, byte bID, byte bInstruction, byte *bpParameter, byte bParameterLength)
{
byte bCount,bCheckSum,bPacketLength;

bpTxBuffer[0] = 0xff;
bpTxBuffer[1] = 0xff;
bpTxBuffer[2] = bID;
bpTxBuffer[3] = bParameterLength+2; //Length(Paramter,Instruction,Checksum)
bpTxBuffer[4] = bInstruction;
for(bCount = 0; bCount < bParameterLength; bCount++)
{
bpTxBuffer[bCount+5] = bpParameter[bCount];
}
bCheckSum = 0;
bPacketLength = bParameterLength+4+2;
for(bCount = 2; bCount < bPacketLength-1; bCount++) //except 0xff,checksum
{
bCheckSum += bpTxBuffer[bCount];
}
bpTxBuffer[bCount] = ~bCheckSum; //Writing Checksum with Bit Inversion

RS485_TXD; //Change 485 Direction to Transmission
for(bCount = 0; bCount < bPacketLength; bCount++)
{
TxD80(bpTxBuffer[bCount]);
}
while(!TXD_FINISH0); //Wait until TXD Shift register empty
RS485_RXD;
return(bPacketLength);
}

void PrintBuffer(byte *bpPrintBuffer, byte bLength)
{
byte bCount;
for(bCount = 0; bCount < bLength; bCount++)

Should wait until last data bit transmission is
completed.
Note.:

‘Shift register empty’ is differ from ‘Tx

Ready

’. Tx Ready just means you can load the

data to CPU UART TxD Register. There can be
several Tx Buffering registers as what kind of
CPU

This manual is related to the following products: