Exemplo n.º 1
0
        /// <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); */
        }
Exemplo n.º 2
0
        /// <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;
            }
        }