Перейти к содержанию

    

Запись в регистры со сдвигом

Добрый день!

 

Как можно писать со сдвигом.

 

Есть dts:

 

myled: myled@43c00000 {
            compatible = "xlnx,myled-1.0";
            reg = <0x43c00000 0x10000>;
        };

 

По сути на ZedBоard это 8 лампочек

Написал драйвер и могу включать лампочки таким образом:

echo 0x1 > /proc/myled

 

Теперь хочу записывать со сдвигом, т.е. например единицу в 3 лампочку.

Т.е. в моем случае я отремапил лампочки в base_addr.

Если делать типа iowrite32(data, base_addr + addr_offset), то не помогает.

 

Вот попробовал:

 

[   25.093368] myled probed at VA 0xe0970000
zynq> echo 0x1 > /proc/myled
[   31.906246] res->start 0x43c00000
[   31.909543] remap_size 0x00010000
[   31.912899] base_addr 0xe0970000
[   31.916054] base_addr + ADDR_OFFSET 0xe0970400

 

В итоге загорается 0 лампочка.

 

Как например зажечь 3 лампочку именно с помощью сдвига? Как рассчитать addr_offset? Ответы типа записать 0x8 в base_addr не принимаются.

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я нигде не ошибся, то

 

iowrite32(data, base_addr + 1)

 

сдвигает на 32 бита!!!

 

P.S. Завтра точно скажу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
сдвигает на 32 бита!!!
А, так у вас пробелы в знании Си? Как же вы драйвер написали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация