I3MPS_Opgave7

I denne opgave skal vi lave en SPI driver, som virker med DevKittet. Vi har her valgt at lave SPI driveren, som skal bruges i forbindelse med vores projekt.

=Opsætning= For at kunne opsætte en SPI driver, skal man forsyne driveren med informationer om hvilken bus der skal bruges, hastighed, SPI mode og meget mere. Dette bliver sat i de følgende structs og funktioner. code format="cpp" static struct omap2_mcspi_device_config spi_mcspi_config = { .turbo_mode	= 0, .single_channel	= 1, };

struct spi_board_info omap3devkit8000_spi_board_info[] = { {		.modalias	 = "SPI_Driver", .bus_num	 = 1, .chip_select	 = 0, .max_speed_hz	 = 1500000, .controller_data = &spi_mcspi_config, .mode		 = SPI_MODE_0, // Clock polarity }, };

struct spi_device *spiDriver_device;

int spiDriver_probe(struct spi_device *spi) {	spi->bits_per_word = 8; spi_setup(spi);

return 0; }

struct spi_driver spiDriver_spiDriver = { .driver = { .name = "SPI_Driver", .bus = &spi_bus_type, .owner = THIS_MODULE, },	.probe = spiDriver_probe, }; code

I init funktionen bliver selve driveren klargjort og SPI enheden bliver registreret i systemet.

=Implementering af write funktion= Når der skrives til noden, og informationen ønskes at blive sendt, kaldes write funktionen med parametre som indeholder den data som skal sendes. I vores write funktion bliver data'en hentet, klargjort og sendt til vores SPI write funktion der ser således ud.

code format="cpp" void spiDriver_write_driver(struct spi_device *spi, u8 val) {	struct spi_transfer t;	struct spi_message m;

memset(&t, 0, sizeof(t)); spi_message_init(&m); m.spi = spi;

t.tx_buf = &val; t.rx_buf = NULL; t.len = 1; spi_message_add_tail(&t, &m);

spi_sync(m.spi, &m); } code Link til hele driveren =Test af driveren= Vi testede driveren ved at sende "01010101" til noden, og fik følgende resultat.