User`s guide

Aironet Wireless Communications, Inc. 7-33 Confidential and Proprietary
// -- PC4500 missed it, try again
OUT4500(SELECT0, rid);
OUT4500(OFFSET0, offset);
}
}
// requires call to bap0_setup() first
bap0_read(u16 *pu16Dst, int bytelen)
{
bytelen = (bytelen + 1) & (~1); // round up to even value
while (bytelen > 0) {
// each access to DATA0 will auto-increment to next word
*pu16Dst++ = IN4500(DATA0);
bytelen -= 2;
}
return SUCCESS;
}
// requires call to bap0_setup() first
bap0_write(u16 *pu16Src, int bytelen)
{
bytelen = (bytelen + 1) & (~1); // round up to even value
while (bytelen > 0) {
// each access to DATA0 will auto-increment to next word
OUT4500(DATA0, *pu16Src++);
bytelen -= 2;
}
return SUCCESS;
}
Note, only word writes are available, a read-modify-write is required to change a byte. In this case the
offset register would have to be rewritten since it would auto-increment to the next address. In some cases,
a read-modify-write is not necessary to write a single byte. For example, if writing a transmit packet of odd
length, the last byte does not require a read-modify-write since the other byte will be ignored anyway.
Notes:
1) The Offset0/Offset1 registers are not updated by reads/writes to the Data0/Data1 registers.
2) Since the Offset0/Offset1 registers are not updated, an interrupt service routine cannot use the same set
of registers for accessing FID/RIDs, since it cannot restore the original location prior to the interrupt.
3) A hardware errata prevents interleaved read/writes from operating correctly. The Selector/Offset must
be reinitialized before changing from reads to write or vice-versa.
Memory items consist of:
FIDs - Frame Identifiers (transmit/receive packets or allocated memory)
RIDs - Resource Identifiers (configuration items)