Skip to content
Snippets Groups Projects
Commit a7c72baa authored by Paulus Kruger's avatar Paulus Kruger
Browse files

spi driver cleanup

parent 409b098c
No related branches found
No related tags found
No related merge requests found
...@@ -13,47 +13,46 @@ c_spibitbang1::c_spibitbang1(const t_driver config1) : drvbase (config1){ ...@@ -13,47 +13,46 @@ c_spibitbang1::c_spibitbang1(const t_driver config1) : drvbase (config1){
SDIOpin=config1.parameters[1]; SDIOpin=config1.parameters[1];
CSpin=config1.parameters[3]; CSpin=config1.parameters[3];
}; };
#define setbit(dev,reg,v) bit[0]=v;parent->seti2c(dev,1,reg,bit)
bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int direction){ bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int direction){
t_buffer bit[1]={0}; t_buffer bit[1]={0};
if (direction==0) { //Send if (direction==0) { //Send
int data2 = ( 0x00 << 23 ) + ( 0x00 << 21 ) + ( reg << 8 ) + data[0]; int data2 = ( 0x00 << 23 ) + ( 0x00 << 21 ) + ( reg << 8 ) + data[0];
std::cout << "SPI send" << data2 << "\n"; std::cout << "SPI send" << data2 << "\n";
bit[0]={0};parent->seti2c(CS,1,CSpin,bit); setbit(CS,CSpin,0);
for (int x=0;x<32;x++) for (int x=0;x<32;x++)
{ {
bit[0]=(data2>>(31-x)) & 1; //Not that efficient, but works setbit(SDIO,SDIOpin,(data2>>(31-x)) & 1);
parent->seti2c(SDIO,1,SDIOpin,bit); setbit(CLK,CLKpin,1);
bit[0]={1};parent->seti2c(CLK,1,CLKpin,bit); setbit(CLK,CLKpin,0);
bit[0]={0};parent->seti2c(CLK,1,CLKpin,bit);
} }
bit[0]={1};parent->seti2c(CS,1,CSpin,bit); setbit(CS,CSpin,1);
bit[0]={1};parent->seti2c(SDIO,1,SDIOpin,bit); setbit(SDIO,SDIOpin,1);
} else { } else {
int data2 = ( 0x01 << 15) + ( 0x00 << 13 ) + reg; int data2 = ( 0x01 << 15) + ( 0x00 << 13 ) + reg;
bit[0]={0};parent->seti2c(CLK,1,CLKpin,bit); setbit(CLK,CLKpin,0);
bit[0]={0};parent->seti2c(CS,1,CSpin,bit);//enable setbit(CS,CSpin,0);
for (int x=0;x<16;x++){ for (int x=0;x<16;x++){
bit[0]={0};parent->seti2c(CLK,1,CLKpin,bit); setbit(CLK,CLKpin,0);
bit[0]=(data2>>(15-x)) & 1; //Not that efficient, but works setbit(SDIO,SDIOpin,(data2>>(15-x)) & 1);
parent->seti2c(SDIO,1,SDIOpin,bit); setbit(CLK,CLKpin,1);
bit[0]={1};parent->seti2c(CLK,1,CLKpin,bit);
} }
bit[0]=1;parent->seti2c(SDIOdir,1,SDIOpin,bit); setbit(SDIOdir,SDIOpin,1);
bit[0]=0;parent->seti2c(CLK,1,CLKpin,bit); setbit(CLK,CLKpin,0);
data2=0; data2=0;
for (int x=0;x<8;x++){ for (int x=0;x<8;x++){
parent->geti2c(SDIO,1,SDIOpin,bit); parent->geti2c(SDIO,1,SDIOpin,bit);
data2<<=1; data2<<=1;
data2+=bit[0]; data2+=bit[0];
bit[0]=1;parent->seti2c(CLK,1,CLKpin,bit); setbit(CLK,CLKpin,1);
bit[0]=0;parent->seti2c(CLK,1,CLKpin,bit); setbit(CLK,CLKpin,0);
} }
bit[0]=1;parent->seti2c(CS,1,CSpin,bit);//disable setbit(CS,CSpin,1);
bit[0]=1;parent->seti2c(SDIO,1,SDIOpin,bit); setbit(SDIO,SDIOpin,1);
bit[0]=0;parent->seti2c(SDIOdir,1,SDIOpin,bit); setbit(SDIOdir,SDIOpin,0);
std::cout << "spibitbang reg="<<reg<<" data="<<data2<<"\n"; std::cout << "spibitbang reg="<<reg<<" data="<<data2<<"\n";
data[0]=data2; data[0]=data2;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment