Mercurial > hg > beaglert
comparison core/I2c_Codec.cpp @ 97:c44fa102d02b
Added methods to I2c_Codec to interact with the PLL
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Thu, 23 Jul 2015 02:37:11 +0100 |
parents | 8a575ba3ab52 |
children | e24c531220ee |
comparison
equal
deleted
inserted
replaced
96:ef9392d077a4 | 97:c44fa102d02b |
---|---|
115 | 115 |
116 running = true; | 116 running = true; |
117 return 0; | 117 return 0; |
118 } | 118 } |
119 | 119 |
120 //set the numerator multiplier for the PLL | |
121 int I2c_Codec::setPllK(float k){ | |
122 short unsigned int j=(int)k; | |
123 unsigned int d=(k-j+0.5)*10000; //fractionary part, between 0 and 9999 | |
124 if(setPllJ(j)>0) | |
125 return 1; | |
126 if(setPllD(d)>0) | |
127 return 2; | |
128 return 0; | |
129 } | |
130 | |
131 | |
132 //set integer part of the numerator mutliplier of the PLL | |
133 int I2c_Codec::setPllJ(short unsigned int j){ | |
134 if(j>=64 || j<1){ | |
135 return 1; | |
136 } | |
137 if(writeRegister(0x04, j<<2)){ // PLL register B: j<<2 | |
138 printf("I2C error while writing PLL j: %d", j); | |
139 return 1; | |
140 } | |
141 return 0; | |
142 } | |
143 | |
144 //set fractional part(between 0 and 9999) of the numerator mutliplier of the PLL | |
145 int I2c_Codec::setPllD(unsigned int d){ | |
146 if(d<0 || d>9999) | |
147 return 1; | |
148 if(writeRegister(0x05, (d>>6)&255)){ // PLL register C: part 1 : 8 most significant bytes of a 14bit integer | |
149 printf("I2C error while writing PLL d part 1 : %d", d); | |
150 return 1; | |
151 } | |
152 if(writeRegister(0x06, (d<<2)&255)){ // PLL register D: D=5264, part 2 | |
153 printf("I2C error while writing PLL d part 2 : %d", d); | |
154 return 1; | |
155 } | |
156 return 0; | |
157 } | |
120 // Set the volume of the DAC output | 158 // Set the volume of the DAC output |
121 int I2c_Codec::setDACVolume(int halfDbSteps) | 159 int I2c_Codec::setDACVolume(int halfDbSteps) |
122 { | 160 { |
123 dacVolumeHalfDbs = halfDbSteps; | 161 dacVolumeHalfDbs = halfDbSteps; |
124 if(running) | 162 if(running) |