Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Raspberry Pi
  3. BCM2835 Чтение статусного регистра

BCM2835 Чтение статусного регистра

Запланировано Прикреплена Закрыта Перенесена Raspberry Pi
4 Сообщения 1 Posters 60 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано
    #1

    Добрый день!
    Пользуюсь библиотекой BCM2835.
    При вызове функции bcm2835_peri_read(BCM2835_GPIO_PWM), программа просто прерывается.
    Каким образом всё-таки можно считать текущие настройки GPIO и периферии?
    Заранее спасибо.

    1 ответ Последний ответ
    0
    • piP Не в сети
      piP Не в сети
      pi
      написал в отредактировано
      #2

      Не видя фрагмента исходного текста программы, в котором происходит вызов, трудно что-либо посоветовать.

      1 ответ Последний ответ
      0
      • piP Не в сети
        piP Не в сети
        pi
        написал в отредактировано pi
        #3

        Вот полностью функция инициализации PWM.
        Проблемный участок выделен звёздочками.

        void pwm_init (uint8_t __pin, uint8_t __clock_divider, uint8_t __channel, uint8_t __mode, uint8_t __enabled, uint8_t __range)
        {
            if ( !bcm2835_init() )
            {
                perror("BCM2835 error");
                exit(4);
            }
        
            /************************************************************************************************************/
            uint32_t *ptr_status = NULL;
            ptr_status = (uint32_t*) BCM2835_GPIO_PWM;    
        
            uint32_t status = bcm2835_peri_read_nb(ptr_status);
            
            printf("%d\n", status);
            /************************************************************************************************************/
        
            // Set the output pin to Alt Fun 5, to allow PWM channel 0 to be output there
            bcm2835_gpio_fsel(__pin, BCM2835_GPIO_FSEL_ALT0);
        
            // Clock divider is set to 16.
            // With a divider of 16 and a RANGE of 1024, in MARKSPACE mode,
            // the pulse repetition frequency will be
            // 1.2MHz/1024 = 1171.875Hz, suitable for driving a DC motor with PWM
            bcm2835_pwm_set_clock(__clock_divider);
            bcm2835_pwm_set_mode(__channel, __mode, __enabled);
            bcm2835_pwm_set_range(__channel, __range);
        
            printf("\nPWM is enabled\n\n");
        }
        
        1 ответ Последний ответ
        0
        • piP Не в сети
          piP Не в сети
          pi
          написал в отредактировано
          #4

          Зачем Вам читать состояние PWM-регистров в выделенном фрагменте непонятно, но «надо, так надо».

          Во-первых надо бы, наверное, объявить: volatile uint32_t *ptr_status = NULL;

          Во-вторых: авторы библиотеки пишут, что это небезопасная операция. Из этого предположу, что в Вашем случае значение BCM2835_GPIO_PWM может иметь некорректное значение, что может быть следствием несовпадения версии библиотеки BCM2835 и Вашей версии RaspberryPi/Raspbian.
          Попробуйте переустановить библиотеку заново «с чистого листа», предварительно обновив Raspbian до последнего состояния.

          1 ответ Последний ответ
          0

          • Войти

          • Нет учётной записи? Зарегистрироваться

          • Login or register to search.
          • Первое сообщение
            Последнее сообщение
          0
          • Категории
          • Главная
          • Документация
          • Последние
          • Пользователи