SysInfo for Arduino

nik182
Offline
Зарегистрирован: 04.05.2015

Это не порты, это регистры таймера. Цитата: 14.4.1 TIM1&TIM8 control register 1 (TIMx_CR1) . . . . . . . . . . . . . . . . . . . . . 333

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В данном случае порты - это назначение, регистры - это реализация.

Ничто не мешает делать порты в виде регистров.

В то же время, например, 74HC595 - регистр, но не порт. А TIMx_... - именно порты, т.к.:

1. Расположены в адресном пространстве процессора.

2. Служат для управления периферийным устройством.

nik182
Offline
Зарегистрирован: 04.05.2015

Порт это что то такое, что позволяет пропустить через себя наружу или внутрь. Например, кроме непосредственно портов ножек процессора, собранных по 8 - 16 штук, последовательный порт, SPI порт, в ББ это LPT и.т.д. Но всё равно это вывод из корпуса процессора, который передаёт информацию, в виде физического изменения состояния - напряжения, отбирая ноги у портов ввода-вывода.  Никогда не рассматривал порт как логическое устройство.  Как раз регистры для меня не могут быть портами, потому что через них не проходит ничего. Это ключи управления. 74HC595 - регистр по функциональному назначению. МС имеет несколько ячеек памяти, объединённых в регистр. Вывод на ноги МС идет через порт. Этот порт простой - защёлка с выходом на ноги. Найдите мне пожалуйста хоть в одном мануале на микроконтроллер слово порт в значении логического устройства. Я ни разу не встречал.  

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Порт - устройство, расположенное в адресном пространстве процессора и служащее для взаимодействия с периферией.

2. Регистр - устройство, способное запоминать и хранить информацию.

3. Из сравнения 1 и 2 делаем вывод, что термины "регистр" и "порт" - ортогональные: как регистр может либо быть, либо не быть портом, так и порт - быть либо не быть регистром.

4. В современных МК много периферии собрано внутри одного корпуса (и даже кристалла). Соответственно, устройства, служащие для взаимодействия процессора с периферией могут не иметь никаких выводов за пределы корпуса (кристалла). И, соответственно, не иметь подключенных к ним "ножек".

5. В русском языке слово "мануал" употребляется только в значении органной клавиатуры. Те же, кто слово "manual" переводят как "мануал", а не "руководство пользователя", говорят не по-русски, а потому ориентироваться на употребляемую ими терминологию вряд ли разумно. Чтобы владеть правильно русскоязычной терминологией, нужно читать не "мануалы", а учебники. Да, собственно, Вы и сами только что приводили примеры, как авторы "мануалов" пишут кто в лес, кто - по дрова.

nik182
Offline
Зарегистрирован: 04.05.2015

И тут мы приходим к любимому первому вопросу одного из наших профессоров - давайте определимся с терминами. Как я вижу наши определения сильно расходятся. В таких условиях я не вижу возможности продолжать дискуссию до момента согласования определений. Мануал - побуквенная калька с английского слова входящего в названия документов - руководств по эксплуатации. Это не учебники. Русский язык он такой. Вбирает в себя многое и развивается. Что то остаётся, что то отбрасывается. Очень люблю читать книги Никитина. Главное не содержание. Очень нравиться как он играет со словами. Иногда просто удовольствие увидеть новые словоформы и их применение. Для меня регистр и порт разные устройства. Регистр это совокупность ячеек памяти имеющих один адрес в адресном пространстве и одинаковое назначение по функционалу. Порт это совокупность сущностей, обеспечивающаяя обмен информацией между МК и внешним миром. В порт ввода-вывода входят в том числе несколько регистров, каждый из которых имеет свой собственный адрес. Таким образом порт это более широкое понятие.

P.S. Пример от STM - RM0383 Reference manual STM32F411xC/E advanced ARM®-based 32-bit MCUs - в данном случае справочное руководство по МК. Предлагаю ознакомиться и найти как используется слово port. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nik182 пишет:

давайте определимся с терминами.

Логично.

От себя хочу заметить, что, коль скоро, мы говорим об устоявшихся терминах, их свойства не должны быть противоречивы. Что дает основание полагать, что в таком случае нам на помощь может прийти логика.

Цитата:

Регистр это совокупность ячеек памяти имеющих один адрес в адресном пространстве и одинаковое назначение по функционалу.

Поправка: регистр не обязан иметь адрес. Пример - уже упоминавшийся 74HC595. 

