CobraNet Hardware User’s Manual
Host Management Interface (HMI)
DS651UM21
©
Copyright 2004 Cirrus Logic, Inc.
27
Version 2.1
7.3.1.1. Translate Address
Translate Address
does not actually update the address pointers but initiates the
processing required to eventually move them. The host can accomplish other tasks,
including HMI Reads and Writes while the address translation is being processed. A
logical description of
Translate Address
is given below. A contextual use of the
Translate
Address
operation is shown in the reference implementations. Refer also to
.
void TranslateAddress(
long address )
{
int msgack = MSG_D;
MSG_A = ( address & 0xff0000 ) >> 16;
MSG_B = ( address & 0xff00 ) >> 8;
MSG_C = address & 0xff;
MSG_D = CVR_TRANSLATE_ADDRESS;
while( !( ( msgack ^ MSG_D ) & ( 1 << MSG_TOGGLE_BO ) ) );
}
7.3.1.2. Interrupt Acknowledge
Causes HACK to be de-asserted.
void InterruptAck( void )
{
int msgack = MSG_D;
MSG_D = CVR_INTERRUPT_ACK;
while( !( ( msgack ^ MSG_D ) & ( 1 << MSG_TOGGLE_BO ) ) );
}
7.3.1.3. Goto Packet
Moves HMI pointers to bridgeRxPktBuffer (write = 0) or bridgeTxPktBuffer (write = 1).
void GotoPacket(
bool write )
{
int msgack = MSG_D;
MSG_C = write ? MOP_GOTO_PACKET_TRANSMIT : MOP_GOTO_PACKET_RECEIVE;
MSG_D = CVR_MULTIPLEX_OP;
while( !( ( msgack ^ MSG_D ) & ( 1 << MSG_TOGGLE_BO ) ) );
}
7.3.1.4. Goto Translation
Moves HMI data pointers to the results of the most recently completed translate address
operation. The
write
parameter dictates the operation of the HREQ signal and only needs
to be supplied for applications using hardware data handshaking via this signal.
void GotoTranslation(
bool write = 0 )
{
int msgack = MSG_D;
MSG_C = write ? MOP_GOTO_TRANSLATION_WRITE : MOP_GOTO_TRANSLATION_READ;
MSG_D = CVR_MULTIPLEX_OP;
while( !( ( msgack ^ MSG_D ) & ( 1 << MSG_TOGGLE_BO ) ) );
}