Skip to content

Commit 8db941a

Browse files
author
Richard Unger
committed
fixup SAMD driver refactor (working, tested)
1 parent b2773d8 commit 8db941a

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

src/drivers/hardware_specific/samd_mcu.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ void _writeDutyCycle2PWM(float dc_a, float dc_b, void* params) {
682682
* @param pinB phase B hardware pin number
683683
* @param pinC phase C hardware pin number
684684
*/
685-
void _writeDutyCycle3PWM(float dc_a, float dc_b, float dc_c, int pinA, int pinB, int pinC, void* params) {
685+
void _writeDutyCycle3PWM(float dc_a, float dc_b, float dc_c, void* params) {
686686
writeSAMDDutyCycle(((SAMDHardwareDriverParams*)params)->tccPinConfigurations[0], dc_a);
687687
writeSAMDDutyCycle(((SAMDHardwareDriverParams*)params)->tccPinConfigurations[1], dc_b);
688688
writeSAMDDutyCycle(((SAMDHardwareDriverParams*)params)->tccPinConfigurations[2], dc_c);
@@ -706,7 +706,7 @@ void _writeDutyCycle3PWM(float dc_a, float dc_b, float dc_c, int pinA, int pinB
706706
* @param pin2A phase 2A hardware pin number
707707
* @param pin2B phase 2B hardware pin number
708708
*/
709-
void _writeDutyCycle4PWM(float dc_1a, float dc_1b, float dc_2a, float dc_2b, int pin1A, int pin1B, int pin2A, int pin2B, void* params){
709+
void _writeDutyCycle4PWM(float dc_1a, float dc_1b, float dc_2a, float dc_2b, void* params){
710710
writeSAMDDutyCycle(((SAMDHardwareDriverParams*)params)->tccPinConfigurations[0], dc_1a);
711711
writeSAMDDutyCycle(((SAMDHardwareDriverParams*)params)->tccPinConfigurations[1], dc_1b);
712712
writeSAMDDutyCycle(((SAMDHardwareDriverParams*)params)->tccPinConfigurations[2], dc_2a);
@@ -740,35 +740,36 @@ void _writeDutyCycle4PWM(float dc_1a, float dc_1b, float dc_2a, float dc_2b, in
740740
* @param pinC_l phase C low-side hardware pin number
741741
*
742742
*/
743-
void _writeDutyCycle6PWM(float dc_a, float dc_b, float dc_c, int pinA_h, int pinA_l, int pinB_h, int pinB_l, int pinC_h, int pinC_l, float dead_zone, void* params){
744-
tccConfiguration* tcc1 = ((SAMDHardwareDriverParams*)params)->tccPinConfigurations[0];
745-
tccConfiguration* tcc2 = ((SAMDHardwareDriverParams*)params)->tccPinConfigurations[1];
746-
uint32_t pwm_res =((SAMDHardwareDriverParams*)params)->tccPinConfigurations[0]->pwm_res;
743+
void _writeDutyCycle6PWM(float dc_a, float dc_b, float dc_c, void* params){
744+
SAMDHardwareDriverParams* p = (SAMDHardwareDriverParams*)params;
745+
tccConfiguration* tcc1 = p->tccPinConfigurations[0];
746+
tccConfiguration* tcc2 = p->tccPinConfigurations[1];
747+
uint32_t pwm_res =p->tccPinConfigurations[0]->pwm_res;
747748
if (tcc1->tcc.chaninfo!=tcc2->tcc.chaninfo) {
748749
// low-side on a different pin of same TCC - do dead-time in software...
749-
float ls = dc_a+(((SAMDHardwareDriverParams*)params)->dead_zone * (pwm_res-1)); // TODO resolution!!!
750+
float ls = dc_a+(p->dead_zone * (pwm_res-1)); // TODO resolution!!!
750751
if (ls>1.0) ls = 1.0f; // no off-time is better than too-short dead-time
751752
writeSAMDDutyCycle(tcc1, dc_a);
752753
writeSAMDDutyCycle(tcc2, ls);
753754
}
754755
else
755756
writeSAMDDutyCycle(tcc1, dc_a); // dead-time is done is hardware, no need to set low side pin explicitly
756757

757-
tcc1 = ((SAMDHardwareDriverParams*)params)->tccPinConfigurations[2];
758-
tcc2 = ((SAMDHardwareDriverParams*)params)->tccPinConfigurations[3];
758+
tcc1 = p->tccPinConfigurations[2];
759+
tcc2 = p->tccPinConfigurations[3];
759760
if (tcc1->tcc.chaninfo!=tcc2->tcc.chaninfo) {
760-
float ls = dc_b+(((SAMDHardwareDriverParams*)params)->dead_zone * (pwm_res-1));
761+
float ls = dc_b+(p->dead_zone * (pwm_res-1));
761762
if (ls>1.0) ls = 1.0f; // no off-time is better than too-short dead-time
762763
writeSAMDDutyCycle(tcc1, dc_b);
763764
writeSAMDDutyCycle(tcc2, ls);
764765
}
765766
else
766767
writeSAMDDutyCycle(tcc1, dc_b);
767768

768-
tcc1 = ((SAMDHardwareDriverParams*)params)->tccPinConfigurations[4];
769-
tcc2 = ((SAMDHardwareDriverParams*)params)->tccPinConfigurations[5];
769+
tcc1 = p->tccPinConfigurations[4];
770+
tcc2 = p->tccPinConfigurations[5];
770771
if (tcc1->tcc.chaninfo!=tcc2->tcc.chaninfo) {
771-
float ls = dc_c+(((SAMDHardwareDriverParams*)params)->dead_zone * (pwm_res-1));
772+
float ls = dc_c+(p->dead_zone * (pwm_res-1));
772773
if (ls>1.0) ls = 1.0f; // no off-time is better than too-short dead-time
773774
writeSAMDDutyCycle(tcc1, dc_c);
774775
writeSAMDDutyCycle(tcc2, ls);

0 commit comments

Comments
 (0)