/// <summary> /// Implements bcm2835_pwm_set_mode /// </summary> /// <param name="channel"></param> /// <param name="markspace"></param> /// <param name="enabled"></param> public void Set_Mode(PWMChannelType channel, bool markspace, bool enabled) { ////if (bcm2835_clk == MAP_FAILED //// || bcm2835_pwm == MAP_FAILED) //// return; /* bcm2835_init() failed or not root */ UInt32 control = SafeReadUInt32(bcm2835_pwm + (int)OP.BCM2835_PWM_CONTROL); switch (channel) { case PWMChannelType.PWMChannel0: if (markspace) { control |= OP.BCM2835_PWM0_MS_MODE; } else { control &= ~OP.BCM2835_PWM0_MS_MODE; } if (enabled) { control |= OP.BCM2835_PWM0_ENABLE; } else { control &= ~OP.BCM2835_PWM0_ENABLE; } break; case PWMChannelType.PWMChannel1: if (markspace) { control |= OP.BCM2835_PWM1_MS_MODE; } else { control &= ~OP.BCM2835_PWM1_MS_MODE; } if (enabled) { control |= OP.BCM2835_PWM1_ENABLE; } else { control &= ~OP.BCM2835_PWM1_ENABLE; } break; } /* If you use the barrier here, wierd things happen, and the commands dont work */ //bcm2835_peri_write_nb(bcm2835_pwm + BCM2835_PWM_CONTROL, control); WriteUInt32(bcm2835_pwm + (int)OP.BCM2835_PWM_CONTROL, control); /* bcm2835_peri_write_nb(bcm2835_pwm + BCM2835_PWM_CONTROL, BCM2835_PWM0_ENABLE | BCM2835_PWM1_ENABLE | BCM2835_PWM0_MS_MODE | BCM2835_PWM1_MS_MODE); */ }
/// <summary> /// Implements bcm2835_pwm_set_data /// </summary> /// <param name="channel"></param> /// <param name="data"></param> public void Set_Data(PWMChannelType channel, UInt32 data) { //if (bcm2835_clk == MAP_FAILED // || bcm2835_pwm == MAP_FAILED) // return; /* bcm2835_init() failed or not root */ switch (channel) { case PWMChannelType.PWMChannel0: WriteUInt32(bcm2835_pwm + (int)OP.BCM2835_PWM0_DATA, data); break; case PWMChannelType.PWMChannel1: WriteUInt32(bcm2835_pwm + (int)OP.BCM2835_PWM1_DATA, data); break; } }