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

From version 2.44
edited by Max
on 2025/02/25 15:02
Change comment: (Autosaved)
To version 2.50
edited by Max
on 2025/02/25 15:21
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -657,18 +657,18 @@
657 657  Example program
658 658  
659 659  {{code language="assembler"}}
660 -AZ$CSR = 177220; регистр команд и состояния (CSR)
661 -AZ$DR = 177222; регистр данных (DR)
660 +AZ$CSR = 177220; Command and Status Register (CSR)
661 +AZ$DR = 177222; Data Register (DR)
662 662  
663 663  
664 -; trap 50 - cброс AZ
664 +; trap 50 - reset AZ
665 665  ; результат в R1 =0 ok
666 666  AZreset: MOV #AZ$CSR,R1
667 -1$: CLR (R1); Пошлем команду "Сброс"
668 - TSTB (R1); Проверим готовность контроллера
669 - BPL 1$; Если не готов, сбрасываем еще
670 - ; раз и проверяем снова
671 - TST (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,
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 - запись энергонезависимой памяти из буфера с адреса ADREEPROMMEM в блок 1 EEPROM
679 +; trap 55 - write non-volatile memory from the buffer at address ADREEPROMMEM в блок 1 EEPROM
680 680  WriteEEPROM: push R1
681 681   push R2
682 682   push R3
683 - call AZreset; сбросим
683 + call AZreset; reset
684 684   tst R1
685 685   bne 0ERR$
686 686  
687 687   MOV #AZ$CSR,R1
688 - mov #23,(R1); командуем что будем писать данные в буфер
689 -0$: TSTB (R1); проверяем результат выполнения
690 - BPL 0$; ждем
691 - TST (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
692 692   mov #ADREEPROMMEM+2,R3
693 - mov #255.,R2; пишем 255. слов; первое слово пропускаем - результат чтения
694 -1$: mov (R3)+,(R1); отдаем в контроллер
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 695   sob R2,1$
696 - tst -(R1); декрементируем
697 - mov #24,(R1); записать из буфера в блок 1 энергонезависимой памяти
698 -2$: TSTB (R1); проверяем результат выполнения
699 - BPL 2$; ждем
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
700 700   br 0END$
701 701  0ERR$: CLR R3
702 702  0END$: pop R3
... ... @@ -705,23 +705,21 @@
705 705   return
706 706  {{/code}}
707 707  
708 -**Обращаю внимание**, при записи, буфер идет сразу с данными, те нет первого слова со статусом.
708 +**Please note** that when recording, the buffer immediately comes with the data, i.e. there is no first word with the statu
709 709  
710 710  
711 711  
712 -= Блок команд для работы с RTC и NTP =
712 += Block of commands for working with RTC and NTP =
713 713  
714 -В контроллере AZ®  есть 2 источника получения даты-времени, первый это RTC встроенный в STM32, второй это часы в стеке TCP/IP.  Часы RTC работают автономно при наличии установленной батарейки 2032. Часы в стеке TCP/IP устанавливаются на основании данных с NTP-сервера.
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.
715 715  
716 716  
717 -== Формат буфера timestamp (доступен по чтению) ==
717 +== Buffer format timestamp (readable) ==
718 718  
719 -API контроллера сразу готовит время в нескольких форматах, дабы его было удобно применить на стороне PDP-11
719 +The controller API immediately prepares time in several formats, so that it can be conveniently used on the PDP-11 side
720 720  
721 721  {{info}}
722 -формат буфера даты-времени
723 -offset в восьмеричной системе - те слова
724 -формат буфера даты-времени
722 +datetime buffer format octal offset - those words datetime buffer format
725 725  \\[0]=rtc_rt11date();
726 726  [2]=rt11 time 50Hz big word;
727 727  [4]=rt11 time 50Hz little word;
... ... @@ -739,72 +739,72 @@
739 739  {{/info}}
740 740  
741 741  
742 -== Формат буфера SimpleIN (при записи) ==
740 +== SimpleIN buffer format (when writing) ==
743 743  
744 -формат максимально упрощен, для работы со стороны PDP-11
742 +the format is simplified as much as possible, for work with PDP-11
745 745  
746 746  {{info}}
747 -offset в восьмеричной системе - те слова
745 +offset in octal - those words
748 748  
749 -[0]=year       год, младшие две цифры - те 22 а не 2022(!)
750 -[2]=month;     месяц
751 -[4]=day;       день
752 -[6]=wday;      день недели =0 не установлен, 1- понедельник 2 - вторник итд
753 -[10]=hour;     час
754 -[12]=min;      минута
755 -[14]=sec;      секунда
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
756 756  {{/info}}
757 757  
758 758  
759 -== **031:  Получить время из RTC в буфер timestamp** ==
757 +== 031: Get time from RTC to timestamp buffer ==
760 760  
761 -Код команды 031, данная команда использует RTC часы как источник заполнения буфера timestamp
759 +Command code 031, this command uses RTC clock as a source of filling the timestamp buffer
762 762  
763 -Пример программы:
761 +Example program:
764 764  
765 765  {{code language="assembler"}}
766 -; trap 61 - чтение данных часов из автономных часов RTC
767 -; R3 - адрес буфера куда надо считать
768 -; результат в R3 адрес, если успешно. R3=0 если ошибка
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
769 769  GetDateFromRTC: push R0
770 770   push R1
771 771   push R2
772 - call AZreset; сбросим
770 + call AZreset; reset
773 773   tst R1
774 774   bne G60ERR
775 775   MOV #AZ$CSR,R1
776 776   mov #31,(R1)
777 - br G60; идем туда тк дальше код одинаковый
775 + br G60; let's go there because further code is the same
778 778  {{/code}}
779 779  
780 -== **032:  Получить время из буфера timestamp** ==
778 +== 032: Get time from timestamp buffer ==
781 781  
782 -Код команды 032, данная команда отдает на шину содержимое буфера timestamp
780 +Command code 032, this command sends the contents of the timestamp buffer to the bus
783 783  
784 784  {{code language="assembler"}}
785 -; работа с часами
786 -; trap 60 - чтение данных часов из TCP/IP стека
787 -; R3 - адрес буфера куда надо считать
788 -; результат в R3 адрес, если успешно. R3=0 если ошибка
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
789 789  GetDateFromLAN: push R0
790 790   push R1
791 791   push R2
792 - call AZreset; сбросим
790 + call AZreset; reset
793 793   tst R1
794 794   bne G60ERR
795 795   MOV #AZ$CSR,R1
796 796   mov #42,(R1)
797 -G60: TSTB (R1); проверяем результат выполнения
798 - BPL G60; ждем
795 +G60: TSTB (R1); check execution result
796 + BPL G60; wait
799 799   mov #32,(R1)
800 -1$: TSTB (R1); проверяем результат выполнения
798 +1$: TSTB (R1); check execution result
801 801   BPL 1$; ждем
802 - TST (R1)+; инкрементируем
803 - mov R3,R0; запомним R3 - адрес
804 - mov #10.,R2; читаем 10 слов
805 -2$: mov (R1),(R3)+; читаем блок слов в память
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
806 806   sob R2,2$
807 - mov R0,R3; успешно, вернем адрес в R3
805 + mov R0,R3; successful, return address to R3
808 808   br 0END$
809 809  G60ERR: CLR R3
810 810  0END$: pop R2
... ... @@ -813,11 +813,11 @@
813 813   return
814 814  {{/code}}
815 815  
816 -Стоит проверить корректность полученного времени:
814 +It is worth checking the correctness of the received time:
817 817  
818 818  {{code language="assembler"}}
819 -; trap 63 - проверка корректности времени
820 -; R3 - адрес буфера, результат в R3, если адрес буфера то OK, =0 ошибка
817 +; trap 63 - check time correctness
818 +; R3 - buffer address, result in R3, if buffer address then OK, =0 error
821 821  CheckDateTime: Cmp 6(r3),#2021.
822 822   Blos 1err
823 823   Cmp 6(r3),#2100.
... ... @@ -827,94 +827,94 @@
827 827   return
828 828  {{/code}}
829 829  
830 -== **033:  Запись времени-даты в буфер SimpleIN** ==
828 +== 033: Write time-date to SimpleIN buffer ==
831 831  
832 -Код команды 033, данная команда  принимает с шины данные в буфер SimpleIN
830 +Command code 033, this command receives data from the bus into the SimpleIN buffer
833 833  
834 -Работа данной команды аналогична работе команд [[023>>doc:||anchor="H023:41F44043843D44F44244C44144843843D44B43243144344443544043443043D43D44B43543443B44F43F43E44143B43543444344E44943543943743043F438441438432431443444435440"]] и [[016>>doc:||anchor="H016:A041F44043843D44F44244C43143B43E43A43443043D43D44B445432431443444435440"]].
832 +The operation of this command is similar to the operation of commands 023 and 016.
835 835  
836 -== **034:  Установка RTC на основании данных из буфера** ==
834 +== 034: Set RTC based on buffer data ==
837 837  
838 -Код команды 034, данная команда  устанавливает RTC на основании данных в буфере SimpleIN
836 +Command code 034, this command sets the RTC based on the data in the SimpleIN buffer
839 839  
840 -Данная команда выполняется быстро, но для исключения проблем цикл ожидания выполнения рекомендуется.
838 +This command executes quickly, but to avoid problems, a wait loop is recommended.
841 841  
842 -== **035:  Стимуляция запроса времени с NTP сервера, установка на основании ответа** ==
840 +== 035: Stimulate time request from NTP server, set based on response ==
843 843  
844 -Код команды 035, данная команда отправляет запрос на NTP cервер (установленный в AZ.INI файле или полученный от DHCP) и устанавливает часы в стеке TCP/IP.
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.
845 845  
846 -Пример программы: отсылка запроса на установку времени с NTP сервера
844 +Example program: sending a request to set the time from an NTP server
847 847  
848 848  {{code language="assembler"}}
849 -; trap 62 - отсылка запроса на установку времени с NTP сервера
847 +; trap 62 - sending a request to set the time from the NTP server
850 850  GetDateNTPtoNET:push R1
851 - call AZreset; сбросим
849 + call AZreset; reset
852 852   tst R1
853 853   bne 0ERR$
854 854   MOV #AZ$CSR,R1
855 855   mov #35,(R1)
856 -0$: TSTB (R1); проверяем результат выполнения
857 - BPL 0$; ждем
854 +0$: TSTB (R1); check the result of execution
855 + BPL 0$; wait
858 858  0ERR$: pop R1
859 859   return
860 860  {{/code}}
861 861  
862 -Выполнение команды занимает 1-2 секунды в среднем. Данная команда требует работы стека TCP/IP, соответственно нужны циклы ожидания при включенном стеке.
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.
863 863  
864 -Пример цикла опроса с целью получить время с сети
862 +An example of a polling cycle to get time from the network
865 865  
866 866  {{code language="assembler"}}
867 -; дата-время
865 +; date-time
868 868   mov #S_DateTime_0,R3; "Lan Date:"
869 869   trap 10
870 - mov #20,R4; количество циклов ожидания
871 -$datry: trap 62; отослали запрос к NTP серверу
872 - mov #110,@#AZ$CSR; включим сеть
873 - trap 47; ожидание
874 - trap 47; ожидание
868 + mov #20,R4; number of wait cycles
869 +$datry: trap 62; sent a request to the NTP server
870 + mov #110,@#AZ$CSR; enable the network
871 + trap 47; waiting
872 + trap 47; waiting
875 875   mov #ADRTMPSTR,R3
876 - trap 60; считали в буфер дату-время
877 - trap 63; проверили дату-время
874 + trap 60; read the date-time into the buffer
875 + trap 63; checked the date-time
878 878   tst R3
879 879   bne $ok
880 880  $sob: sob R4,$datry
881 - mov #S_DateTime_2,R3; печать ошибки
879 + mov #S_DateTime_2,R3; print error
882 882   trap 7
883 883   br $go
884 884  
885 885  $ok: mov #ADRTMPSTR,R3
886 - trap 24; печать даты
887 - trap 25; времени
888 -$go: mov #110,@#AZ$CSR; включим сеть
884 + trap 24; print date
885 + trap 25; time
886 +$go: mov #110,@#AZ$CSR; let's turn on the network
889 889  {{/code}}
890 890  
891 -Тут мы явно отсылаем запрос к NTP серверу, затем включаем работу сети и ждем результата, периодически опрашивая и проверяя корректность результата.
889 +Here we explicitly send a request to the NTP server, then turn on the network and wait for the result, periodically polling and checking the correctness of the result.
892 892  
893 -== **036:  Установка RTC на основании часов TCP/IP стека** ==
891 +== 036: Setting RTC based on TCP/IP stack clock ==
894 894  
895 -Код команды 036,  данная команда устанавливает RTC на основании часов в TCP/IP стека. Предварительно надо установить часы в TCP/IP - команда 036.
893 +Command code 036, this command sets the RTC based on the clock in the TCP/IP stack. You must first set the clock in TCP/IP - command 036.
896 896  
897 -Пример программы:
895 +Example program:
898 898  
899 899  {{code language="assembler"}}
900 -; trap 64 - установка времени RTC на основании времени стека
901 -; R1 - результат R1=0 - OK
902 -SetDateNETtoRTC:call AZreset; сбросим
898 +; trap 64 - set RTC time based on stack time
899 +; R1 - result R1=0 - OK
900 +SetDateNETtoRTC:call AZreset; reset
903 903   tst R1
904 904   bne 0ERR$
905 905   MOV #AZ$CSR,R1
906 906   mov #36,(R1)
907 -0$: TSTB (R1); проверяем результат выполнения
908 - BPL 0$; ждем
905 +0$: TSTB (R1); check execution result
906 + BPL 0$; wait
909 909   clr R1
910 910  0ERR$: return
911 911  {{/code}}
912 912  
913 -== **042:  Получить время из часов TCP/IP стека в буфер timestamp** ==
911 +== 042: Get time from TCP/IP stack clock into timestamp buffer ==
914 914  
915 -Код команды 042,   данная команда использует часы TCP/IP стека как источник заполнения буфера timestamp.
913 +Command code 042, this command uses the TCP/IP stack clock as a source for filling the timestamp buffer.
916 916  
917 -Пример программы:
915 +Example program:
918 918  
919 919  {{code language="assembler"}}
920 920  ; работа с часами