вопросик вот такой к многоуважаемым..по ходу фунциклирования самодельного модуля ядра нужно реализовать опрос регистра на внешней шине, с таймаутом.
посему нужен таймер.. чета я запарился совсем его искать.. и гугля (выдавая 10^10 ссылок) молчит.
точности особой не нужно - таймаут в пределах 500-2500 us некритичен.
собственно решение приходит само и описывается при старте системы так
Timecounter "i8254" frequency 1193182 Hz quality 0
тока еще бы найти точку входа в литературу по ентому поводу.. ну или в исходники.допоможите плз. чем сильны
>вопросик вот такой к многоуважаемым..
>
>по ходу фунциклирования самодельного модуля ядра нужно реализовать опрос регистра на внешней
>шине, с таймаутом.
>посему нужен таймер.. чета я запарился совсем его искать.. и гугля (выдавая
>10^10 ссылок) молчит.
>точности особой не нужно - таймаут в пределах 500-2500 us некритичен.
>собственно решение приходит само и описывается при старте системы так
>Timecounter "i8254" frequency 1193182 Hz quality 0
>тока еще бы найти точку входа в литературу по ентому поводу.. ну
>или в исходники.
>
>допоможите плз. чем сильны
возможно помогут функции из серии sleepq_* (например sleepq_set_timeout(9)), но не уверен. Что именно нужно от таймеров ?
>возможно помогут функции из серии sleepq_* (например sleepq_set_timeout(9)), но не
>уверен. Что именно нужно от таймеров ?нужно опрашивать битик в регистре на PCI шине.
смысл такой что бит этот софтверно мною устанавливается (железяка ресеится) а потом хардверно сбрасывается через какое-то время. По докам время сброса не более 250us, но практика показывает что у инфинеонов все делается через жопу и при разных температурах этот бит ведет ся поразному.. а в некоторых девайсах ваще никада не снимается.поэтому опрашивать его нужно с таймаутом и, если через 500-900us ничего не сбросилось, нахально его командой убирать.
короче хочется такого эффекта как в нижепреведенной абстракции
for ( time0=timeT ; ( timeT<(time0+10) ) && (conf1 & CONF1_IIP) ; )
{ /* Wait for IIP (or timeout) */
conf1=m256[devID].regBase->conf1;
}тута timeT - какой-то freeruning таймер
(conf1 & CONF1_IIP) - как раз тот самый битиквот так вобщем
а тупая задержка не подходит потому что факт "неопускания" бита нужно просигнализировать юзермоду
>а тупая задержка не подходит потому что факт "неопускания" бита нужно просигнализировать
>юзермодуНичего не понял из обьяснения.
>Ничего не понял из обьяснения.а чтоже тут непонятного.
если бит не опустился сам, то инициализация не вылняется, а отлаживается до того времени когда юзерское приложение запустится и само, мануал так сказать, просмотрит все регистры и сконфижит их как нужно.
а сам факт "неопускания" бита нужно запомнить и потом выдать по соответствующему ioctl
>а сам факт "неопускания" бита нужно запомнить и потом выдать по соответствующему
>ioctlВсе равно не понял, почему не подходит "тупая задержка". timeout вместо DELAY я не советовал, т.к. ты оперируешь микросекундами, а timeout оперирует тиками (1-10 миллисекунд, частота определяется константой HZ при компиляции ядра). Хотя, если речь идет всего лишь про инициализацию, то все равно каким способом делать задержку и сколько времени она продлится, не так ли?
>нужно реализовать опрос регистра на внешней шине, с таймаутом.man 9 DELAY
>вопросик вот такой к многоуважаемым..
>
>по ходу фунциклирования самодельного модуля ядра нужно реализовать опрос регистра на внешней
>шине, с таймаутом.
>посему нужен таймер.. чета я запарился совсем его искать.. и гугля (выдавая
>10^10 ссылок) молчит.
>точности особой не нужно - таймаут в пределах 500-2500 us некритичен.
>собственно решение приходит само и описывается при старте системы так
>Timecounter "i8254" frequency 1193182 Hz quality 0
>тока еще бы найти точку входа в литературу по ентому поводу.. ну
>или в исходники.
>
>допоможите плз. чем сильны
man 9 timeout
>man 9 timeout
премного дякую