コード例 #1
0
        /// <summary>
        /// implements bcm2835_pwm_set_clock
        /// </summary>
        /// <param name="divisor"></param>
        public void  Set_Clock(PWMClockDivider clockDivider)
        {
            /* From Gerts code */
            UInt32 divisor = (UInt32)clockDivider & 0xfff;

            /* Stop PWM clock */
            //bcm2835_peri_write(bcm2835_clk + BCM2835_PWMCLK_CNTL, BCM2835_PWM_PASSWRD | 0x01);
            SafeWriteUInt32(bcm2835_clk + (int)OP.BCM2835_PWMCLK_CNTL, OP.BCM2835_PWM_PASSWRD | 0x01);
            //bcm2835_delay(110); /* Prevents clock going slow */
            Wait(110);

            /* Wait for the clock to be not busy */
            //while ((bcm2835_peri_read(bcm2835_clk + BCM2835_PWMCLK_CNTL) & 0x80) != 0)
            //    bcm2835_delay(1);
            while ((SafeReadUInt32(bcm2835_clk + (int)OP.BCM2835_PWMCLK_CNTL) & 0x80) == 0)
            {
                Wait(1);
            }

            /* set the clock divider and enable PWM clock */
            //bcm2835_peri_write(bcm2835_clk + BCM2835_PWMCLK_DIV, BCM2835_PWM_PASSWRD | (divisor << 12));
            SafeWriteUInt32(bcm2835_clk + (int)OP.BCM2835_PWMCLK_DIV, OP.BCM2835_PWM_PASSWRD | (divisor << 12));
            //bcm2835_peri_write(bcm2835_clk + BCM2835_PWMCLK_CNTL, BCM2835_PWM_PASSWRD | 0x11); /* Source=osc and enable */
            SafeWriteUInt32(bcm2835_clk + (int)OP.BCM2835_PWMCLK_CNTL, OP.BCM2835_PWM_PASSWRD | 0x11);
        }
コード例 #2
0
 protected static extern void bcm2835_pwm_set_clock(PWMClockDivider divider);
コード例 #3
0
 public static void SetClockDivider(PWMClockDivider divider)
 {
     bcm2835_pwm_set_clock(divider);
 }