Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в порт, функции inb,oub 
:(
    Опции темы
hente
Дата 1.4.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



Здраствуйтеsmile)

Код

10 value=inb(0x2fb);//считываеи данные
20     value---< выставляем необходимые биты
30 outb(value,0x2fb);//устанавливаем



описание:
Считываю байт из регистра с данным адресом
потом выставляю необходимый бит, и опять записываю
но вот после записи считываю байт а он без изменений
как будто строки 20 и небыло 

перед этим резервирую эти адреса портов ф-ей reque_regoin()

в чеи может быть проблемв? 
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
xvr
Дата 1.4.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



А что за девайс там висит? Может он так и должен реагировать?

PM MAIL   Вверх
hente
Дата 1.4.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



UART
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
xvr
Дата 1.4.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Там висит Line Control регистр. Должен писаться и читаться. Можно глянуть на код?



Это сообщение отредактировал(а) xvr - 1.4.2009, 14:33
PM MAIL   Вверх
MAKCim
Дата 1.4.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(hente @  1.4.2009,  10:56 Найти цитируемый пост)
в чеи может быть проблемв?  

мож задержку (udelay из ядра, yield из юзер-спейс) перед повторным считыванием сделать?



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
hente
Дата 2.4.2009, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



ядро 2.6.21.5
вот исходникsmile)

Код

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>

#include <linux/interrupt.h>
#include <linux/sched.h>
#include <linux/workqueue.h>
#include <linux/ioport.h>
#include <asm/io.h>

static int adr_port=0x2f8;
static int count_port=8;

/*----------------------------------------------
----------------------------------------------*/

irqreturn_t irq_handler(int irq,void* dev_id,struct pt_rega *regs){
    
    printk("<1> irq_%d",irq); 
    
    return IRQ_HANDLED;
    }

/*------------------------------------------------
------------------------------------------------*/

static int init_mod(void){
    request_region(adr_port,count_port,"test_irq_mem");

    printk("<1> START MOD"); 
    printk("<1> \n"); 
    int status=1;
//-------------------------------------------------    
    unsigned char irq_on;
    
    outb(0,0x02fb);
    printk("<1> 0x2fb edit %x \n",irq_on);     
    
    irq_on=inb(0x02fb);
    printk("<1> 0x2fb read %x \n",irq_on); //тут всегда читает FF не завимо 
                                                 //что я записываю 0б или любой другой бит
    
//    flag SA_INTERRUPT SA_SHIRQ
    
    free_irq(3,NULL);    
    status = request_irq(3,irq_handler,  SA_INTERRUPT,"test_irq",(void*)(irq_handler));
                                    //         __^__
                                   //тут правильно флаг стоит?
    printk("<1> request_irq %d \n",status); 
    
     return 0;
    }

/*---------------------------------------------------    
----------------------------------------------------*/

static void cleanup_mod(void){
    release_region(adr_port,count_port);
    printk("<1> STOP MOD"); 
    free_irq(3,NULL);    
    return;
    }
    
/*--------------------------------------------------
---------------------------------------------------*/    
module_init(init_mod); 
module_exit(cleanup_mod); 
 



Это сообщение отредактировал(а) hente - 2.4.2009, 10:42
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
hente
Дата 2.4.2009, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



к стате вчера пришла идея:  аможет другие модули зарезервировали эти регстры...так вот
перекомпилировал ядро отключив (поставил "модуль") все что связано с последовательным портом
как раз после этого и начало выдавать "FF", а до того при чтении выдавало "00"...вот правильно ли я мыслю?
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
MAKCim
Дата 2.4.2009, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



hente
насколько я вижу, ты записываешь 0 в порт 0x02fb
почему при чтении ты должен получить FF? это логика устройства?

Добавлено через 3 минуты и 21 секунду
Цитата(hente @  2.4.2009,  05:22 Найти цитируемый пост)
аможет другие модули зарезервировали эти регстры...

посмотри спецификацию на чипсет
обычно есть два диапазона адресов I/O: настриваемый и legacy
legacy диапазон распределен между legacy устройствами и статичен
настриваемый позволяет динамически резервировать для PCI устройств пространство адресов I/O


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
hente
Дата 2.4.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



в том тот и проблема почему когда я  туда записываю "0"(любой байт) получаю "FF"...???????
0x02fb-как я понял эт регист управления COM2 портом (0x2f8)
там по определенным битам включается прерывания на IRQ 3,

вообще проблема в том что приведенный выше код не отлавливает прерывания от COM2 (ну или UART)

зато если меняю в request_irq() первый параметр(номер прерывания ) то клавиатурные прерывания без проблем ловятся.

Устройство подключено и работает!...под другой ОС (WIN) гружусь все в норме...

очень большая просьба к помощи, от людей которые с этим сталкивалися.

Это сообщение отредактировал(а) hente - 2.4.2009, 10:43
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
xvr
Дата 2.4.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Похоже нету там у тебя порта  smile Ищи его на других адресах. Или по крайней мере проверь, что из портов 0x2f8-0x2ff считывается что либо отличное от FF

PM MAIL   Вверх
andrew_121
Дата 2.4.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



В старые добрые времена кодил под DOS драйвер звуковухи. Так вот. Там, для инициализации нужно было записать значение, считать, произвести битовую операцию, и обратно записать.
Так вот что было не так как писалось в даташите на микруху. При попытке считать значение, оно считывалось таким же. Исправить проблему получилось только введением цикла в момент считывания, который продолжался до тех пор, пока считываемое значение не изменилось. И все, вуаля!



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0708 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.