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
-
... ... @@ -154,19 +154,18 @@ 154 154 155 155 == 003: Open HFS Table of Contents == 156 156 157 -Sequence of actions: 157 +Последовательность действий 158 +\\• [[сбросить контроллер>>doc:||anchor="H000:A042143144043E44143A43E43D44244043E43B43B435440430"]] 159 +• подать в CSR команду "Принять блок данных в буфер" и передать пословно всю строку с полным текстом пути (Full Path) к требуемому оглавлению. Строка должна завершаться нулевым байтом (0х00) и быть не длиннее 384 байт (192 слов). 160 +• переслать в CSR код команды "Открыть оглавление" 161 +• дождаться ее окончания (команда длительная) 162 +• проверить на ошибку 158 158 159 -• reset the controller 160 -• send the command "Accept data block to buffer" to the CSR and transmit the entire line with the full path text (Full Path) to the required table of contents word by word. The line must end with a zero byte (0x00) and be no longer than 384 bytes (192 words). 161 -• send the "Open table of contents" command code to the CSR 162 -• wait for it to finish (the command is long) 163 -• check for errors 164 +[[**//Пример утилиты - AZDIR//**>>url:https://forum.maxiol.com/index.php?s=&showtopic=5605&view=findpost&p=59418]] 164 164 165 -[[Example utility - AZDIR>>url:https://forum.maxiol.com/index.php?s=&showtopic=5605&view=findpost&p=59418]] 166 166 167 +Пример программы: 167 167 168 -Example program: 169 - 170 170 {{code language="assembler"}} 171 171 ;............................. 172 172 AZ$CSR = 177220 ... ... @@ -174,44 +174,46 @@ 174 174 OpnDir = 003 175 175 176 176 MOV #AZ$CSR,R3 177 -; The DirPtr cell contains a pointer to the beginning of the field with Full 178 -; Path. We assume that the string is terminated by three zero 179 -; bytes in order to recognize the end of the transfer of the 180 -; string word by word by zero. Indeed, if the number of 181 -; characters in the string is even, then the next two bytes of zeros 182 -; form a zero word; if it is odd, then one zero 183 -; will go away with the last character of the string, and the zero 184 -; word is formed by the second and third zero bytes, 185 -; ending the string. That is, such an end of the string, 186 -; transferred word by word, is quite reliable. 176 + 177 +; Ячейка DirPtr содержит указатель на начало поля с Full 178 +; Path. Считаем, что строка завершается тремя нулевыми 179 +; байтами, чтобы распознать по нулю окончание пересылки 180 +; строки пословно. Действительно, если количество 181 +; символов в строке четное, то следующие два байта нулей 182 +; образуют нулевое слово; если же нечетное, то один ноль 183 +; уйдет вместе с последним символом строки, а нулевое 184 +; слово образуют второй и третий нулевые байты, 185 +; оканчивающие строку. То есть, такое окончание строки, 186 +; передаваемой пословно, вполне надежно. 187 187 MOV DirPtr,R2 188 188 189 - MOV #WrBuf,(R3)+; Weissuethe"Writeto190 - ; buffer"commandandtransmit the string191 -11$: MOV (R2)+,@R3; wordbyword,192 - BNE 11$ ; untilzeroissent,189 + MOV #WrBuf,(R3)+; Подаем команду "Запись в 190 + ; буфер" и передаем строку 191 +11$: MOV (R2)+,@R3; пословно, до тех пор, 192 + BNE 11$ ; пока не перешлется ноль 193 193 194 - MOV #OpnDir,-(R3); Weissuethe"Open195 - ; table of contents"command194 + MOV #OpnDir,-(R3); Подаем команду "Открыть 195 + ; оглавление" 196 196 197 -12$: TSTB @R3; andwaitforthecontroller to198 - BPL 12$; execute it,199 - TST @R3; afterwhichwecheckfor an error.200 - BMI Err10; Error-->197 +12$: TSTB @R3; и ждем, когда контроллер ее 198 + BPL 12$; выполнит, 199 + TST @R3; после чего проверяем на ошибку. 200 + BMI Err10; Ошибка --> 201 201 ;............................. 202 202 {{/code}} 203 203 204 -== 004: Mountadisk==204 +== **004: Монтировать диск** == 205 205 206 -Sequence of actions: 207 -• Reset the controller 208 -• Send a line to the controller with a record similar to the lines describing the disks in the AZ.INI file 209 -• Issue the "Mount disk" command 210 -• Wait for it to finish (the command is long) 211 -• Check for errors 212 -The selected AZnn drive MUST NOT have a disk mounted. If it is mounted, the old disk should be unmounted before mounting a new one - command 014 206 +Порядок действий: 207 +• [[Сбросить контроллер>>doc:||anchor="H000:A042143144043E44143A43E43D44244043E43B43B435440430"]] 208 +• Переслать в контроллер строку с записью, подобной строкам описания дисков в файле AZ.INI 209 +• Выдать команду "Монтировать диск" 210 +• Дождаться ее окончания (команда длительная) 211 +• Проверить на ошибки 212 +На выбранный накопитель AZnn НЕ ДОЛЖЕН быть смонтирован диск. Если он таки смонтирован, перед монтированием туда нового диска следует размонтировать старый - команда 014 213 + 213 213 214 - Exampleprogram:215 +Пример программы: 215 215 216 216 {{code language="assembler"}} 217 217 ;.................. ... ... @@ -221,20 +221,20 @@ 221 221 MOV #AZ$CSR,R3 222 222 223 223 20$: CLR @R3; 224 - TSTB @R3; Resetthe controller225 + TSTB @R3; Сбросим контроллер 225 225 BPL 20$; 226 226 227 - MOV #WrBuf,(R3)+; Senditastring228 - MOV #MDTXT,R2; withtheassignment command228 + MOV #WrBuf,(R3)+; Перешлем в него строку 229 + MOV #MDTXT,R2; с командой назначения 229 229 MOV #MDLEN/2,R1; 230 230 21$: MOV (R2)+,@R3; 231 231 SOB R1,21$; 232 232 233 - MOV #AZMNT,-(R3); andpassitto234 -22$: TSTB @R3 ; execution234 + MOV #AZMNT,-(R3); и отдадим ее на 235 +22$: TSTB @R3 ; исполнение 235 235 BPL 22$ ; 236 236 237 - TST @R3; thencheckforanerror238 + TST @R3; после чего проверим на ошибку 238 238 BMI Err11; 239 239 ;......................... 240 240 ... ... @@ -243,12 +243,12 @@ 243 243 ;.................. 244 244 {{/code}} 245 245 246 - Inthisfragment,the51SYS_DS.DSKimage file is mounted on the AZ4 disk,locatedintheSYSTEMfolder,whichislocatedintheDISKSfolder,whichislocatedintheroot directory of the micro-SDcard.247 +В этом фрагменте на диск AZ4 монтируется файл-образ 51SYS_DS.DSK, лежащий в папке SYSTEM, которая лежит в папке DISKS, лежащей в корневом оглавлении карточки микро-SD. 247 247 248 248 249 -== 005: Readingblockintobuffer==250 +== **005: Чтение блока в буфер** == 250 250 251 - Thecontrollerhasabuilt-inbufferfor256words(512bytes).In fact,thisispartoftheSTM32microcontroller's RAM,allocatedinitsprogramforthisbuffer.Allexchangeinthemaincommandblockgoesthroughthis buffer.252 +У контроллера имеется [[встроенный буфер на 256 слов (512 байт).>>doc:||anchor="H411443444435440430"]] Фактически, это часть оперативной памяти микроконтроллера STM32, выделенная в его программе под этот буфер. Весь обмен в основном блоке команд идет через этот буфер. 252 252 \\Память дисков AZ представлена, как набор блоков объемом 512 байт каждый. Такой блок - единственная доступная единица для обмена данными с дисками AZ. Блоки пронумерованы от нуля до 65533 для 16-разрядного варианта или до 8388607 для 32-разрядного - это при использовании накопителей AZ максимально допустимой емкости. Никто не мешает использовать накопители меньшей емкости - фактический размер накопителя равен размеру файл-образа, смонтированного на этот накопитель. При попытке обратиться за пределы файл-образа будет зарегистрирована ошибка. 253 253 \\Команда 005 - чтение блока с MicroSD в [[буфер>>doc:||anchor="Micro"]]. С псевдодиска AZn, выбранного ранее командой "Выбор устройства" запускается на чтение блок, номер которого передан командой (командами) "Установка номера блока". Команда длительного действия. 254 254 \\Фактически, блок с карточки MicroSD читается, примерно, 500-800 мкс. На это время контроллер переходит в состояние, которое во время обсуждения проекта получило название "Думаю, прошу не мешать." А именно, на все время ее исполнения отключаются все регистры устройства, кроме CSR, в котором считывается ноль до тех пор, пока контроллер занят исполнением этой команды. По окончании считывания блока к МПИ подключаются остальные регистры контроллера, взводится бит D7 (готовность) в CSR и, если был установлен бит D6 (разрешение прерываний) в CSR, вырабатывается прерывание с вектором 0174.