Stap 5: ATTiny USI I2C Code uitvoering - USI Hardware
De USI hardware heeft drie pinnen:
DOEN - gegevens Output, gebruikt voor drie-draads (SPI) communicatie-modus alleen
DI/SDA - Data Input/seriële Data, gebruikt als SDA in I2C configuratie
USCK/SCL - klok, gebruikt als SCK in I2C configuratie
Daarnaast, heeft de hardware USI drie registreert:
USIDR - USI Data Shift Register - verschuivingen gegevens binnen en buiten de USI hardware
USISR - USI Status registreren - heeft staat vlaggen en 4-bits teller (meer hierover hieronder)
USICR - USI besturingselement registreren - interrupt maakt, klok modi en klok strobe softwarefuncties
4-bits teller
De teller 4-bits beslaat de 4 lage bits van USISR en wordt gebruikt om de overloop interrupts, wanneer die in slave-modus actief, alsmede om te helpen bij het genereren van SCK klok pulsen in master-modus. Wordt een 4-bits teller, telt het omhoog van 0 tot en met 15 vóór overlopen. Op overlopen, kan het leiden tot een interrupt (USI_OVERFLOW_vect, ingeschakeld door een beetje in USICR). Dit wordt gebruikt voor de tabel USI slavenstaat binnen de Unie om bij te houden transmissie als er wordt overgeschakeld tussen transmissie-Staten (meer hierover in het gedeelte van de code slaaf).
Wanneer die fungeert als een master, wordt de teller 4-bits gebruikt samen met de klok strobe bit in USICR voor het genereren van het SCK-klok. U stelt de teller overloopt in het aantal pulsen van de klok wilt genereren (meestal 8 of 1, met 8 wordt een gegevensoverdracht en 1 wordt een ACK/NACK transmissie). Vervolgens, u lus tot de teller overstorten, voortdurend het instellen van de klok strobe bit en het uitvoeren van een vertraging wachten. Meer hierover kan worden gezien in de master codesectie.
Twee draads klok regeleenheid (Start voorwaarde Detector)
De regeleenheid van de TWI-klok is een module in de USI die het SCK-lijn voor start monitoren en stop voorwaarden. Het primaire doel is het starten van voorwaarde detector, die, wanneer ingeschakeld, genereert een interrupt USI_START_vect wanneer het detecteert een geldige start-voorwaarde. Deze interrupt handler is het startpunt voor de slave-modus USI I2C transmissie behandeling, en de teller 4-bits overloopt nadat het adres transmissie opgetreden moet instellen. Vanaf daar op, de overflow interrupt beheert de rest van dat I2C-bericht en stelt de start-voorwaarde detector voor het volgende bericht.
Lees het gegevensblad
Ik zal niet in detail ingaan op elk van de bits in elk van deze registers, maar als u op zoek bent in het schrijven van sommige USI code is het essentieel dat u Lees deze secties van het gegevensblad. Ik beveel het lezen van de gehele universele seriële Interface - USI sectie (blz 142-150 van het volledige gegevensblad ATTiny2313). Dit krijgt u alle informatie die u nodig naast wat ik heb gezegd hier.