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){
SDIOpin=config1.parameters[1];
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){
t_buffer bit[1]={0};
if (direction==0) { //Send
int data2 = ( 0x00 << 23 ) + ( 0x00 << 21 ) + ( reg << 8 ) + data[0];
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++)
{
bit[0]=(data2>>(31-x)) & 1; //Not that efficient, but works
parent->seti2c(SDIO,1,SDIOpin,bit);
bit[0]={1};parent->seti2c(CLK,1,CLKpin,bit);
bit[0]={0};parent->seti2c(CLK,1,CLKpin,bit);
setbit(SDIO,SDIOpin,(data2>>(31-x)) & 1);
setbit(CLK,CLKpin,1);
setbit(CLK,CLKpin,0);
}
bit[0]={1};parent->seti2c(CS,1,CSpin,bit);
bit[0]={1};parent->seti2c(SDIO,1,SDIOpin,bit);
setbit(CS,CSpin,1);
setbit(SDIO,SDIOpin,1);
} else {
int data2 = ( 0x01 << 15) + ( 0x00 << 13 ) + reg;
bit[0]={0};parent->seti2c(CLK,1,CLKpin,bit);
bit[0]={0};parent->seti2c(CS,1,CSpin,bit);//enable
setbit(CLK,CLKpin,0);
setbit(CS,CSpin,0);
for (int x=0;x<16;x++){
bit[0]={0};parent->seti2c(CLK,1,CLKpin,bit);
bit[0]=(data2>>(15-x)) & 1; //Not that efficient, but works
parent->seti2c(SDIO,1,SDIOpin,bit);
bit[0]={1};parent->seti2c(CLK,1,CLKpin,bit);
setbit(CLK,CLKpin,0);
setbit(SDIO,SDIOpin,(data2>>(15-x)) & 1);
setbit(CLK,CLKpin,1);
}
bit[0]=1;parent->seti2c(SDIOdir,1,SDIOpin,bit);
bit[0]=0;parent->seti2c(CLK,1,CLKpin,bit);
setbit(SDIOdir,SDIOpin,1);
setbit(CLK,CLKpin,0);
data2=0;
for (int x=0;x<8;x++){
parent->geti2c(SDIO,1,SDIOpin,bit);
data2<<=1;
data2+=bit[0];
bit[0]=1;parent->seti2c(CLK,1,CLKpin,bit);
bit[0]=0;parent->seti2c(CLK,1,CLKpin,bit);
setbit(CLK,CLKpin,1);
setbit(CLK,CLKpin,0);
}
bit[0]=1;parent->seti2c(CS,1,CSpin,bit);//disable
bit[0]=1;parent->seti2c(SDIO,1,SDIOpin,bit);
bit[0]=0;parent->seti2c(SDIOdir,1,SDIOpin,bit);
setbit(CS,CSpin,1);
setbit(SDIO,SDIOpin,1);
setbit(SDIOdir,SDIOpin,0);
std::cout << "spibitbang reg="<<reg<<" data="<<data2<<"\n";
data[0]=data2;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment