Changes for page API контроллеров AZ®
Last modified by Max on 2025/03/02 15:18
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -657,18 +657,18 @@ 657 657 Example program 658 658 659 659 {{code language="assembler"}} 660 -AZ$CSR = 177220; CommandandStatusRegister(CSR)661 -AZ$DR = 177222; DataRegister(DR)660 +AZ$CSR = 177220; регистр команд и состояния (CSR) 661 +AZ$DR = 177222; регистр данных (DR) 662 662 663 663 664 -; trap 50 - resetAZ664 +; trap 50 - cброс AZ 665 665 ; результат в R1 =0 ok 666 666 AZreset: MOV #AZ$CSR,R1 667 -1$: CLR (R1); Sendthe"Reset"command668 - TSTB (R1); Checkthecontroller readiness669 - BPL 1$; Ifnotready,resetagain670 -; onceandcheckagain671 - TST (R1); Checkforan error,667 +1$: CLR (R1); Пошлем команду "Сброс" 668 + TSTB (R1); Проверим готовность контроллера 669 + BPL 1$; Если не готов, сбрасываем еще 670 + ; раз и проверяем снова 671 + 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 - writenon-volatilememoryfromthebufferataddressADREEPROMMEM в блок 1 EEPROM679 +; trap 55 - запись энергонезависимой памяти из буфера с адреса ADREEPROMMEM в блок 1 EEPROM 680 680 WriteEEPROM: push R1 681 681 push R2 682 682 push R3 683 - call AZreset; reset683 + call AZreset; сбросим 684 684 tst R1 685 685 bne 0ERR$ 686 686 687 687 MOV #AZ$CSR,R1 688 - mov #23,(R1); commandthatwewillwritedatatothe buffer689 -0$: TSTB (R1); checktheresult of executio690 - BPL 0$; wait691 - TST (R1)+; increment688 + mov #23,(R1); командуем что будем писать данные в буфер 689 +0$: TSTB (R1); проверяем результат выполнения 690 + BPL 0$; ждем 691 + TST (R1)+; инкрементируем 692 692 mov #ADREEPROMMEM+2,R3 693 - mov #255.,R2; write255.words;skipthefirstword-theresult of reading694 -1$: mov (R3)+,(R1); sendtothe controller693 + mov #255.,R2; пишем 255. слов; первое слово пропускаем - результат чтения 694 +1$: mov (R3)+,(R1); отдаем в контроллер 695 695 sob R2,1$ 696 - tst -(R1); decrement697 - mov #24,(R1); writefromthebuffertoblock1ofnon-volatile memory698 -2$: TSTB (R1); checktheresult of execution699 - BPL 2$; we are waiting696 + tst -(R1); декрементируем 697 + mov #24,(R1); записать из буфера в блок 1 энергонезависимой памяти 698 +2$: TSTB (R1); проверяем результат выполнения 699 + 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 -** Pleasenote**thatwhen recording,thebufferimmediatelycomeswith the data,i.e.thereisnofirstword with the statu708 +**Обращаю внимание**, при записи, буфер идет сразу с данными, те нет первого слова со статусом. 709 709 710 710 711 711 712 -= BlockofcommandsforworkingwithRTCandNTP =712 += Блок команд для работы с RTC и NTP = 713 713 714 - TheAZ®controllerhas2sourcesofdate-time,thefirstis theRTCbuiltintotheSTM32,thesecondistheclockin theTCP/IPstack.TheRTCclockworksautonomouslywitha2032battery installed.TheclockintheTCP/IPstackissetbasedondata from theNTPserver.714 +В контроллере AZ® есть 2 источника получения даты-времени, первый это RTC встроенный в STM32, второй это часы в стеке TCP/IP. Часы RTC работают автономно при наличии установленной батарейки 2032. Часы в стеке TCP/IP устанавливаются на основании данных с NTP-сервера. 715 715 716 716 717 -== Bufferformattimestamp (readable) ==717 +== Формат буфера timestamp (доступен по чтению) == 718 718 719 - The controllerAPIimmediatelypreparestimeinseveralformats,sothatitcanbeconvenientlyusedon thePDP-11side719 +API контроллера сразу готовит время в нескольких форматах, дабы его было удобно применить на стороне PDP-11 720 720 721 721 {{info}} 722 -datetime buffer format octal offset - those words datetime buffer format 722 +формат буфера даты-времени 723 +offset в восьмеричной системе - те слова 724 +формат буфера даты-времени 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(whenwriting) ==742 +== Формат буфера SimpleIN (при записи) == 741 741 742 - theformatis simplified as much as possible,forworkwithPDP-11744 +формат максимально упрощен, для работы со стороны PDP-11 743 743 744 744 {{info}} 745 -offset inoctal-thosewords747 +offset в восьмеричной системе - те слова 746 746 747 -[0]=year, thelowertwodigitsare22andnot2022(!)748 -[2]=month; month749 -[4]=day; day750 -[6]=wday; dayof the week=0notset, 1Monday2 -Tuesdayetc.751 -[10]=hour; hour752 -[12]=min; minute753 -[14]=sec; second749 +[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; секунда 754 754 {{/info}} 755 755 756 756 757 -== 031: GettimefromRTCtotimestampbuffer==759 +== **031: Получить время из RTC в буфер timestamp** == 758 758 759 - Commandcode031,thiscommandusesRTCclockasasourceof fillingthe timestampbuffer761 +Код команды 031, данная команда использует RTC часы как источник заполнения буфера timestamp 760 760 761 - Exampleprogram:763 +Пример программы: 762 762 763 763 {{code language="assembler"}} 764 -; trap 61 - readingclockdatafromautonomousRTCclock765 -; R3 - bufferaddresswheretoread766 -; resultinR3addressifsuccessful. R3=0iferror766 +; trap 61 - чтение данных часов из автономных часов RTC 767 +; R3 - адрес буфера куда надо считать 768 +; результат в R3 адрес, если успешно. R3=0 если ошибка 767 767 GetDateFromRTC: push R0 768 768 push R1 769 769 push R2 770 - call AZreset; reset772 + 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'sgotherebecausefurthercode is the same777 + br G60; идем туда тк дальше код одинаковый 776 776 {{/code}} 777 777 778 -== 032: Gettimefromtimestampbuffer==780 +== **032: Получить время из буфера timestamp** == 779 779 780 - Commandcode032,thiscommandsendsthecontentsofthe timestampbuffer to the bus782 +Код команды 032, данная команда отдает на шину содержимое буфера timestamp 781 781 782 782 {{code language="assembler"}} 783 -; workingwithclock784 -; trap 60 - readingclockdatafromTCP/IPstack785 -; R3 - bufferaddresswheretoread786 -; resultinR3addressifsuccessful. R3=0iferror785 +; работа с часами 786 +; trap 60 - чтение данных часов из TCP/IP стека 787 +; R3 - адрес буфера куда надо считать 788 +; результат в R3 адрес, если успешно. R3=0 если ошибка 787 787 GetDateFromLAN: push R0 788 788 push R1 789 789 push R2 790 - call AZreset; reset792 + 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); checkexecutionresult796 - BPL G60; wait797 +G60: TSTB (R1); проверяем результат выполнения 798 + BPL G60; ждем 797 797 mov #32,(R1) 798 -1$: TSTB (R1); checkexecutionresult800 +1$: TSTB (R1); проверяем результат выполнения 799 799 BPL 1$; ждем 800 - TST (R1)+; increment801 - mov R3,R0; rememberR3address802 - mov #10.,R2; read10words803 -2$: mov (R1),(R3)+; readblockofwordsinto memory802 + TST (R1)+; инкрементируем 803 + mov R3,R0; запомним R3 - адрес 804 + mov #10.,R2; читаем 10 слов 805 +2$: mov (R1),(R3)+; читаем блок слов в память 804 804 sob R2,2$ 805 - mov R0,R3; successful,returnaddresstoR3807 + 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 - Itisworthcheckingthe correctness of the received time:816 +Стоит проверить корректность полученного времени: 815 815 816 816 {{code language="assembler"}} 817 -; trap 63 - checktimecorrectness818 -; R3 - bufferaddress,resultinR3,ifbufferaddressthenOK, =0error819 +; trap 63 - проверка корректности времени 820 +; R3 - адрес буфера, результат в R3, если адрес буфера то OK, =0 ошибка 819 819 CheckDateTime: Cmp 6(r3),#2021. 820 820 Blos 1err 821 821 Cmp 6(r3),#2100. ... ... @@ -825,94 +825,94 @@ 825 825 return 826 826 {{/code}} 827 827 828 -== 033: Writetime-datetoSimpleINbuffer==830 +== **033: Запись времени-даты в буфер SimpleIN** == 829 829 830 - Commandcode033,thiscommandreceivesdatafromthebusinto theSimpleINbuffer832 +Код команды 033, данная команда принимает с шины данные в буфер SimpleIN 831 831 832 - Theoperationofthiscommandissimilar tothe operationofcommands023 and016.834 +Работа данной команды аналогична работе команд [[023>>doc:||anchor="H023:41F44043843D44F44244C44144843843D44B43243144344443544043443043D43D44B43543443B44F43F43E44143B43543444344E44943543943743043F438441438432431443444435440"]] и [[016>>doc:||anchor="H016:A041F44043843D44F44244C43143B43E43A43443043D43D44B445432431443444435440"]]. 833 833 834 -== 034: SetRTCbasedonbufferdata==836 +== **034: Установка RTC на основании данных из буфера** == 835 835 836 - Commandcode034,thiscommandsetstheRTCbasedonthedatain theSimpleINbuffer838 +Код команды 034, данная команда устанавливает RTC на основании данных в буфере SimpleIN 837 837 838 - Thiscommandexecutesquickly,buttoavoidproblems,awaitloopis recommended.840 +Данная команда выполняется быстро, но для исключения проблем цикл ожидания выполнения рекомендуется. 839 839 840 -== 035: StimulatetimerequestfromNTPserver,setbasedonresponse==842 +== **035: Стимуляция запроса времени с NTP сервера, установка на основании ответа** == 841 841 842 - Commandcode035,thiscommandsendsarequestto theNTPserver(setintheAZ.INIfileorreceivedfromDHCP)andsetstheclockintheTCP/IPstack.844 +Код команды 035, данная команда отправляет запрос на NTP cервер (установленный в AZ.INI файле или полученный от DHCP) и устанавливает часы в стеке TCP/IP. 843 843 844 - Exampleprogram:sendingarequesttosetthetime from anNTPserver846 +Пример программы: отсылка запроса на установку времени с NTP сервера 845 845 846 846 {{code language="assembler"}} 847 -; trap 62 - sendingarequesttosetthetime from theNTPserver849 +; trap 62 - отсылка запроса на установку времени с NTP сервера 848 848 GetDateNTPtoNET:push R1 849 - call AZreset; reset851 + 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); checktheresult of execution855 - BPL 0$; wait856 +0$: TSTB (R1); проверяем результат выполнения 857 + BPL 0$; ждем 856 856 0ERR$: pop R1 857 857 return 858 858 {{/code}} 859 859 860 - Thecommandexecutiontakes1-2secondsonaverage.ThiscommandrequirestheTCP/IPstack to work,sowaitingcyclesareneededwhenthe stack is enabled.862 +Выполнение команды занимает 1-2 секунды в среднем. Данная команда требует работы стека TCP/IP, соответственно нужны циклы ожидания при включенном стеке. 861 861 862 - Anexampleofapollingcycletogettime from the network864 +Пример цикла опроса с целью получить время с сети 863 863 864 864 {{code language="assembler"}} 865 -; date-time867 +; дата-время 866 866 mov #S_DateTime_0,R3; "Lan Date:" 867 867 trap 10 868 - mov #20,R4; numberofwait cycles869 -$datry: trap 62; sentarequestto theNTPserver870 - mov #110,@#AZ$CSR; enablethe network871 - trap 47; waiting872 - trap 47; waiting870 + mov #20,R4; количество циклов ожидания 871 +$datry: trap 62; отослали запрос к NTP серверу 872 + mov #110,@#AZ$CSR; включим сеть 873 + trap 47; ожидание 874 + trap 47; ожидание 873 873 mov #ADRTMPSTR,R3 874 - trap 60; readthedate-timeinto the buffer875 - trap 63; checkedthe date-time876 + trap 60; считали в буфер дату-время 877 + trap 63; проверили дату-время 876 876 tst R3 877 877 bne $ok 878 878 $sob: sob R4,$datry 879 - mov #S_DateTime_2,R3; printerror881 + mov #S_DateTime_2,R3; печать ошибки 880 880 trap 7 881 881 br $go 882 882 883 883 $ok: mov #ADRTMPSTR,R3 884 - trap 24; printdate885 - trap 25; time886 -$go: mov #110,@#AZ$CSR; let's turn on the network886 + trap 24; печать даты 887 + trap 25; времени 888 +$go: mov #110,@#AZ$CSR; включим сеть 887 887 {{/code}} 888 888 889 - Hereweexplicitlysendarequestto theNTPserver,thenturnonthenetworkandwait for the result,periodicallypollingandcheckingthecorrectness of the result.891 +Тут мы явно отсылаем запрос к NTP серверу, затем включаем работу сети и ждем результата, периодически опрашивая и проверяя корректность результата. 890 890 891 -== 036: SettingRTCbasedonTCP/IPstackclock==893 +== **036: Установка RTC на основании часов TCP/IP стека** == 892 892 893 - Commandcode036,thiscommandsetstheRTCbasedontheclock in theTCP/IPstack.Youmustfirstsetthe clock inTCP/IP -command036.895 +Код команды 036, данная команда устанавливает RTC на основании часов в TCP/IP стека. Предварительно надо установить часы в TCP/IP - команда 036. 894 894 895 - Exampleprogram:897 +Пример программы: 896 896 897 897 {{code language="assembler"}} 898 -; trap 64 - setRTCtimebasedonstack time899 -; R1 - resultR1=0 - OK900 -SetDateNETtoRTC:call AZreset; reset900 +; trap 64 - установка времени RTC на основании времени стека 901 +; R1 - результат R1=0 - OK 902 +SetDateNETtoRTC:call AZreset; сбросим 901 901 tst R1 902 902 bne 0ERR$ 903 903 MOV #AZ$CSR,R1 904 904 mov #36,(R1) 905 -0$: TSTB (R1); checkexecutionresult906 - BPL 0$; wait907 +0$: TSTB (R1); проверяем результат выполнения 908 + BPL 0$; ждем 907 907 clr R1 908 908 0ERR$: return 909 909 {{/code}} 910 910 911 -== 042: GettimefromTCP/IPstackclockintotimestampbuffer==913 +== **042: Получить время из часов TCP/IP стека в буфер timestamp** == 912 912 913 - Commandcode042,thiscommandusestheTCP/IPstackclockasasource for fillingthe timestampbuffer.915 +Код команды 042, данная команда использует часы TCP/IP стека как источник заполнения буфера timestamp. 914 914 915 - Exampleprogram:917 +Пример программы: 916 916 917 917 {{code language="assembler"}} 918 918 ; работа с часами