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 регистркомандисостояния(CSR)661 -AZ$DR регистрданных(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бросAZ664 +; 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 EEPROM679 +; 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-11719 +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-11742 +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часыкакисточникзаполнениябуфераtimestamp759 +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 - чтениеданныхчасовизавтономныхчасовRTC767 -; 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,даннаякомандаотдаетнашинусодержимоебуфераtimestamp780 +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; успешно,вернемадресвR3805 + 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,119 +827,119 @@ 827 827 return 828 828 {{/code}} 829 829 830 -== **033:Записьвремени-датывбуферSimpleIN**==828 +== 033: Write time-date to SimpleIN buffer == 831 831 832 - Кодкоманды033,даннаякомандапринимаетсшиныданныевбуферSimpleIN830 +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наоснованииданныхвбуфереSimpleIN836 +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,даннаякомандаотправляетзапроснаNTPcервер(установленныйв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 - результат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 -; работасчасами921 -; trap 60 - чтениеданныхчасовизTCP/IPстека922 -; R3 - адресбуферакуданадосчитать923 -; результатвR3адрес,еслиуспешно. R3=0если ошибка918 +; working with clock 919 +; trap 60 - reading clock data from TCP/IP stack 920 +; R3 - buffer address where to read 921 +; result in R3 address if successful. R3=0 if error 924 924 GetDateFromLAN: push R0 925 925 push R1 926 926 push R2 927 - call AZreset; сбросим925 + call AZreset; reset 928 928 tst R1 929 929 bne G60ERR 930 930 MOV #AZ$CSR,R1 931 931 mov #42,(R1) 932 -G60: TSTB (R1); проверяемрезультатвыполнения933 - BPL G60; ждем930 +G60: TSTB (R1); check execution result 931 + BPL G60; wait 934 934 mov #32,(R1) 935 -1$: TSTB (R1); проверяемрезультатвыполнения936 - BPL 1$; ждем937 - TST (R1)+; инкрементируем938 - mov R3,R0; запомнимR3- адрес933 +1$: TSTB (R1); check execution result 934 + BPL 1$; wait 935 + TST (R1)+; increment 936 + mov R3,R0; remember R3 address 939 939 mov #10.,R2; читаем 10 слов 940 -2$: mov (R1),(R3)+; читаемблоксловвпамять938 +2$: mov (R1),(R3)+; read block of words into memory 941 941 sob R2,2$ 942 - mov R0,R3; успешно,вернемадресвR3940 + mov R0,R3; successful, return address to R3 943 943 br 0END$ 944 944 G60ERR: CLR R3 945 945 0END$: pop R2 ... ... @@ -948,28 +948,28 @@ 948 948 return 949 949 {{/code}} 950 950 951 - всекомандыустанавливаютбитготовностипозавершению.949 +All commands set the ready bit upon completion. 952 952 953 953 954 -= ** Команды специфические для[[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]]** =952 += **[[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]] **specific commands = 955 955 956 - ДанныекомандыпредназначеныдляработыконтроллераAZБК®,разработанногодлясериикомпьютеровБК-БК-0010/БК-0010.01/БК-0011М.954 +These commands are intended for operation of the AZБК® controller, developed for the BK series of computers - BK-0010/BK-0010.01/BK-0011M. 957 957 958 - ДругиеконтроллерыAZ®игнорируютэтикоманды956 +Other AZ® controllers ignore these commands. 959 959 960 -== **037:перезапускконтроллера[[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]]и всей БК** ==958 +== 037: Restart of the** [[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]] **controller and the entire computer == 961 961 962 - Кодкоманды037,даннаякомандаосуществляетперезапускмикроконтроллераAZ®,чтовызываетиперезапусксамойБК-0010/БК-0010.01/БК-0011М960 +Command code 037, this command restarts the AZ® microcontroller, which also causes a restart of the BK-0010/BK-0010.01/BK-0011M itself 963 963 964 - Примерпрограммы962 +Example program 965 965 966 966 {{code language="assembler"}} 967 -AZ$CSR регистркомандисостояния(CSR)968 -AZ$DR регистрданных(DR)965 +AZ$CSR = 177220; command and status register (CSR) 966 +AZ$DR = 177222; data register (DR) 969 969 970 970 971 -; trap 57 - перезапускБК полный972 -AZcouldReboot: call AZreset; сбросимAZдабыонбылготовприниматькоманды969 +; trap 57 - full restart 970 +AZcouldReboot: call AZreset; reset AZ so it is ready to receive 973 973 mov #037,@#AZ$CSR 974 974 return 975 975 {{/code}}