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
-
... ... @@ -542,13 +542,13 @@ 542 542 543 543 {{code language="assembler"}} 544 544 ;------------------------------------------------------------- 545 -; gettingSTM32firmware version-resultinR1 R1=0error545 +; получение версии прошивки STM32 - результат в R1 R1=0 ошибка 546 546 GTSTMV: MOV #AZ$CSR,R1 547 -1$: CLR (R1) ; Send"Reset"command548 - TSTB (R1) ; Checkcontrollerreadinessконтроллера549 - BPL 1$ ; Ifnot ready,resetagain547 +1$: CLR (R1) ; Пошлем команду "Сброс" 548 + TSTB (R1) ; Проверим готовность контроллера 549 + BPL 1$ ; Если не готов, сбрасываем еще 550 550 mov #27,(R1) 551 - TST (R1)+ ; Checkforerror551 + TST (R1)+ ; Проверяем на ошибку 552 552 BMI 2$ 553 553 mov (R1),R1 554 554 return ... ... @@ -558,45 +558,45 @@ 558 558 {{/code}} 559 559 560 560 561 -== 030: Nooperation==561 +== **030: Нет операции** == 562 562 563 - Themainpurposeofthiscommandistosettheinterrupt enable bit from the controller.Thecommandtransferstheinterrupt enable bit,whichisinthesamewordwith it,butisnotpartofit(remember,thecommandislocatedin bitsD0 - D5,andtheinterruptenablebitisD6),tothecorrespondingtriggerofthecontrolleranddoesnotaffecttheprocesses in the controller in any other way.Controlofthistriggerworkseveninthe"Thinking,pleasedonot interfere"state,andthisisthemainfeature of the"nooperation"command.564 -\\ Thecommandhasthe code0030.Sendingthecode0130totheCSRwill enable interrupts from the controller,sendingthecode0030willdisable them.Anexampleisnotgivendue to its triviality.563 +Основное назначение этой команды - устанавливать бит разрешения прерываний от контроллера. Команда передает бит разрешения прерывания, который находится с ней в одном слове, но не входит в ее состав (напоминаем, команда располагается в битах D0 - D5, а бит разрешения прерываний - D6), в соответствующий триггер контроллера и больше никак не влияет на процессы в контроллере. Управление этим триггером работает даже в состоянии "Думаю, прошу не мешать", и это главная особенность команды "нет операции". 564 +\\Команда имеет код 0030. Посылка в CSR кода 0130 разрешит прерывания от контроллера, посылка кода 0030 запретит их. Пример не приводится вследствие тривиальности его. 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,11 +636,12 @@ 636 636 return 637 637 {{/code}} 638 638 639 - obviously,afterreadingthememory,itisnecessarytochecktheresult code in the first word-seethedecodingof error codes639 +очевидно, после считывания памяти необходимо проверить код результата в первом слове - см расшифровку кодов ошибок 640 640 \\Примеры возвращаемых данных по командам 641 641 \\последовательная подача команды 021 и затем 022 позволит считать 256. слов 642 642 из энергонезависимой памяти 643 643 **Внимание! **первое слово это будет статус успешности чтения 644 + 644 644 645 645 * 0 - ok 646 646 * 1 - размер не соответствует сохраненному