Test of ADNS3080 on DISCO_F429ZI

Dependencies:   BSP_DISCO_F429ZI LCD_DISCO_F429ZI mbed

Fork of ADNS3080_HelloWorld by ryosuke yumoto

Committer:
ryosuke
Date:
Thu May 08 12:59:25 2014 +0000
Revision:
0:9beaad87014d
Child:
1:46abb3b9347d
This program is test program for ADNS3080 Optical Flow sensor.; But, I do not finish configuring this program.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryosuke 0:9beaad87014d 1 #include "ADNS3080.h"
ryosuke 0:9beaad87014d 2
ryosuke 0:9beaad87014d 3 ADNS3080::ADNS3080(PinName mosi,
ryosuke 0:9beaad87014d 4 PinName miso,
ryosuke 0:9beaad87014d 5 PinName sck,
ryosuke 0:9beaad87014d 6 PinName cs) : spi_(mosi, miso, sck), nCS_(cs){
ryosuke 0:9beaad87014d 7
ryosuke 0:9beaad87014d 8 spi_.frequency(2000000);
ryosuke 0:9beaad87014d 9 spi_.format(8, 3);
ryosuke 0:9beaad87014d 10
ryosuke 0:9beaad87014d 11 nCS_=1;
ryosuke 0:9beaad87014d 12
ryosuke 0:9beaad87014d 13 wait_us(500);
ryosuke 0:9beaad87014d 14
ryosuke 0:9beaad87014d 15 }
ryosuke 0:9beaad87014d 16
ryosuke 0:9beaad87014d 17 int ADNS3080::getProdID(void) {
ryosuke 0:9beaad87014d 18
ryosuke 0:9beaad87014d 19 return ReadRegister(ADNS3080_PRODUCT_ID);
ryosuke 0:9beaad87014d 20
ryosuke 0:9beaad87014d 21 }
ryosuke 0:9beaad87014d 22
ryosuke 0:9beaad87014d 23 int ADNS3080::getRevID(void) {
ryosuke 0:9beaad87014d 24
ryosuke 0:9beaad87014d 25 return ReadRegister(ADNS3080_REVISION_ID);
ryosuke 0:9beaad87014d 26
ryosuke 0:9beaad87014d 27 }
ryosuke 0:9beaad87014d 28
ryosuke 0:9beaad87014d 29 int ADNS3080::getMotion(void) {
ryosuke 0:9beaad87014d 30
ryosuke 0:9beaad87014d 31 return ReadRegister(ADNS3080_MOTION);
ryosuke 0:9beaad87014d 32
ryosuke 0:9beaad87014d 33 }
ryosuke 0:9beaad87014d 34
ryosuke 0:9beaad87014d 35 signed char ADNS3080::getDelta_X(void) {
ryosuke 0:9beaad87014d 36
ryosuke 0:9beaad87014d 37 return ReadRegister(ADNS3080_DELTA_X);
ryosuke 0:9beaad87014d 38
ryosuke 0:9beaad87014d 39 }
ryosuke 0:9beaad87014d 40
ryosuke 0:9beaad87014d 41 signed char ADNS3080::getDelta_Y(void) {
ryosuke 0:9beaad87014d 42
ryosuke 0:9beaad87014d 43 return ReadRegister(ADNS3080_DELTA_Y);
ryosuke 0:9beaad87014d 44
ryosuke 0:9beaad87014d 45 }
ryosuke 0:9beaad87014d 46
ryosuke 0:9beaad87014d 47 int ADNS3080::getInverProdID(void) {
ryosuke 0:9beaad87014d 48
ryosuke 0:9beaad87014d 49 return ReadRegister(ADNS3080_INVERSE_PRODUCT_ID);
ryosuke 0:9beaad87014d 50
ryosuke 0:9beaad87014d 51 }
ryosuke 0:9beaad87014d 52
ryosuke 0:9beaad87014d 53 int ADNS3080::ReadRegister(int address) {
ryosuke 0:9beaad87014d 54
ryosuke 0:9beaad87014d 55 int tx = (ADNS3080_SPI_READ | address);
ryosuke 0:9beaad87014d 56 int rx = 0;
ryosuke 0:9beaad87014d 57
ryosuke 0:9beaad87014d 58 nCS_=0;
ryosuke 0:9beaad87014d 59
ryosuke 0:9beaad87014d 60 spi_.write(tx);
ryosuke 0:9beaad87014d 61 wait_us(50);
ryosuke 0:9beaad87014d 62 rx = spi_.write(0x00);
ryosuke 0:9beaad87014d 63 nCS_ = 1;
ryosuke 0:9beaad87014d 64
ryosuke 0:9beaad87014d 65 return rx;
ryosuke 0:9beaad87014d 66 }
ryosuke 0:9beaad87014d 67
ryosuke 0:9beaad87014d 68 void ADNS3080::WriteRegister(int address, char data) {
ryosuke 0:9beaad87014d 69
ryosuke 0:9beaad87014d 70 int tx = ( ADNS3080_SPI_WRITE | address);
ryosuke 0:9beaad87014d 71
ryosuke 0:9beaad87014d 72 nCS_=0;
ryosuke 0:9beaad87014d 73 spi_.write(tx);
ryosuke 0:9beaad87014d 74 spi_.write(data);
ryosuke 0:9beaad87014d 75
ryosuke 0:9beaad87014d 76 nCS_=1;
ryosuke 0:9beaad87014d 77
ryosuke 0:9beaad87014d 78 }