Øvelse+7+-+SPI+Interface

=Implementere Init= toc Find ud af hvordan DAC7612 er forbundet til OMAP'en? DAC7612 er forbundet til OMAP'en via SPI1_CS3_CMOS. CS3 = chip select 3 Her ses et billed af dette:

Find ud af DAC7612's SPI karakterisika?
FEATURES DESCRIPTION
 * LOW POWER: 3.7mW
 * FAST SETTLING: 7μs to 1 LSB
 * 1mV LSB WITH 4.095V FULL-SCALE RANGE
 * COMPLETE WITH REFERENCE
 * 12-BIT LINEARITY AND MONOTONICITY OVER INDUSTRIAL TEMP RANGE
 * 3-WIRE INTERFACE: Up to 20MHz Clock
 * SMALL PACKAGE: 8-Lead SOIC

Indsæt værdier i board structen
code format="c" struct spi_board_info omap3devkit8000_spi_board_info[] = { {   .modalias        = " dac7612 ", .bus_num       = 1, .chip_select   = 3, .max_speed_hz   = 15000000, .controller_data   = &ads7870_mcspi_config, .mode              = SPI_MODE_3, // Clock polarity }, }; code Vi fandt ud af at chip select var: SPI1_CS3_CMOS, derfor ændret chip_select = 3; max_speed_hz sættes til 15 mHz clock. Dette gør vi fordi det er under 20 mHz som er max værdi for DAC7612 clock. mode er = SPI_MODE_3 pga. Clock polariteten. Her ses et billed af hvordan vi kom frem til det: Grunden til at vi bruger SPI_MODE_3 er at CPOL = 1 (vi starter høj) og CPHA = 1 (vi læser med blå linje)

Vi ændre bit_per_word i spi_probe til 14. for DAC7612. Dette gør vi udfra Timming diagrammet ovenfor, her ses det at der er 14 bits. 2 addresse bits og 12 data bits.

dac7612
Initialiseringsfunktionen i 1.lag (der kaldes ved insmod) fungere som normalt. Den tildeler major og minor number, registrerer og tilføjer vores device. Til sidst kaldes Initialiseringsfunktionen fra 2.lag. 

dac7612-core
Initialiseringsfunktionen i 2.lag konfigurerer vores device til den anvendte hardware. Dette sker udfra objekter af de to structs og  der blandt andet indeholder: Til sidst kaldes initialiseringsfunktionen fra 3.lag 
 * bus-number
 * chip-select
 * speed
 * mode (clock-polarity)

dac7612-spi
Initialiseringsfunktionen i 3.lag konfigurerer vores device til brug af SPI bussen. Den vigtigste detalje her er der bestemmer vores word-size i write funktionen. 

Sæt en default værdi
Prøv at skrive en fast værdi til DAC7612 i din init funktion og skriv en anden i din exit funktion, inden du kalder unregister.. Herved kan du teste om du kan sætte en værdi på DAC’en. Test på target.

//Note til spi message længde// Når man sender en besked skal man angive dennes længde (msg.len). Hver besked som sendes indeholder et antal words, som bruger ”bits_per_word” størrelsen. Er værdien af ”bits_per_word” ikke en byte størrelse, skal der rundes op til næste hele byte størrelse. Eksempel: Vi vil sende 3 words hvor hver word er 9-bits ; 9-bits fylder 2 bytes => message.len = 3 * 2 (bytes/word) => message.len = 6

=Implementer write= Lav write metoden, således at vi kan skrive en ascii værdi til driverens node i filsystemet og herved sætte udgangen på DAC’en tilsvarende. DAC7612 har 12-bit opløsning, hvor 1 msb svarer et 1mV, dvs skriver vi 1000 til filen, skal outputtet sættet til 1000 mV = 1.0 volt.