Last modified by Max on 2025/03/02 15:18

From version 2.49
edited by Max
on 2025/02/25 15:17
Change comment: (Autosaved)
To version 2.38
edited by Max
on 2025/02/25 14:31
Change comment: (Autosaved)

Summary

Details

Page properties
Content
... ... @@ -579,24 +579,24 @@
579 579  == 022: Transfer the read block of non-volatile memory from the buffer to the bus ==
580 580  
581 581  (% class="wikigeneratedid" %)
582 -Command code 022, this command ensures that the non-volatile memory buffer is transferred to the DR register for reading.
582 +Код команды 022, данная команда обеспечивает передачу буфера энергонезависимой памяти в регистр DR для считывания.
583 583  
584 584  (% class="wikigeneratedid" %)
585 -Example program
585 +Пример программы
586 586  
587 587  {{code language="assembler"}}
588 -AZ$CSR = 177220; command and status register (CSR)
589 -AZ$DR = 177222; data register (DR)
588 +AZ$CSR = 177220; регистр команд и состояния (CSR)
589 +AZ$DR = 177222; регистр данных (DR)
590 590  
591 591  
592 -; trap 50 - reset AZ
592 +; trap 50 - cброс AZ
593 593  ; результат в R1 =0 ok
594 594  AZreset: MOV #AZ$CSR,R1
595 -1$: CLR (R1); Send the "Reset" command
596 - TSTB (R1); Check the controller readiness
597 - BPL 1$; If not ready, reset again
598 -; once and check again
599 - TST (R1); Check for an error,
595 +1$: CLR (R1); Пошлем команду "Сброс"
596 + TSTB (R1); Проверим готовность контроллера
597 + BPL 1$; Если не готов, сбрасываем еще
598 + ; раз и проверяем снова
599 + TST (R1); Проверим на ошибку,
600 600   BMI 0ERR$
601 601   CLR R1
602 602   return
... ... @@ -605,30 +605,30 @@
605 605   return
606 606  
607 607  
608 -; trap 54 - reading non-volatile memory of block 1 EEPROM to the buffer from the address ADREEPROMMEM
609 -; result R3 - address, if R3=0 error
610 -; read status in R1 0 - ok
611 -; 1 - size does not match saved
612 -; 2 - version error
613 -; 3 - checksum error
608 +; trap 54 - чтение энергонезависимой памяти блока 1 EEPROM в буфер с адреса ADREEPROMMEM
609 +; результат R3 - адрес, если R3=0 ошибка
610 +; статус чтения в R1 0 - ok
611 +; 1 - размер не соответствует сохраненному
612 +; 2 - oшибка версии
613 +; 3 - oшибка контрольной суммы
614 614  ReadEEPROM: push R2
615 - call AZreset; reset
615 + call AZreset; сбросим
616 616   tst R1
617 617   bne 0ERR$
618 618  ; теперь читаем
619 619   MOV #AZ$CSR,R1
620 - mov #21,(R1); read block 1 of non-volatile memory into buffer
621 -0$: TSTB (R1); check execution result
622 - BPL 0$; wait
623 - mov #22,(R1); send read block of non-volatile memory from buffer to bus
624 -1$: TSTB (R1); check execution result
625 - BPL 1$; wait
626 - TST (R1)+; increment
620 + mov #21,(R1); считать блок 1 энергонезависимой памяти в буфер
621 +0$: TSTB (R1); проверяем результат выполнения
622 + BPL 0$; ждем
623 + mov #22,(R1); отдать на шину считанный блок энергонезависимой памяти из буфера
624 +1$: TSTB (R1); проверяем результат выполнения
625 + BPL 1$; ждем
626 + TST (R1)+; инкрементируем
627 627   mov #ADREEPROMMEM,R3
628 - mov #256.,R2; read 256. words; first word is reading result
629 -2$: mov (R1),(R3)+; read block of words into memory
628 + mov #256.,R2; читаем 256. слов; первое слово - результат чтения
629 +2$: mov (R1),(R3)+; читаем блок слов в память
630 630   sob R2,2$
631 - mov #ADREEPROMMEM,R3; successful
631 + mov #ADREEPROMMEM,R3; успешно
632 632   mov (R3),R1
633 633   br 0END$
634 634  0ERR$: CLR R3
... ... @@ -636,39 +636,41 @@
636 636   return
637 637  {{/code}}
638 638  
639 -obviously, after reading the memory, it is necessary to check the result code in the first word - see the decoding of error codes
640 -\\Examples of returned data for commands
641 -\\sequentially issuing the command 021 and then 022 will allow reading 256 words from non-volatile memory
642 -Attention! The first word will be the reading success status
639 +очевидно, после считывания памяти необходимо проверить код результата в первом слове - см расшифровку кодов ошибок
640 +\\Примеры возвращаемых данных по командам
641 +\\последовательная подача команды 021 и затем 022 позволит считать 256. слов
642 +из энергонезависимой памяти
643 +**Внимание! **первое слово это будет статус успешности чтения
644 +
643 643  
644 644  * 0 - ok
645 -* 1 - size does not match saved
646 -* 2 - version error
647 -* 3 - checksum error
647 +* 1 - размер не соответствует сохраненному
648 +* 2 - oшибка версии
649 +* 3 - oшибка контрольной суммы
648 648  
649 -== 023: Receive data from the bus into the buffer for subsequent writing into the buffer ==
651 +== **023: Принять с шины в буфер данные для последующей записи в буфер** ==
650 650  
651 -Command code 023, this command allows you to fill the non-volatile memory buffer
653 +Код команды 023, данная команда позволяет наполнить буфер энергонезависимой памяти
652 652  
653 -== 024: Write from buffer to non-volatile memory block ==
655 +== **024: Записать из буфера в блок энергонезависимой памяти** ==
654 654  
655 -Command code 024, this command causes a non-volatile memory block to be written from the non-volatile memory buffer.
657 +Код команды 024, данная команда вызывает запись блока энергонезависимой памяти из буфера энергонезависимой памяти.
656 656  
657 -Example program
659 +Пример программы
658 658  
659 659  {{code language="assembler"}}
660 -AZ$CSR = 177220; Command and Status Register (CSR)
661 -AZ$DR = 177222; Data Register (DR)
662 +AZ$CSR = 177220; регистр команд и состояния (CSR)
663 +AZ$DR = 177222; регистр данных (DR)
662 662  
663 663  
664 -; trap 50 - reset AZ
666 +; trap 50 - cброс AZ
665 665  ; результат в R1 =0 ok
666 666  AZreset: MOV #AZ$CSR,R1
667 -1$: CLR (R1); Send the "Reset" command
668 - TSTB (R1); Check the controller readiness
669 - BPL 1$; If not ready, reset again
670 -; once and check again
671 - TST (R1); Check for an error,
669 +1$: CLR (R1); Пошлем команду "Сброс"
670 + TSTB (R1); Проверим готовность контроллера
671 + BPL 1$; Если не готов, сбрасываем еще
672 + ; раз и проверяем снова
673 + TST (R1); Проверим на ошибку,
672 672   BMI 0ERR$
673 673   CLR R1
674 674   return
... ... @@ -676,27 +676,27 @@
676 676   COM R1
677 677   return
678 678  
679 -; trap 55 - write non-volatile memory from the buffer at address ADREEPROMMEM в блок 1 EEPROM
681 +; trap 55 - запись энергонезависимой памяти из буфера с адреса ADREEPROMMEM в блок 1 EEPROM
680 680  WriteEEPROM: push R1
681 681   push R2
682 682   push R3
683 - call AZreset; reset
685 + call AZreset; сбросим
684 684   tst R1
685 685   bne 0ERR$
686 686  
687 687   MOV #AZ$CSR,R1
688 - mov #23,(R1);command that we will write data to the buffer
689 -0$: TSTB (R1); check the result of executio
690 - BPL 0$; wait
691 - TST (R1)+; increment
690 + mov #23,(R1); командуем что будем писать данные в буфер
691 +0$: TSTB (R1); проверяем результат выполнения
692 + BPL 0$; ждем
693 + TST (R1)+; инкрементируем
692 692   mov #ADREEPROMMEM+2,R3
693 - mov #255.,R2; write 255. words; skip the first word - the result of reading
694 -1$: mov (R3)+,(R1); send to the controller
695 + mov #255.,R2; пишем 255. слов; первое слово пропускаем - результат чтения
696 +1$: mov (R3)+,(R1); отдаем в контроллер
695 695   sob R2,1$
696 - tst -(R1); decrement
697 - mov #24,(R1); write from the buffer to block 1 of non-volatile memory
698 -2$: TSTB (R1); check the result of execution
699 - BPL 2$; we are waiting
698 + tst -(R1); декрементируем
699 + mov #24,(R1); записать из буфера в блок 1 энергонезависимой памяти
700 +2$: TSTB (R1); проверяем результат выполнения
701 + BPL 2$; ждем
700 700   br 0END$
701 701  0ERR$: CLR R3
702 702  0END$: pop R3
... ... @@ -705,21 +705,23 @@
705 705   return
706 706  {{/code}}
707 707  
708 -**Please note** that when recording, the buffer immediately comes with the data, i.e. there is no first word with the statu
710 +**Обращаю внимание**, при записи, буфер идет сразу с данными, те нет первого слова со статусом.
709 709  
710 710  
711 711  
712 -= Block of commands for working with RTC and NTP =
714 += Блок команд для работы с RTC и NTP =
713 713  
714 -The AZ® controller has 2 sources of date-time, the first is the RTC built into the STM32, the second is the clock in the TCP/IP stack. The RTC clock works autonomously with a 2032 battery installed. The clock in the TCP/IP stack is set based on data from the NTP server.
716 +В контроллере AZ®  есть 2 источника получения даты-времени, первый это RTC встроенный в STM32, второй это часы в стеке TCP/IP.  Часы RTC работают автономно при наличии установленной батарейки 2032. Часы в стеке TCP/IP устанавливаются на основании данных с NTP-сервера.
715 715  
716 716  
717 -== Buffer format timestamp (readable) ==
719 +== Формат буфера timestamp (доступен по чтению) ==
718 718  
719 -The controller API immediately prepares time in several formats, so that it can be conveniently used on the PDP-11 side
721 +API контроллера сразу готовит время в нескольких форматах, дабы его было удобно применить на стороне PDP-11
720 720  
721 721  {{info}}
722 -datetime buffer format octal offset - those words datetime buffer format
724 +формат буфера даты-времени
725 +offset в восьмеричной системе - те слова
726 +формат буфера даты-времени
723 723  \\[0]=rtc_rt11date();
724 724  [2]=rt11 time 50Hz big word;
725 725  [4]=rt11 time 50Hz little word;
... ... @@ -737,72 +737,72 @@
737 737  {{/info}}
738 738  
739 739  
740 -== SimpleIN buffer format (when writing) ==
744 +== Формат буфера SimpleIN (при записи) ==
741 741  
742 -the format is simplified as much as possible, for work with PDP-11
746 +формат максимально упрощен, для работы со стороны PDP-11
743 743  
744 744  {{info}}
745 -offset in octal - those words
749 +offset в восьмеричной системе - те слова
746 746  
747 -[0]=year, the lower two digits are 22 and not 2022(!)
748 -[2]=month; month
749 -[4]=day; day
750 -[6]=wday; day of the week =0 not set, 1 - Monday 2 - Tuesday etc.
751 -[10]=hour; hour
752 -[12]=min; minute
753 -[14]=sec; second
751 +[0]=year       год, младшие две цифры - те 22 а не 2022(!)
752 +[2]=month;     месяц
753 +[4]=day;       день
754 +[6]=wday;      день недели =0 не установлен, 1- понедельник 2 - вторник итд
755 +[10]=hour;     час
756 +[12]=min;      минута
757 +[14]=sec;      секунда
754 754  {{/info}}
755 755  
756 756  
757 -== 031: Get time from RTC to timestamp buffer ==
761 +== **031:  Получить время из RTC в буфер timestamp** ==
758 758  
759 -Command code 031, this command uses RTC clock as a source of filling the timestamp buffer
763 +Код команды 031, данная команда использует RTC часы как источник заполнения буфера timestamp
760 760  
761 -Example program:
765 +Пример программы:
762 762  
763 763  {{code language="assembler"}}
764 -; trap 61 - reading clock data from autonomous RTC clock
765 -; R3 - buffer address where to read
766 -; result in R3 address if successful. R3=0 if error
768 +; trap 61 - чтение данных часов из автономных часов RTC
769 +; R3 - адрес буфера куда надо считать
770 +; результат в R3 адрес, если успешно. R3=0 если ошибка
767 767  GetDateFromRTC: push R0
768 768   push R1
769 769   push R2
770 - call AZreset; reset
774 + call AZreset; сбросим
771 771   tst R1
772 772   bne G60ERR
773 773   MOV #AZ$CSR,R1
774 774   mov #31,(R1)
775 - br G60; let's go there because further code is the same
779 + br G60; идем туда тк дальше код одинаковый
776 776  {{/code}}
777 777  
778 -== 032: Get time from timestamp buffer ==
782 +== **032:  Получить время из буфера timestamp** ==
779 779  
780 -Command code 032, this command sends the contents of the timestamp buffer to the bus
784 +Код команды 032, данная команда отдает на шину содержимое буфера timestamp
781 781  
782 782  {{code language="assembler"}}
783 -; working with clock
784 -; trap 60 - reading clock data from TCP/IP stack
785 -; R3 - buffer address where to read
786 -; result in R3 address if successful. R3=0 if error
787 +; работа с часами
788 +; trap 60 - чтение данных часов из TCP/IP стека
789 +; R3 - адрес буфера куда надо считать
790 +; результат в R3 адрес, если успешно. R3=0 если ошибка
787 787  GetDateFromLAN: push R0
788 788   push R1
789 789   push R2
790 - call AZreset; reset
794 + call AZreset; сбросим
791 791   tst R1
792 792   bne G60ERR
793 793   MOV #AZ$CSR,R1
794 794   mov #42,(R1)
795 -G60: TSTB (R1); check execution result
796 - BPL G60; wait
799 +G60: TSTB (R1); проверяем результат выполнения
800 + BPL G60; ждем
797 797   mov #32,(R1)
798 -1$: TSTB (R1); check execution result
802 +1$: TSTB (R1); проверяем результат выполнения
799 799   BPL 1$; ждем
800 - TST (R1)+; increment
801 - mov R3,R0; remember R3 address
802 - mov #10.,R2; read 10 words
803 -2$: mov (R1),(R3)+; read block of words into memory
804 + TST (R1)+; инкрементируем
805 + mov R3,R0; запомним R3 - адрес
806 + mov #10.,R2; читаем 10 слов
807 +2$: mov (R1),(R3)+; читаем блок слов в память
804 804   sob R2,2$
805 - mov R0,R3; successful, return address to R3
809 + mov R0,R3; успешно, вернем адрес в R3
806 806   br 0END$
807 807  G60ERR: CLR R3
808 808  0END$: pop R2
... ... @@ -811,11 +811,11 @@
811 811   return
812 812  {{/code}}
813 813  
814 -It is worth checking the correctness of the received time:
818 +Стоит проверить корректность полученного времени:
815 815  
816 816  {{code language="assembler"}}
817 -; trap 63 - check time correctness
818 -; R3 - buffer address, result in R3, if buffer address then OK, =0 error
821 +; trap 63 - проверка корректности времени
822 +; R3 - адрес буфера, результат в R3, если адрес буфера то OK, =0 ошибка
819 819  CheckDateTime: Cmp 6(r3),#2021.
820 820   Blos 1err
821 821   Cmp 6(r3),#2100.
... ... @@ -825,41 +825,41 @@
825 825   return
826 826  {{/code}}
827 827  
828 -== 033: Write time-date to SimpleIN buffer ==
832 +== **033:  Запись времени-даты в буфер SimpleIN** ==
829 829  
830 -Command code 033, this command receives data from the bus into the SimpleIN buffer
834 +Код команды 033, данная команда  принимает с шины данные в буфер SimpleIN
831 831  
832 -The operation of this command is similar to the operation of commands 023 and 016.
836 +Работа данной команды аналогична работе команд [[023>>doc:||anchor="H023:41F44043843D44F44244C44144843843D44B43243144344443544043443043D43D44B43543443B44F43F43E44143B43543444344E44943543943743043F438441438432431443444435440"]] и [[016>>doc:||anchor="H016:A041F44043843D44F44244C43143B43E43A43443043D43D44B445432431443444435440"]].
833 833  
834 -== 034: Set RTC based on buffer data ==
838 +== **034:  Установка RTC на основании данных из буфера** ==
835 835  
836 -Command code 034, this command sets the RTC based on the data in the SimpleIN buffer
840 +Код команды 034, данная команда  устанавливает RTC на основании данных в буфере SimpleIN
837 837  
838 -This command executes quickly, but to avoid problems, a wait loop is recommended.
842 +Данная команда выполняется быстро, но для исключения проблем цикл ожидания выполнения рекомендуется.
839 839  
840 -== 035: Stimulate time request from NTP server, set based on response ==
844 +== **035:  Стимуляция запроса времени с NTP сервера, установка на основании ответа** ==
841 841  
842 -Command code 035, this command sends a request to the NTP server (set in the AZ.INI file or received from DHCP) and sets the clock in the TCP/IP stack.
846 +Код команды 035, данная команда отправляет запрос на NTP cервер (установленный в AZ.INI файле или полученный от DHCP) и устанавливает часы в стеке TCP/IP.
843 843  
844 -Example program: sending a request to set the time from an NTP server
848 +Пример программы: отсылка запроса на установку времени с NTP сервера
845 845  
846 846  {{code language="assembler"}}
847 -; trap 62 - sending a request to set the time from the NTP server
851 +; trap 62 - отсылка запроса на установку времени с NTP сервера
848 848  GetDateNTPtoNET:push R1
849 - call AZreset; reset
853 + call AZreset; сбросим
850 850   tst R1
851 851   bne 0ERR$
852 852   MOV #AZ$CSR,R1
853 853   mov #35,(R1)
854 -0$: TSTB (R1); check the result of execution
855 - BPL 0$; wait
858 +0$: TSTB (R1); проверяем результат выполнения
859 + BPL 0$; ждем
856 856  0ERR$: pop R1
857 857   return
858 858  {{/code}}
859 859  
860 -The command execution takes 1-2 seconds on average. This command requires the TCP/IP stack to work, so waiting cycles are needed when the stack is enabled.
864 +Выполнение команды занимает 1-2 секунды в среднем. Данная команда требует работы стека TCP/IP, соответственно нужны циклы ожидания при включенном стеке.
861 861  
862 -An example of a polling cycle to get time from the network
866 +Пример цикла опроса с целью получить время с сети
863 863  
864 864  {{code language="assembler"}}
865 865  ; дата-время