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
-
... ... @@ -568,35 +568,35 @@ 568 568 569 569 The interface provides any AZ controller with access to 255 words of non-volatile memory, all commands set the ready bit upon completion. This allows you to save user settings in non-volatile memory, for example, this is used in AZBK ??- there are saved settings for more comfortable operation of the controller. 570 570 571 - Allcommandsinthisblockuseanon-volatilememorybufferfor their operation.571 +Все команды этого блока используют буфер энергонезависимой памяти для своей работы. 572 572 573 573 == 021: Read non-volatile memory block into buffer == 574 574 575 575 (% class="wikigeneratedid" %) 576 - Commandcode021,thiscommandcausesablockofnon-volatilememorytoberead into the non-volatile memory buffer.576 +Код команды 021, данная команда вызывает чтение блока энергонезависимой памяти в буфер энергонезависимой памяти. 577 577 578 578 579 579 == 022: Transfer the read block of non-volatile memory from the buffer to the bus == 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,47 +737,47 @@ 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 783 ; работа с часами