cocoa_STM_ver_BIPOLAR

Dependencies:   mbed FastPWM

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SPI_EEP_ENC.cpp Source File

SPI_EEP_ENC.cpp

00001 #include "mbed.h"
00002 #include "setting.h"
00003 #include "SPI_EEP_ENC.h"
00004 
00005 // EEPROM
00006 void spi_eeprom_ready(void){
00007     int temp1, temp2;
00008     do{
00009         eeprom_cs=0;
00010         eeprom.write(0x06);  //write enable
00011         eeprom_cs=1;
00012         
00013         eeprom_cs=0;
00014         temp1 = eeprom.write(0x05);     
00015         temp2 = eeprom.write(0x00);
00016         eeprom_cs=1;
00017         temp2=(temp2&(0x03))!= 0x02;
00018     } while(temp2); // before writing or reading 
00019  }
00020  
00021  void spi_eeprom_write(unsigned short int add, unsigned int data){
00022         eeprom_cs=0;
00023         eeprom.write(0x02);
00024         eeprom.write(0xff&(add>>8));
00025         eeprom.write(0xff&add);
00026         eeprom.write(0xff&data);
00027         eeprom.write(0xff&(data>>8));
00028         eeprom.write(0xff&(data>>16));
00029         eeprom.write(0xff&(data>>24));
00030         eeprom_cs=1;
00031 }
00032  
00033 unsigned int spi_eeprom_read(unsigned short int add){
00034         eeprom_cs=0;
00035         eeprom.write(0x03);
00036         eeprom.write(0xff&(add>>8));
00037         eeprom.write(0xff&add);
00038         int a1 = eeprom.write(0x00);
00039         int a2 = eeprom.write(0x00);
00040         int a3 = eeprom.write(0x00);
00041         int a4 = eeprom.write(0x00);
00042         eeprom_cs=1;
00043         unsigned int final = (a4<<24)+(a3<<16) + (a2<<8) + a1;
00044         return final;
00045  } 
00046  
00047  
00048  // ENCODER
00049 void spi_enc_set_clear(void){
00050     unsigned int temp;
00051     enc_cs = 0;
00052     temp = enc.write(0b00100000);
00053     enc_cs = 1;
00054 }
00055 
00056 void spi_enc_set_init(void){
00057     unsigned int temp, i, temp1, temp2;
00058 
00059     // write MDR0 -> 0b11 -> x4 quadrature count mode
00060     enc_cs = 0;
00061     temp = enc.write(0b10001000);     // WR + MDR0
00062     temp = enc.write(0b00000011);     // quadratue mode
00063     enc_cs = 1;
00064 
00065     // write MDR1 -> 0b10 -> 2-byte counter mode
00066     for(i=0;i<100;i++);
00067     enc_cs = 0;
00068     temp = enc.write(0b10010000);     // WR + MDR1
00069     //temp = enc.write(0b00000010);     // 2 byte mode
00070     temp = enc.write(0b00000000);     // 4 byte mode
00071     enc_cs = 1;
00072     
00073     // clear
00074     spi_enc_set_clear();
00075 }
00076 
00077 
00078 int spi_enc_read(void){   
00079     //for(t_i=0;t_i<100;t_i++);
00080     unsigned int t_dummy, t_b1, t_b2, t_b3, t_b4, t_i;
00081     enc_cs = 0;
00082     t_dummy = enc.write(0b01100000); // Read Commend 
00083     t_b1 = enc.write(0x00);         // Dummy data for clock
00084     t_b2 = enc.write(0x00);         // Dummy data for clock
00085     t_b3 = enc.write(0x00);         // Dummy data for clock
00086     t_b4 = enc.write(0x00);         // Dummy data for clock
00087     enc_cs = 1;
00088 
00089     return((t_b1<<24) + (t_b2<<16) + (t_b3<<8) + t_b4);
00090 }