CALIBRE
Issue 1.3 Page 13
22/07/99
Parameters are: int slaveaddress
The slave address of the device which is to be communicated with. This will
be an even number if the adapter is to write to the slave, add 1 to get an odd
number if the adapter is to read from the slave.
int setnack
This controls whether the Parallel I2C Communications Adapter transmits an
Acknowledge down the I2C Bus on reception of a byte. The last byte received
during a transfer must not be acknowledged, in all other cases acknowledge
must be enabled, If setnack = 0 then acknowledge is enabled, if setnack = 1
then acknowledge is disabled. Therefore, if a read (odd numbered) address is
being sent AND only 1 byte is to be read, setnack should be set to = 1; in all
other cases it must be clear = 0.
Value Returned: int i2cstatus
The value returned depends on whether the Start and address were sent.
If the start and address have been sent then the status returned will either be
0x00 (bus busy data sent and acknowledged), or 0x08 (bus busy, data sent
but not acknowledged).
If the start or the address cannot be sent (either the bus remained busy or the
address did not get sent) then the last status read IORed with 0x8000 will be
returned.
The function will read the status a number of times before returning an error
condition - this number is defined by the MAXNUMBEROFGOES constant
defined in I2CINC.C, this value may be altered to suit your system.
I2C status on exit 0x00 bus busy and address sent and acknowledged
0x08 bus busy and address sent but not acknowledged
0x80 bus busy and address not sent.
(see Appendix A for details of status codes).
Example Usage: (see also sample programs)
main()
{
int slaveaddress, setnack, trash;
slaveaddress = 0xa1; /* I2C Address of slave, this is a typical read */
/* address for an I2C static RAM or EEPROM */
setnack = 0; /* Enable Acknowledge (see parameter descriptions)*/
i2cstatus = restart(slaveaddress, setnack);
trash = readbyte(setnack); /* read the address from the adapter and discard*/
}