Помогите разобраться...
Надо открыть uart так, что бы tx pin был отключенным (т.е. порт только для чтения). Плата аналог SK-AT91SAM9XE512.
Предистория такова: после загрузки системы tx pin (лапа у меня 15(PB4)) судя по осциллографу находится z состоянии (отключен). Если порт открыть то tx pin переходит в активное состояние - там стабильная 1), если потом закрыть порт - то там остается тоже 1.
Так вот опять проблема - как снова отключить tx pin.
В системе порты определяются так: atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
atmel_usart.1: ttyS1 at MMIO 0xfffb0000 (irq = 6) is a ATMEL_SERIAL
atmel_usart.2: ttyS2 at MMIO 0xfffb4000 (irq = 7) is a ATMEL_SERIAL
atmel_usart.3: ttyS3 at MMIO 0xfffb8000 (irq = 8) is a ATMEL_SERIAL
atmel_usart.4: ttyS4 at MMIO 0xfffd0000 (irq = 23) is a ATMEL_SERIAL
Первое что в голову пришло это сбросить/отключить tx pin в регистре команд USART - US_CR(0x0000).
Пробовал для ttyS1 (0xfffb0000+US_CR) устанавливать биты RSTTX (reset TX), или TXDIS (disable TX) - никакой реакции. Вопрос - можно ли так напрямую через регистры управлять uart???
Может у кого-то есть какие-то соображения по этому поводу?!
Спасибо, но мне как раз надо работать как в режиме прослушки так и в активном режиме (RX & TX)- т.е. захватывать порт полностью-прием передача. В ядре если отключить - то это уже наверно навсегда. Поэтому и хотелось бы в линуксе полностью управлять лапкой TX.
Хоть я ничего и не понял в итоге - что вам нужно (у вас прямопротивоположные хотелки), проще тогда регистры PIO контроллера отобразить в адресном пространстве пользовательского процесса и делайте с ними что душе угодно.
Управлять лапкой TX (вкл. - выключ. в любое время) - при работе с com-портом.
На сколько я понимаю, напрямую управлять лапкой я не могу- т.к. является мультиплексирования с встроенным uart. Поэтому я и пытался управлять через регистр команд USART - US_CR(0x0000).
не вижу большой проблемы - раз пины инициализируются при открытие порта, то логично, что при закрытие порта их можно вернуть в исходное состояние (например Z)
вероятно это никому не требуется кроме вас, а значит код или отсутствует или не активизируется..
отсюда мысль - проследите цепочку вызовов функций при регистрации своего уарта и аналогично при закрытие порта.. ну и в подходящее место вставьте отключение "мешающих" пинов..
там и останетесь, ибо "код в студию"..
просьба - не выбирайте ядовито-зеленый цвет - "глаз режэт"
Спасибо, я пытался таким образом отключить uart - TXDIS: #define TXDIS (1<<7)
#define RSTTX (1<<3)
#define USART_CR 0x00
#define AT91_USART1 0xfffb0000
#define MAP_BASE (AT91_USART1)
.....
mapped_base+=(MAP_BASE & MAP_MASK);
*(int*)(mapped_base+USART_CR) = TXDIS; или RSTTX
но реакции никакой....
Решил проблему криво но работает:
через PIO_PER - перевел в PIO лапу TX uart -а. И теперь она в z.
А прямо писать в регистры uart ничего не дает.
Всем спасибо.