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
-
... ... @@ -201,7 +201,7 @@ 201 201 ;............................. 202 202 {{/code}} 203 203 204 -== 004: Mountadisk==204 +== **004: Монтировать диск** == 205 205 206 206 Sequence of actions: 207 207 • Reset the controller ... ... @@ -221,20 +221,20 @@ 221 221 MOV #AZ$CSR,R3 222 222 223 223 20$: CLR @R3; 224 - TSTB @R3; Resetthe controller224 + TSTB @R3; Сбросим контроллер 225 225 BPL 20$; 226 226 227 - MOV #WrBuf,(R3)+; Senditastring228 - MOV #MDTXT,R2; withtheassignment command227 + MOV #WrBuf,(R3)+; Перешлем в него строку 228 + 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 ; execution233 + MOV #AZMNT,-(R3); и отдадим ее на 234 +22$: TSTB @R3 ; исполнение 235 235 BPL 22$ ; 236 236 237 - TST @R3; thencheckforanerror237 + TST @R3; после чего проверим на ошибку 238 238 BMI Err11; 239 239 ;......................... 240 240 ... ... @@ -243,57 +243,57 @@ 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.246 +В этом фрагменте на диск AZ4 монтируется файл-образ 51SYS_DS.DSK, лежащий в папке SYSTEM, которая лежит в папке DISKS, лежащей в корневом оглавлении карточки микро-SD. 247 247 248 248 249 -== 005: Readingblockintobuffer==249 +== **005: Чтение блока в буфер** == 250 250 251 - Thecontrollerhasabuilt-inbufferfor256words(512bytes).In fact,thisispartoftheSTM32microcontroller's RAM,allocatedinitsprogramforthisbuffer.Allexchangeinthemaincommandblockgoesthroughthis buffer.252 -\\ TheAZdiskmemoryisrepresentedasa set of blocks, each512bytesin size.SuchablockistheonlyavailableunitforexchangingdatawithAZdisks.Theblocksarenumberedfromzero to65533forthe16-bitversionorupto8388607forthe32-bitversion-thisiswhenusingAZdrivesofthe maximum permissible capacity.Noonepreventsyoufromusingdrivesof a smaller capacity-theactualsizeofthedrive is equal to the size of the file-imagemountedonthisdrive.Anerrorwillberegisteredifyoutryto access beyond the file-image.253 -\\ Command005 -readingablockfromMicroSDtothe buffer. Fromthepseudo-diskAZn,previouslyselectedbythe command"Selectdevice",theblockwhosenumberistransmittedbythecommand(commands) "Setblocknumber"isstartedfor reading.Long-term command.254 -\\ In fact,ablockfromaMicroSDcardisread in about500-800µs.Duringthistime,thecontrollergoesintoastatethatduringthediscussionofthe project was called"I think,pleasedonot interfere."Namely,fortheentiretimeofitsexecution,alldevice registers are disabled,exceptforCSR,inwhichzeroisreadaslongasthecontrollerisbusyexecuting this command.Aftertheblockisread,theremainingcontrollerregistersare connected to the QBUS,bitD7 (ready)isset inCSRand,ifbitD6 (interruptenable)wasset inCSR,aninterruptwithvector0174is generated.255 -\\ Anexamplewithoutinterruptions is trivial:251 +У контроллера имеется [[встроенный буфер на 256 слов (512 байт).>>doc:||anchor="H411443444435440430"]] Фактически, это часть оперативной памяти микроконтроллера STM32, выделенная в его программе под этот буфер. Весь обмен в основном блоке команд идет через этот буфер. 252 +\\Память дисков AZ представлена, как набор блоков объемом 512 байт каждый. Такой блок - единственная доступная единица для обмена данными с дисками AZ. Блоки пронумерованы от нуля до 65533 для 16-разрядного варианта или до 8388607 для 32-разрядного - это при использовании накопителей AZ максимально допустимой емкости. Никто не мешает использовать накопители меньшей емкости - фактический размер накопителя равен размеру файл-образа, смонтированного на этот накопитель. При попытке обратиться за пределы файл-образа будет зарегистрирована ошибка. 253 +\\Команда 005 - чтение блока с MicroSD в [[буфер>>doc:||anchor="Micro"]]. С псевдодиска AZn, выбранного ранее командой "Выбор устройства" запускается на чтение блок, номер которого передан командой (командами) "Установка номера блока". Команда длительного действия. 254 +\\Фактически, блок с карточки MicroSD читается, примерно, 500-800 мкс. На это время контроллер переходит в состояние, которое во время обсуждения проекта получило название "Думаю, прошу не мешать." А именно, на все время ее исполнения отключаются все регистры устройства, кроме CSR, в котором считывается ноль до тех пор, пока контроллер занят исполнением этой команды. По окончании считывания блока к МПИ подключаются остальные регистры контроллера, взводится бит D7 (готовность) в CSR и, если был установлен бит D6 (разрешение прерываний) в CSR, вырабатывается прерывание с вектором 0174. 255 +\\Пример без прерываний тривиален: 256 256 257 257 {{code language="assembler"}} 258 258 ;................................... 259 259 260 -CmdRea=005; symbolic name of the "Read block" command 260 +CmdRea=005; символическое наименование команды "Читать 261 +; блок" 261 261 262 -; InR3wehavetheCSRaddressleftfromthe previous fragment.263 -; Wesendthereadcommandcode there263 +; В R3 у нас от предыдущего фрагмента остался адрес CSR. 264 +; Пересылаем туда код команды чтения 264 264 MOV #CmdRea,@R3 265 -2$: TSTB @R3 Let'schecktheready bit266 - BPL 2$; Notready->wegoto check again267 -; once268 - TST @R3; Let'scheckfor an error266 +2$: TSTB @R3 ; Проверим бит готовности 267 + BPL 2$; Не готово -> уходим проверять еще 268 + ; раз 269 + TST @R3; Проверим на ошибку 269 269 BMI ERR4 270 -; Hereagain,unlikethefragmentsofpp. 3.1and271 -; 3.2, wehavetheCSRaddress left in R3,notDR.271 +; Здесь у нас опять, в отличие от фрагментов пп. 3.1 и 272 +; 3.2, в R3 остался адрес CSR, а не DR. 272 272 273 273 ;................................... 274 274 {{/code}} 275 275 276 276 277 -== 006: Writeblockfrombuffertodisk==278 +== **006: Записать блок из буфера на диск** == 278 278 279 -Command code 006. The buffer contents are written to the selected pseudo-disk at the specified disk address (block number). Before writing, checks are performed (1) "was there a write to the buffer?", if not, an error is returned and (2) "is the buffer completely filled?", if not (for the last shortened block of the file), the rest of the buffer is cleared with zeros. Then the block is written to the media. The operation is lengthy, after it is started the controller, as with reading, goes into the "I think, please do not interfere" state. And just as with reading, you must wait for the end of this operation, by the same means as with reading. 280 +Код команды 006. Содержимое буфера пишется на выбранный псевдодиск по заданному дисковомк адресу (номеру блока). Перед записью выполняются проверки (1) "была ли запись в буфер?", если нет, выдается ошибка и (2) "заполнен ли буфер полностью?", если нет (для последнего укороченного блока файла), остаток буфера очищается нулями. Далее производится запись блока на носитель. Операция длительная, после ее запуска контроллер, как и при чтении переходит в состояние "Думаю, прошу не мешать". И так же, как и при чтении окончания этой операции надо дождаться, теми же средствами, как и при чтении. 281 +\\Пример программы без прерываний: 280 280 281 - 282 -Example of a program without interrupts: 283 - 284 284 {{code language="assembler"}} 285 285 ;............................................................... 286 286 287 -CmdWri=006; symbolicnameofthe"Write288 -; block"command286 +CmdWri=006; символическое наименование команды "Писать 287 + ; блок" 289 289 290 -; InR3wehavetheDRaddressleftoverfrom the previous fragment.291 -; Wecorrectitto theCSRandsendthe292 -; write command code there289 +; В R3 у нас от предыдущего фрагмента остался адрес DR. 290 +; Исправляем его на CSR и пересылаем туда код команды 291 +; записи 293 293 MOV #CmdWri,-(R3) 294 -5$: TSTB @R3 ; Let's check the ready bit 295 - BPL 5$; Not ready -> we go and check again once 296 - TST @R3; Let's check for an error 293 +5$: TSTB @R3 ; Проверим бит готовности 294 + BPL 5$; Не готово -> уходим проверять еще 295 + ; раз 296 + TST @R3; Проверим на ошибку 297 297 BMI ERR5 298 298 299 299 ;....................................................................