И уточнение: коль скоро регистр - совокупность ячеек памяти, значение, прочитанное из регистра, должно соответствовать значению, записанному в регистр. При этом не обязательно, чтобы регистр одновременнор поддерживал операции как чтение, так и записи. Чтение и запись может происходить "с разных сторон", как в том же 74HC595.

Цитата:

Порт это совокупность сущностей, обеспечивающаяя обмен информацией между МК и внешним миром.

Не с "МК и внешним миром", а "процессором и периферийным устройством". Последние, напомню, могут быть расположены и на одном кристалле, поэтому до "внешнего мира" дело может и не дойти.

Цитата:

В порт ввода-вывода входят в том числе несколько регистров, каждый из которых имеет свой собственный адрес. Таким образом порт это более широкое понятие.

Давайте сначала, опираясь на определения, сделаем выводы, и только потом на их основе будем формулировать заключение.

МК - частный случай ЭВМ (компьютера). Соответственно, к нему применимы все архитектурные особенности ЭВМ.

По классике ЭВМ состоит из:

1. Центрального процессора.

2. Оперативной памяти.

3. Периферийных устройств. При этом среди ПУ должно быть минимум одно устройство ввода и одно - вывода.

Процессор имеет ограниченное количество возможностей, в частности, он имеет функции чтения и записи. К памяти и периферийным устройствам он может обращаться единообразно - только по адресу.

Нас сейчас интересует только обмен между процессором и периферийными устройствами, который и осуществляется через порты (по определению порта). Отсюда свойства портов:

1. Назначение - обмен информацией между процессором и периферийным устройством.

2. Обязан иметь адрес.

3. Должен поддерживать функции чтения и/или записи. 

4. Не обязан запоминать информацию (т.е. считанная информация не обязана повторять записанную).

Отсюда и следует "танцевать".

Может ли порт содержать несколько регистров? - может, но при этом порт имеет единственный адрес, значит, в этом случае и все составляющие порт регистры должны быть доступны по одному адресу. Такое тоже бывает.

Является ли порт более широким понятием? Вряд ли: каждый имеет собственные свойства, которые мало пересекаются у порта и регистра (собственно, пересекаются только возможности операций чтения и записи, все остальное - отличается), поэтому как порт может либо быть, либо не быть регистром ("быть" - когда запоминает информацию и прочитанное равно записанному, "не быть" - в противном случае), так и регистр может либо быть, либо не быть портом ("быть" - когда имеет адрес и служит для связи с периферией, "не быть" - в противном случае).

Один из примеров: TIMx_SR - "регистр статуса" STM32 на самом деле регистром не является, т.к. не сохраняет записанную величину.

nik182
Offline
Зарегистрирован: 04.05.2015

Я работаю с МК уже более 20 лет. За это время понятие порт претерпело несколько изменений. В самом начале портом могли назвать единственную ногу МК. Потом это отошло в сторону и портом стали называть устройство позволяющее обменяться информацией с МК - если брать IO pins то это несколько регистров и схема их соединения с ногами МК размером 8 бит. Когда начал знакомиться с STM32 в одной из статей вычитал ( к сожалению не нашёл с ходу сейчас), что из за того, что IO port получил дальнейшее развитие, новые функции, то от слова порт оказались в пользу  входы-выходы общего назначения. 

Примеров всё так же Вы не приводите. Только Ваши соображения, основанные на Ваших представлениях об устройстве мира. Просто пройдите поиском по предлагаемому Reference manual STM32F411xC/E и сделайте вывод о том, в каком контексте используется слово port по отношению к микроконтроллеру. Внутри документа имеется блоксхема системной архитектуры МК с описанием взаимодействия отдельных блоков - ядра, памяти, периферии. При описании блок схемы слово порт не встречается.     

DeGlucker
Offline
Зарегистрирован: 23.07.2014

Простая программа для проверки портов. В режиме OUTPUT по команде "s" или пробел записывает "1" по очереди во все используемые биты портов B, C, D и читает сосьояние пинов.

1-я колонка - то, что записано, 2, 3, 4 - то что прочиталось.

В режиме AUTO биты выводятся через 50 иксек.

#define	Version	"Port test V 3.10"
#define byte uint8_t

const byte MaskB = 0x3F;
const byte MaskC = 0x3F;
const byte MaskD = 0xFC;

byte smpl = 0;
byte mode = 0;

void printcode(byte);

