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

Merge branch 'pypcc3' of https://git.astron.nl/lofar2.0/pypcc into pypcc3

parents b98d3259 a7c72baa
No related branches found
No related tags found
No related merge requests found
...@@ -239,6 +239,24 @@ variables: ...@@ -239,6 +239,24 @@ variables:
dim: 96 dim: 96
mask: Ant_mask mask: Ant_mask
- name: RCU_GPIO1
driver: I2C_RFCHAIN
devreg: [IO1.GPIO1,IO2.GPIO1,IO3.GPIO1]
width: 8
rw: ro
dtype: uint8
dim: 96
mask: Ant_mask
- name: RCU_GPIO2
driver: I2C_RFCHAIN
devreg: [IO1.GPIO2,IO2.GPIO2,IO3.GPIO2]
width: 8
rw: ro
dtype: uint8
dim: 96
mask: Ant_mask
- name: RCU_LED0 - name: RCU_LED0
driver: I2C_RCU driver: I2C_RCU
description: LED on RCU description: LED on RCU
......
...@@ -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