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
-
... ... @@ -564,39 +564,39 @@ 564 564 \\The command has the code 0030. Sending the code 0130 to the CSR will enable interrupts from the controller, sending the code 0030 will disable them. An example is not given due to its triviality. 565 565 566 566 567 -= Commandblockforworkingwithnon-volatilememory=567 += **Блок команд работы с энергонезависимой памятью** = 568 568 569 - TheinterfaceprovidesanyAZcontrollerwithaccess to255wordsofnon-volatile memory,allcommandssetthereadybitupon completion.Thisallowsyoutosaveusersettingsin non-volatile memory,forexample,thisisusedinAZBK??-therearesavedsettingsformorecomfortableoperation of the controller.569 +Интерфейс предоставляет любому AZ-контроллеру доступ к 255 словам энергонезависимой памяти, все команды устанавливают бит готовности по завершению. Это позволяет сохранять пользовательские настройки в энергонезависимой памяти, к примеру это используется в AZБК - там сохраняются настройки для более комфортной работы контроллера. 570 570 571 - Allcommandsinthisblockuseanon-volatilememorybufferfor their operation.571 +Все команды этого блока используют буфер энергонезависимой памяти для своей работы. 572 572 573 -== 021: Readnon-volatilememoryblockintobuffer==573 +== **021: Cчитать блок энергонезависимой памяти в буфер** == 574 574 575 575 (% class="wikigeneratedid" %) 576 - Commandcode021,thiscommandcausesablockofnon-volatilememorytoberead into the non-volatile memory buffer.576 +Код команды 021, данная команда вызывает чтение блока энергонезависимой памяти в буфер энергонезависимой памяти. 577 577 578 578 579 -== 022: Transferthereadblockofnon-volatilememoryfromthebuffer to the bus==579 +== **022: Отдать на шину считанный блок энергонезависимой памяти из буфера** == 580 580 581 581 (% class="wikigeneratedid" %) 582 - Commandcode022,thiscommandensuresthatthenon-volatilememorybufferistransferred to theDRregisterfor reading.582 +Код команды 022, данная команда обеспечивает передачу буфера энергонезависимой памяти в регистр DR для считывания. 583 583 584 584 (% class="wikigeneratedid" %) 585 - Exampleprogram585 +Пример программы 586 586 587 587 {{code language="assembler"}} 588 -AZ$CSR = 177220; commandandstatusregister(CSR)589 -AZ$DR = 177222; dataregister(DR)588 +AZ$CSR = 177220; регистр команд и состояния (CSR) 589 +AZ$DR = 177222; регистр данных (DR) 590 590 591 591 592 -; trap 50 - resetAZ592 +; trap 50 - cброс AZ 593 593 ; результат в R1 =0 ok 594 594 AZreset: MOV #AZ$CSR,R1 595 -1$: CLR (R1); Sendthe"Reset"command596 - TSTB (R1); Checkthecontroller readiness597 - BPL 1$; Ifnotready,resetagain598 -; onceandcheckagain599 - TST (R1); Checkforan 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 - readingnon-volatilememoryofblock1 EEPROMtothebufferfromthe addressADREEPROMMEM609 -; resultR3 -address,ifR3=0error610 -; readstatusinR1 0 - ok611 -; 1 - sizedoesnotmatch saved612 -; 2 - versionerror613 -; 3 - checksum error608 +; 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; reset615 + call AZreset; сбросим 616 616 tst R1 617 617 bne 0ERR$ 618 618 ; теперь читаем 619 619 MOV #AZ$CSR,R1 620 - mov #21,(R1); readblock1ofnon-volatilememoryinto buffer621 -0$: TSTB (R1); checkexecutionresult622 - BPL 0$; wait623 - mov #22,(R1); sendreadblockofnon-volatilememoryfrombuffertobus624 -1$: TSTB (R1); checkexecutionresult625 - BPL 1$; wait626 - TST (R1)+; increment620 + 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; read256.words;firstwordisreadingresult629 -2$: mov (R1),(R3)+; readblockofwordsinto memory628 + mov #256.,R2; читаем 256. слов; первое слово - результат чтения 629 +2$: mov (R1),(R3)+; читаем блок слов в память 630 630 sob R2,2$ 631 - mov #ADREEPROMMEM,R3; successful631 + 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 - sizedoesnotmatch saved646 -* 2 - versionerror647 -* 3 - checksum error647 +* 1 - размер не соответствует сохраненному 648 +* 2 - oшибка версии 649 +* 3 - oшибка контрольной суммы 648 648 649 -== 023: Receivedatafromthebusintothebufferforsubsequentwritinginto the buffer==651 +== **023: Принять с шины в буфер данные для последующей записи в буфер** == 650 650 651 - Commandcode023,thiscommandallowsyoutofillthe non-volatile memory buffer653 +Код команды 023, данная команда позволяет наполнить буфер энергонезависимой памяти 652 652 653 -== 024: Writefrombuffertonon-volatilememoryblock==655 +== **024: Записать из буфера в блок энергонезависимой памяти** == 654 654 655 - Commandcode024,thiscommandcausesanon-volatilememoryblocktobewrittenfrom the non-volatile memory buffer.657 +Код команды 024, данная команда вызывает запись блока энергонезависимой памяти из буфера энергонезависимой памяти. 656 656 657 - Exampleprogram659 +Пример программы 658 658 659 659 {{code language="assembler"}} 660 -AZ$CSR = 177220; CommandandStatusRegister(CSR)661 -AZ$DR = 177222; DataRegister(DR)662 +AZ$CSR = 177220; регистр команд и состояния (CSR) 663 +AZ$DR = 177222; регистр данных (DR) 662 662 663 663 664 -; trap 50 - resetAZ666 +; 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,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 - writenon-volatilememoryfromthebufferataddressADREEPROMMEM в блок 1 EEPROM681 +; trap 55 - запись энергонезависимой памяти из буфера с адреса ADREEPROMMEM в блок 1 EEPROM 680 680 WriteEEPROM: push R1 681 681 push R2 682 682 push R3 683 - call AZreset; reset685 + 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)+; increment690 + mov #23,(R1); командуем что будем писать данные в буфер 691 +0$: TSTB (R1); проверяем результат выполнения 692 + BPL 0$; ждем 693 + TST (R1)+; инкрементируем 692 692 mov #ADREEPROMMEM+2,R3 693 - mov #255.,R2; write255.words;skipthefirstword-theresult of reading694 -1$: mov (R3)+,(R1); sendtothe controller695 + mov #255.,R2; пишем 255. слов; первое слово пропускаем - результат чтения 696 +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 waiting698 + 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 -** Pleasenote**thatwhen recording,thebufferimmediatelycomeswith the data,i.e.thereisnofirstword with the statu710 +**Обращаю внимание**, при записи, буфер идет сразу с данными, те нет первого слова со статусом. 709 709 710 710 711 711 712 -= BlockofcommandsforworkingwithRTCandNTP =714 += Блок команд для работы с RTC и NTP = 713 713 714 - TheAZ®controllerhas2sourcesofdate-time,thefirstis theRTCbuiltintotheSTM32,thesecondistheclockin theTCP/IPstack.TheRTCclockworksautonomouslywitha2032battery installed.TheclockintheTCP/IPstackissetbasedondata from theNTPserver.716 +В контроллере AZ® есть 2 источника получения даты-времени, первый это RTC встроенный в STM32, второй это часы в стеке TCP/IP. Часы RTC работают автономно при наличии установленной батарейки 2032. Часы в стеке TCP/IP устанавливаются на основании данных с NTP-сервера. 715 715 716 716 717 -== Bufferformattimestamp (readable) ==719 +== Формат буфера timestamp (доступен по чтению) == 718 718 719 - The controllerAPIimmediatelypreparestimeinseveralformats,sothatitcanbeconvenientlyusedon thePDP-11side721 +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(whenwriting) ==744 +== Формат буфера SimpleIN (при записи) == 741 741 742 - theformatis simplified as much as possible,forworkwithPDP-11746 +формат максимально упрощен, для работы со стороны PDP-11 743 743 744 744 {{info}} 745 -offset inoctal-thosewords749 +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; second751 +[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: GettimefromRTCtotimestampbuffer==761 +== **031: Получить время из RTC в буфер timestamp** == 758 758 759 - Commandcode031,thiscommandusesRTCclockasasourceof fillingthe timestampbuffer763 +Код команды 031, данная команда использует RTC часы как источник заполнения буфера timestamp 760 760 761 - Exampleprogram:765 +Пример программы: 762 762 763 763 {{code language="assembler"}} 764 -; trap 61 - readingclockdatafromautonomousRTCclock765 -; R3 - bufferaddresswheretoread766 -; resultinR3addressifsuccessful. R3=0iferror768 +; 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; reset774 + 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 same779 + br G60; идем туда тк дальше код одинаковый 776 776 {{/code}} 777 777 778 -== 032: Gettimefromtimestampbuffer==782 +== **032: Получить время из буфера timestamp** == 779 779 780 - Commandcode032,thiscommandsendsthecontentsofthe timestampbuffer to the bus784 +Код команды 032, данная команда отдает на шину содержимое буфера timestamp 781 781 782 782 {{code language="assembler"}} 783 -; workingwithclock784 -; trap 60 - readingclockdatafromTCP/IPstack785 -; R3 - bufferaddresswheretoread786 -; resultinR3addressifsuccessful. R3=0iferror787 +; работа с часами 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; reset794 + 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; wait799 +G60: TSTB (R1); проверяем результат выполнения 800 + BPL G60; ждем 797 797 mov #32,(R1) 798 -1$: TSTB (R1); checkexecutionresult802 +1$: TSTB (R1); проверяем результат выполнения 799 799 BPL 1$; ждем 800 - TST (R1)+; increment801 - mov R3,R0; rememberR3address802 - mov #10.,R2; read10words803 -2$: mov (R1),(R3)+; readblockofwordsinto memory804 + 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,returnaddresstoR3809 + 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:818 +Стоит проверить корректность полученного времени: 815 815 816 816 {{code language="assembler"}} 817 -; trap 63 - checktimecorrectness818 -; R3 - bufferaddress,resultinR3,ifbufferaddressthenOK, =0error821 +; 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: Writetime-datetoSimpleINbuffer==832 +== **033: Запись времени-даты в буфер SimpleIN** == 829 829 830 - Commandcode033,thiscommandreceivesdatafromthebusinto theSimpleINbuffer834 +Код команды 033, данная команда принимает с шины данные в буфер SimpleIN 831 831 832 - Theoperationofthiscommandissimilar tothe operationofcommands023 and016.836 +Работа данной команды аналогична работе команд [[023>>doc:||anchor="H023:41F44043843D44F44244C44144843843D44B43243144344443544043443043D43D44B43543443B44F43F43E44143B43543444344E44943543943743043F438441438432431443444435440"]] и [[016>>doc:||anchor="H016:A041F44043843D44F44244C43143B43E43A43443043D43D44B445432431443444435440"]]. 833 833 834 -== 034: SetRTCbasedonbufferdata==838 +== **034: Установка RTC на основании данных из буфера** == 835 835 836 - Commandcode034,thiscommandsetstheRTCbasedonthedatain theSimpleINbuffer840 +Код команды 034, данная команда устанавливает RTC на основании данных в буфере SimpleIN 837 837 838 - Thiscommandexecutesquickly,buttoavoidproblems,awaitloopis recommended.842 +Данная команда выполняется быстро, но для исключения проблем цикл ожидания выполнения рекомендуется. 839 839 840 -== 035: StimulatetimerequestfromNTPserver,setbasedonresponse==844 +== **035: Стимуляция запроса времени с NTP сервера, установка на основании ответа** == 841 841 842 - Commandcode035,thiscommandsendsarequestto theNTPserver(setintheAZ.INIfileorreceivedfromDHCP)andsetstheclockintheTCP/IPstack.846 +Код команды 035, данная команда отправляет запрос на NTP cервер (установленный в AZ.INI файле или полученный от DHCP) и устанавливает часы в стеке TCP/IP. 843 843 844 - Exampleprogram:sendingarequesttosetthetime from anNTPserver848 +Пример программы: отсылка запроса на установку времени с NTP сервера 845 845 846 846 {{code language="assembler"}} 847 -; trap 62 - sendingarequesttosetthetime from theNTPserver851 +; trap 62 - отсылка запроса на установку времени с NTP сервера 848 848 GetDateNTPtoNET:push R1 849 - call AZreset; reset853 + 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$; wait858 +0$: TSTB (R1); проверяем результат выполнения 859 + 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.864 +Выполнение команды занимает 1-2 секунды в среднем. Данная команда требует работы стека TCP/IP, соответственно нужны циклы ожидания при включенном стеке. 861 861 862 - Anexampleofapollingcycletogettime from the network866 +Пример цикла опроса с целью получить время с сети 863 863 864 864 {{code language="assembler"}} 865 865 ; дата-время