void setup() {

  Serial.begin(19200);
  DDRB |= MaskB;
  DDRC |= MaskC;
  DDRD |= MaskD;
  Serial.println(Version);
  Serial.println("  s - step");
  Serial.println("  i - input pullup");
  Serial.println("  o - output");
  Serial.println("  a - auto output");
}
// ----------------------------
void loop() {

  if (Serial.available() > 0) {
    char cmd = Serial.read();
    switch (cmd) {
      case 'o':
	mode = 0;
	smpl = 0;
        DDRB |= MaskB;
        DDRC |= MaskC;
        DDRD |= MaskD;
	Serial.println("OUTPUT");
	break;

      case 'a':
	mode = 1;
	Serial.println("OUTPUT_AUTO");
	break;

      case ' ':
      case 's':
	if (mode == 0) {
	  SetPorts();
	  printcode(smpl);
	  printcode(PINB&MaskB);
	  printcode(PINC&MaskC);
	  printcode(PIND&MaskD);
	  Serial.println("");
	}
	else if (mode == 2)
	  PrintInput();
	break;

      case 'i':
	mode = 2;
	DDRB |= MaskB;
	PORTB = MaskB;
	DDRB &= ~MaskB;
	DDRC |= MaskC;
	PORTC = MaskC;
	DDRC &= ~MaskC;
	DDRD |= MaskD;
	PORTD = MaskD;
	DDRD &= ~MaskD;
	Serial.print("INPUT_PULLUP");
	PrintInput();
	break;
    }
  }

  if (mode == 1)
    SetPorts();

  byte i = 199;         // 50 usec
  do { asm volatile("nop"); } while (i--);
}

// ----------------------------
void SetPorts() {

  smpl = smpl<<1;
  if (smpl == 0)
    smpl = 1;

  PORTB &= ~MaskB;
  PORTB |= (smpl & MaskB);
  PORTC &= ~MaskC;
  PORTC |= (smpl & MaskC);
  PORTD &= ~MaskD;
  PORTD |= (smpl & MaskD);
}
// ----------------------------
void printcode(byte code) {

  if (code < 0x10)
    Serial.print(" ");
  Serial.print(code, HEX);
  Serial.print(" ");
}

// ----------------------------
void PrintInput() {

  Serial.println("");
  printcode(MaskB);
  printcode(MaskC);
  printcode(MaskD);
  Serial.println("");
  printcode(PINB&MaskB);
  printcode(PINC&MaskC);
  printcode(PIND&MaskD);
  Serial.println("");
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nik182, Вы все пытаетесь увести разговор в какие-то частности. Ну при чем здесь stm32f411? Какое он имеет отношение к основным архитектурным принципам построения ЭВМ? Этим принципам уже более 70 лет, тогда как МК появились совсем недавно.

Вот смотрите: периферийное устройство может быть расположено на одном кристалле с центральным процессором, может быть на одной плате, а может быть - вообще в другом помещении. Неужели Вы считаете, что этот факт должен как-то сказываться на названии устройства, посредством которого центральный процессор обменивается информацией с периферийным устройством?

Вот скажите, как по-Вашему следует называть устройство, посредством которого центральный процессор, который умеет только читать и писать по выбранному адресу, общается с произвольным периферийным устройством? Как называется это устройство (возможно, логическое), которое имеет уникальный адрес и функции чтения и/или записи?

nik182
Offline
Зарегистрирован: 04.05.2015

Это Вы уводите в сторону. Вопрос вырос из Вашего замечания, понимает ли человек разницу между GPIO и портом. Как я вижу, у Вас есть собственное понимание слова порт. Оно ни как не коррелирует с практикой употребления слова порт в справочной литературе по микроконтроллерам. Все мои посты относились исключительно к МК. Никакой другой комнаты с периферией. Если быть совсем конкретным, то я не вижу разницы между названием porta, portb для АВР и GPIO для STM. Большее я обсуждать не хотел.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну не хотел, так не хотел.

Похоже, мы действительно говорили о совершенно разных вещах, ибо по моим представлениям porta и portb применительно к AVR так же соотносятся с термином port, как "милостивый государь" и "Государь Император".

nik182
Offline
Зарегистрирован: 04.05.2015

Но тема в общем интересная с методологической точки зрения. Предлагаю переместиться а отвлечённые. Надеюсь там можно будет и мнения других услышать. Только нужно как то сформулировать тему, что бы было понятно в чём корень вопроса. Я с ходу ни чего не придумал, что бы отразить мою и Вашу позицию одновременно.