##// END OF EJS Templates
sync
jeandet@PC-DE-JEANDET.lab-lpp.local -
r29:54cc31ae3ae3 default
parent child
Show More
@@ -26,6 +26,7
26 #include <uart.h>
26 #include <uart.h>
27 #include <stdio.h>
27 #include <stdio.h>
28 #include <stm32f4xx_gpio.h>
28 #include <stm32f4xx_gpio.h>
29 #include <i2c.h>
29 uint32_t OSC0 =8000000;
30 uint32_t OSC0 =8000000;
30 uint32_t INTOSC =16000000;
31 uint32_t INTOSC =16000000;
31 uint32_t RTCOSC =32768;
32 uint32_t RTCOSC =32768;
@@ -43,6 +44,7 int bsp_init()
43 }
44 }
44 bsp_GPIO_init();
45 bsp_GPIO_init();
45 bsp_uart_init();
46 bsp_uart_init();
47 bsp_iic_init();
46 printf("\r================================================================\n\r");
48 printf("\r================================================================\n\r");
47 printf("================================================================\n\r");
49 printf("================================================================\n\r");
48 printf(BSP);
50 printf(BSP);
@@ -119,7 +121,7 void bsp_spi_init()
119
121
120 void bsp_iic_init()
122 void bsp_iic_init()
121 {
123 {
122
124 i2copenandconfig(i2c2,0,400000,PF0,PF1);
123 }
125 }
124
126
125 void bsp_SD_init()
127 void bsp_SD_init()
@@ -97,10 +97,8 void bsp_spi_init()
97
97
98 void bsp_iic_init()
98 void bsp_iic_init()
99 {
99 {
100 if(0==i2copenandconfig(i2c1,0,400000,PB9,PB6))printf("I2C1 opened\n\r");
100 i2copenandconfig(i2c1,0,400000,PB9,PB6);
101 i2cenable(i2c1);
101 i2copenandconfig(i2c3,0,400000,PC9,PA8);
102 if(0==i2copenandconfig(i2c3,0,400000,PC9,PA8))printf("I2C3 opened\n\r");
103 i2cenable(i2c3);
104 }
102 }
105
103
106 void bsp_SD_init()
104 void bsp_SD_init()
@@ -2,8 +2,8 TEMPLATE = app
2 CONFIG += console
2 CONFIG += console
3 CONFIG -= qt
3 CONFIG -= qt
4
4
5 #BSP = BEAGLESYNTH
5 BSP = BEAGLESYNTH
6 BSP = SOLAR_LFR_PSU
6 #BSP = SOLAR_LFR_PSU
7 include($$(libuc2)/bsp/cfg/$$BSP/bsp.pri)
7 include($$(libuc2)/bsp/cfg/$$BSP/bsp.pri)
8 #include($$(libuc2)/rules/stm32f4-arm-none-eabi-gcc/rules.pri)
8 #include($$(libuc2)/rules/stm32f4-arm-none-eabi-gcc/rules.pri)
9
9
@@ -6,16 +6,21
6 #include <bsp.h>
6 #include <bsp.h>
7 #include <i2c.h>
7 #include <i2c.h>
8 #include <CS43L22.h>
8 #include <CS43L22.h>
9 #include <ina226.h>
9
10
10
11
11 extern streamdevice* __opnfiles__[];
12 extern streamdevice* __opnfiles__[];
12
13
13 int main()
14 int main()
14 {
15 {
15 CS43L22_t audioDac1;
16 INA226_t Psens1;
16 cs43l22open(&audioDac1,i2c1,0);
17 gpioset(PSU_DISABLE);
17 char id=cs43l22getID(&audioDac1);
18 ina226open(&Psens1,i2c2,0,0,15,300000);
18 printf("DAC ID=%x\n\r",0x0ff&id);
19 uint16_t id=ina226getID(&Psens1);
20 printf("INA226 ID=%x\n\r",0x0ffff&id);
21 id=ina226getReg(&Psens1,INA226_Calibration_Reg);
22 printf("INA226 CAL=%x\n\r",0x0ffff&id);
23 unsigned int current;
19 while(1)
24 while(1)
20 {
25 {
21 for(volatile int i=0;i<1024*2048;i++);
26 for(volatile int i=0;i<1024*2048;i++);
@@ -24,7 +29,8 int main()
24 for(volatile int i=0;i<1024*2048;i++);
29 for(volatile int i=0;i<1024*2048;i++);
25 gpioclr(LED1);
30 gpioclr(LED1);
26 gpioset(LED2);
31 gpioset(LED2);
27 i2cwrite(i2c1,0x4a,"test",1);
32 current = ina226getCurrent(&Psens1);
33 printf("Current = %uοΏ½A %umA\n\r",current,current/1000);
28 }
34 }
29 printf("hello world\n\r");
35 printf("hello world\n\r");
30 return 0;
36 return 0;
@@ -34,16 +34,20 typedef struct INA226_t
34 }INA226_t;
34 }INA226_t;
35
35
36 extern int ina226open(INA226_t* dev,i2c_t i2cdev,uint8_t A0,uint8_t A1,uint32_t shuntmOhm, uint32_t CurrentRangeuAmp);
36 extern int ina226open(INA226_t* dev,i2c_t i2cdev,uint8_t A0,uint8_t A1,uint32_t shuntmOhm, uint32_t CurrentRangeuAmp);
37 extern uint8_t ina226getID(INA226_t* dev);
37 extern uint16_t ina226getID(INA226_t* dev);
38 extern int ina226calibrate(INA226_t* dev,uint32_t shuntmOhm, uint32_t CurrentRangeuAmp);
38 extern int ina226calibrate(INA226_t* dev,uint32_t shuntmOhm, uint32_t CurrentRangeuAmp);
39 extern uint32_t ina226getBusVoltage(INA226_t* dev);
39 extern uint32_t ina226getBusVoltage(INA226_t* dev);
40 extern uint32_t ina226getPower(INA226_t* dev);
40 extern uint32_t ina226getPower(INA226_t* dev);
41 extern uint32_t ina226getCurrent(INA226_t* dev);
42 extern uint16_t ina226getReg(INA226_t* dev,char reg);
43 extern int ina226setReg(INA226_t* dev,char reg,int16_t value);
41
44
42
45
43 #define INA226_I2C_ADDRESS 0x40
46 #define INA226_I2C_ADDRESS 0x40
44
47
45
48
46 #define INA226_Die_ID_Reg 0xFF
49 #define INA226_Die_ID_Reg 0xFF
50 #define INA226_Configuration_Reg 0
47 #define INA226_Shunt_Voltage_Reg 1
51 #define INA226_Shunt_Voltage_Reg 1
48 #define INA226_Bus_Voltage_Reg 2
52 #define INA226_Bus_Voltage_Reg 2
49 #define INA226_Power_Reg 3
53 #define INA226_Power_Reg 3
@@ -31,19 +31,18 int ina226open(INA226_t *dev, i2c_t i2cd
31 dev->devAddress = INA226_I2C_ADDRESS | (A0 & 1) | ((A1<<1) & 2);
31 dev->devAddress = INA226_I2C_ADDRESS | (A0 & 1) | ((A1<<1) & 2);
32 dev->shuntmOhm = shuntmOhm;
32 dev->shuntmOhm = shuntmOhm;
33 dev->CurrentRangeuAmp = CurrentRangeuAmp;
33 dev->CurrentRangeuAmp = CurrentRangeuAmp;
34 return 1;
34 ina226setReg(dev,INA226_Configuration_Reg,0x8000);
35 return ina226calibrate(dev,shuntmOhm,CurrentRangeuAmp);
35 }
36 }
36 return -1;
37 return -1;
37 }
38 }
38
39
39 uint8_t ina226getID(INA226_t* dev)
40 uint16_t ina226getID(INA226_t* dev)
40 {
41 {
41 if(dev != NULL)
42 if(dev != NULL)
42 {
43 {
43 char DATA[]={INA226_Die_ID_Reg};
44 uint16_t id=ina226getReg(dev,INA226_Die_ID_Reg);
44 i2cwrite(dev->i2cdev,dev->devAddress,DATA,1);
45 return id;
45 i2cread(dev->i2cdev,dev->devAddress,DATA,1);
46 return DATA[0];
47 }
46 }
48 return -1;
47 return -1;
49 }
48 }
@@ -54,39 +53,58 int ina226calibrate(INA226_t* dev,uint32
54 dev->shuntmOhm = shuntmOhm;
53 dev->shuntmOhm = shuntmOhm;
55 dev->CurrentRangeuAmp = CurrentRangeuAmp;
54 dev->CurrentRangeuAmp = CurrentRangeuAmp;
56 uint32_t CAL= (uint32_t)(5210000/(shuntmOhm*(CurrentRangeuAmp>>15)));
55 uint32_t CAL= (uint32_t)(5210000/(shuntmOhm*(CurrentRangeuAmp>>15)));
57 char CMD[3];
56 printf("CAL = %x\n\r",CAL);
58 CMD[0]=INA226_Calibration_Reg;
57 return ina226setReg(dev,INA226_Calibration_Reg,(uint16_t)CAL);
59 CMD[1]=(char)(0xff & (CAL>>8));
60 CMD[2]=(char)(0xff & CAL);
61 i2cwrite(dev->i2cdev,dev->devAddress,CMD,3);
62 }
58 }
63
59
64 uint32_t ina226getBusVoltage(INA226_t *dev)
60 uint32_t ina226getBusVoltage(INA226_t *dev)
65 {
61 {
66 char CMD[2];
62 uint32_t busVoltage= ina226getReg(dev,INA226_Bus_Voltage_Reg);
67 CMD[0]=INA226_Bus_Voltage_Reg;
68 i2cwrite(dev->i2cdev,dev->devAddress,CMD,1);
69 i2cread(dev->i2cdev,dev->devAddress,CMD,2);
70 uint32_t busVoltage= CMD[0];
71 busVoltage = (busVoltage<<8) + CMD[1];
72 busVoltage*= 1250;
63 busVoltage*= 1250;
73 return busVoltage;
64 return busVoltage;
74 }
65 }
75
66
76 uint32_t ina226getPower(INA226_t *dev)
67 uint32_t ina226getPower(INA226_t *dev)
77 {
68 {
78 char CMD[2];
69 uint32_t power= ina226getReg(dev,INA226_Power_Reg);
79 CMD[0]=INA226_Power_Reg;
70 power*= ((dev->CurrentRangeuAmp>>15)*25);
80 i2cwrite(dev->i2cdev,dev->devAddress,CMD,1);
71 return power;
81 i2cread(dev->i2cdev,dev->devAddress,CMD,2);
72 }
82 uint32_t power= CMD[0];
73
83 power = (power<<8) + CMD[1];
74 uint32_t ina226getCurrent(INA226_t *dev)
84 power*= ((CurrentRangeuAmp>>15)*25);
75 {
85 return busVoltage;
76 uint32_t current= ina226getReg(dev,INA226_Current_Reg);
77 //current*= ((dev->CurrentRangeuAmp>>15));
78 return current;
79 }
80
81 uint16_t ina226getReg(INA226_t* dev,char reg)
82 {
83 if(dev != NULL)
84 {
85 char DATA[2];
86 DATA[0]=reg;
87 i2cwrite(dev->i2cdev,dev->devAddress,DATA,1);
88 i2cread(dev->i2cdev,dev->devAddress,DATA,2);
89 uint16_t val=DATA[0];
90 val=(val<<8)+DATA[1];
91 return val;
92 }
93 return -1;
86 }
94 }
87
95
88
96
97 int ina226setReg(INA226_t* dev,char reg,int16_t value)
98 {
99 if(dev != NULL)
100 {
101 char DATA[3];
102 DATA[0]=INA226_Calibration_Reg;
103 DATA[1]=(char)(0xff & (value>>8));
104 DATA[2]=(char)(0xff & value);
105 if(3==i2cwrite(dev->i2cdev,dev->devAddress,DATA,3))return 1;
106 }
107 return -1;
108 }
89
109
90
110
91
92
General Comments 0
You need to be logged in to leave comments. Login now