BCM2835 Чтение статусного регистра
-
Добрый день!
Пользуюсь библиотекой BCM2835.
При вызове функции bcm2835_peri_read(BCM2835_GPIO_PWM), программа просто прерывается.
Каким образом всё-таки можно считать текущие настройки GPIO и периферии?
Заранее спасибо. -
Не видя фрагмента исходного текста программы, в котором происходит вызов, трудно что-либо посоветовать.
-
Вот полностью функция инициализации 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");
}
-
Зачем Вам читать состояние PWM-регистров в выделенном фрагменте непонятно, но «надо, так надо».
Во-первых надо бы, наверное, объявить: volatile uint32_t *ptr_status = NULL;
Во-вторых: авторы библиотеки пишут, что это небезопасная операция. Из этого предположу, что в Вашем случае значение BCM2835_GPIO_PWM может иметь некорректное значение, что может быть следствием несовпадения версии библиотеки BCM2835 и Вашей версии RaspberryPi/Raspbian.
Попробуйте переустановить библиотеку заново «с чистого листа», предварительно обновив Raspbian до последнего состояния.