From 822e509216574add6b9621208a75be20d009c861 Mon Sep 17 00:00:00 2001
From: Paulus <kruger@astron.nl>
Date: Thu, 18 Mar 2021 07:44:31 +0000
Subject: [PATCH] spi and temp working
---
pypcc/yamlreader.py | 4 ++--
src/apsctl/RCU.yaml | 18 ++++++++++++++++++
src/drivers/drvbase.cpp | 2 +-
src/drivers/i2c_array.cpp | 3 +++
src/drivers/i2c_array2.cpp | 2 +-
src/drivers/spibitbang1.cpp | 8 +++++---
6 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/pypcc/yamlreader.py b/pypcc/yamlreader.py
index 8124e05..0b731d3 100644
--- a/pypcc/yamlreader.py
+++ b/pypcc/yamlreader.py
@@ -98,7 +98,7 @@ class yamlreader():
print("M2:",mask)
dtype=v.get('dtype','integer');
width=(v.get('width',8)-1)//8+1
- if (dtype=="float"):
+ if (dtype=="double"):
scale=v.get('scale',1.)
data=[int(d/scale) for d in data]
if (dtype=="boolean"):
@@ -171,7 +171,7 @@ class yamlreader():
else:
print("OPCset unsupported type");
return;
- if dtype=="float":
+ if dtype=="double":
scale=float(v.get('scale',1.))
data2=[(d*scale) for d in data2]
data3=v['OPCR'].get_value();
diff --git a/src/apsctl/RCU.yaml b/src/apsctl/RCU.yaml
index fda46ea..bcb9625 100644
--- a/src/apsctl/RCU.yaml
+++ b/src/apsctl/RCU.yaml
@@ -210,6 +210,24 @@ variables:
dim: 96
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_band
description: Band select switch 1=10MHz,2=30MHz
driver: I2C_RFCHAIN
diff --git a/src/drivers/drvbase.cpp b/src/drivers/drvbase.cpp
index 365a1ed..d4edba4 100644
--- a/src/drivers/drvbase.cpp
+++ b/src/drivers/drvbase.cpp
@@ -3,7 +3,7 @@
drvbase::drvbase(const t_driver config1) : config (config1){};
bool drvbase::I2Csend(int addr,int reg,int len,t_buffer* data,int direction){
- std::cout << "I2Csend "<<config.name <<" not implemented!\n";
+// std::cout << "I2Csend "<<config.name <<" not implemented!\n";
return false;
};
diff --git a/src/drivers/i2c_array.cpp b/src/drivers/i2c_array.cpp
index afa4b25..47adb95 100644
--- a/src/drivers/i2c_array.cpp
+++ b/src/drivers/i2c_array.cpp
@@ -94,6 +94,9 @@ void c_i2c_array::geti2c(const t_devreg devreg,int width,int bitoffset,t_buffer*
// buffer[0]=storedRegs[devreg.store-1][rcui];
storedRegs[devreg.store-1][selectedRCU]=buffer[0];
buffer[0]=UnMask(buffer[0],width,bitoffset);
+ } else
+ if ((bitoffset==0) && (len2*8-width>0)) {//Just mask on last byte
+ buffer[0]=UnMask(buffer[0],width-(len2-1)*8,0);
}
}
diff --git a/src/drivers/i2c_array2.cpp b/src/drivers/i2c_array2.cpp
index 5977d56..d879e45 100644
--- a/src/drivers/i2c_array2.cpp
+++ b/src/drivers/i2c_array2.cpp
@@ -33,7 +33,7 @@ int c_i2c_array2::getvar(int x,t_buffer* buffer,int lenmask,bool* mask){
N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),1,mask);
else
for (int y=0;y<N2;y++)
- N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),stepmask,&(mask[y]));
+ N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),lenmask,&(mask[y]));
return stride*N*N2;
};
diff --git a/src/drivers/spibitbang1.cpp b/src/drivers/spibitbang1.cpp
index 2edb3c2..2cf5ea3 100644
--- a/src/drivers/spibitbang1.cpp
+++ b/src/drivers/spibitbang1.cpp
@@ -8,9 +8,10 @@ c_spibitbang1::c_spibitbang1(const t_driver config1) : drvbase (config1){
SDIO=config1.devreg[1];
SDIOdir=config1.devreg[2];
CS=config1.devreg[3];
+
CLKpin=config1.parameters[0];
SDIOpin=config1.parameters[1];
- CSpin=config1.parameters[2];
+ CSpin=config1.parameters[3];
};
bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int direction){
@@ -44,7 +45,7 @@ bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int directio
data2=0;
for (int x=0;x<8;x++){
parent->geti2c(SDIO,1,SDIOpin,bit);
- data2<<=2;
+ data2<<=1;
data2+=bit[0];
bit[0]=1;parent->seti2c(CLK,1,CLKpin,bit);
bit[0]=0;parent->seti2c(CLK,1,CLKpin,bit);
@@ -53,7 +54,8 @@ bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int directio
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);
-
+ std::cout << "spibitbang reg="<<reg<<" data="<<data2<<"\n";
+ data[0]=data2;
}
return true;
}
--
GitLab