ATTiny USI I2C inledning - en kraftfull, snabb och bekväm kommunikationsgränssnitt för ATTiny projekt! (5 / 8 steg)
Steg 5: ATTiny USI I2C kod genomförandet - USI hårdvara
USI maskinvaran har tre stift:
GÖRA - Data Output, används för tre-wire (SPI) kommunikationsläge endast
DI/SDA - Data ingång/seriell Data, används som SDA i I2C konfiguration
USCK/SCL - klocka, används som SCK i I2C konfiguration
USI maskinvaran har dessutom tre registrerar:
USIDR - USI Data SKIFT Register - SKIFT data till och från USI hårdvara
USISR - USI Status Register - har staten flaggor och 4-bitars räknare (mer om detta nedan)
USICR - USI kontroll registrera - avbrott gör klockan lägen och funktioner i mjukvaran klocka strobe
4-bitars räknare
Den 4-bitars räknaren upptar de lägre 4 bitarna av USISR och används då översvämningen avbrotten vid slav-läge samt för att generera SCK klocka pulser i huvudläge. Att vara en 4-bitars räknare, räknar det uppåt från 0 till 15 innan överfyllda. På överfyllda, kan det utlösa ett avbrott (USI_OVERFLOW_vect, aktiveras med lite i USICR). Detta används för tabellen USI slav staten att hålla reda på överföring som växlar mellan överföring (mer om detta i avsnittet slav kod).
När det agerar som en mästare, används den 4-bitars räknaren tillsammans med den klocka strobe lite i USICR för att generera SCK klockan. Du ange att svämma över av antalet klocka pulser du vill generera (allmänt 8 eller 1, med 8 att vara en överföring av data och 1 är en ACK/NACK överföring). Sedan, du slinga tills räknaren svämmar över, kontinuerligt att klocka strobe biten och utföra en delay vänta. Mer om detta kan ses i avsnittet mästare kod.
Två tråd klocka-styrenheten (Start skick detektor)
TWI klocka Control Unit är en modul i USI som övervakar SCK raden för start och stopp villkor. Dess främsta syfte är att starta skick detektor, som, när aktiverad genererar en USI_START_vect avbryta när den upptäcker ett giltigt start villkor. Denna avbrottshanterare är utgångspunkten för slav-läge USI I2C överföring hantering och måste ställa in den 4-bitars räknaren att svämma över efter adress överföringen har skett. Därifrån på overflow avbrottet hanterar resten av I2C meddelandet och återställer start skick detektorn för nästa meddelande.
Läst databladet
Jag tänker inte gå in i detalj på varje bitar i varje av dessa register, men om du tittar på skriva några USI kod är det viktigt att du läser dessa avsnitt av databladet. Jag rekommenderar att läsa den hela Universal Serial Interface - USI avsnitt (sidorna 142-150 av ATTiny2313 hela databladet). Detta kommer att ge dig all information du behöver utöver vad jag har påpekat här.