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
-
... ... @@ -15,6 +15,7 @@ 15 15 * 177224 - Primary Boot Register (BOOT1) 16 16 * 177226 - Alternate Boot Register (BOOT2) 17 17 18 + 18 18 The CSR register accepts commands in bits D0-D5 and the interrupt enable bit in bit D6, all write only, always zero is read. In bit D7, the readiness bit is read. One in it means that the previous command has been executed and the controller is ready for exchange. Zero means that the controller is busy executing the previous operation, the other registers are disabled, access to any of them will cause Trap to 4. If the execution of the previous command caused an error, bit D15 is set simultaneously with bit D7. 19 19 \\Writing to registers is done only in words; byte writing is not allowed. 20 20 \\All data exchange is conducted via DR. For commands with a single-word argument, this argument should be sent to DR, and then the command should be sent to CSR. For commands exchanging with the controller buffer, on the contrary, the command should be issued and only after it a data block of a certain length should be received or transmitted. ... ... @@ -248,51 +248,51 @@ 248 248 == 005: Reading block into buffer == 249 249 250 250 The controller has a built-in buffer for 256 words (512 bytes). In fact, this is part of the STM32 microcontroller's RAM, allocated in its program for this buffer. All exchange in the main command block goes through this buffer. 251 -\\ 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.252 -\\ Command005 -readingablockfromMicroSDtothe buffer. Fromthepseudo-diskAZn,previouslyselectedbythe command"Selectdevice",theblockwhosenumberistransmittedbythecommand(commands) "Setblocknumber"isstartedfor reading.Long-term command.253 -\\ 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.254 -\\ Anexamplewithoutinterruptions is trivial: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 +\\Пример без прерываний тривиален: 255 255 256 256 {{code language="assembler"}} 257 257 ;................................... 258 258 259 -CmdRea=005; symbolic name of the "Read block" command 260 +CmdRea=005; символическое наименование команды "Читать 261 +; блок" 260 260 261 -; InR3wehavetheCSRaddressleftfromthe previous fragment.262 -; Wesendthereadcommandcode there263 +; В R3 у нас от предыдущего фрагмента остался адрес CSR. 264 +; Пересылаем туда код команды чтения 263 263 MOV #CmdRea,@R3 264 -2$: TSTB @R3 Let'schecktheready bit265 - BPL 2$; Notready->wegoto check again266 -; once267 - TST @R3; Let'scheckfor an error266 +2$: TSTB @R3 ; Проверим бит готовности 267 + BPL 2$; Не готово -> уходим проверять еще 268 + ; раз 269 + TST @R3; Проверим на ошибку 268 268 BMI ERR4 269 -; Hereagain,unlikethefragmentsofpp. 3.1and270 -; 3.2, wehavetheCSRaddress left in R3,notDR.271 +; Здесь у нас опять, в отличие от фрагментов пп. 3.1 и 272 +; 3.2, в R3 остался адрес CSR, а не DR. 271 271 272 272 ;................................... 273 273 {{/code}} 274 274 275 275 276 -== 006: Writeblockfrombuffertodisk==278 +== **006: Записать блок из буфера на диск** == 277 277 278 -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 +\\Пример программы без прерываний: 279 279 280 - 281 -Example of a program without interrupts: 282 - 283 283 {{code language="assembler"}} 284 284 ;............................................................... 285 285 286 -CmdWri=006; symbolicnameofthe"Write287 -; block"command286 +CmdWri=006; символическое наименование команды "Писать 287 + ; блок" 288 288 289 -; InR3wehavetheDRaddressleftoverfrom the previous fragment.290 -; Wecorrectitto theCSRandsendthe291 -; write command code there289 +; В R3 у нас от предыдущего фрагмента остался адрес DR. 290 +; Исправляем его на CSR и пересылаем туда код команды 291 +; записи 292 292 MOV #CmdWri,-(R3) 293 -5$: TSTB @R3 ; Let's check the ready bit 294 - BPL 5$; Not ready -> we go and check again once 295 - TST @R3; Let's check for an error 293 +5$: TSTB @R3 ; Проверим бит готовности 294 + BPL 5$; Не готово -> уходим проверять еще 295 + ; раз 296 + TST @R3; Проверим на ошибку 296 296 BMI ERR5 297 297 298 298 ;.................................................................... ... ... @@ -299,14 +299,14 @@ 299 299 {{/code}} 300 300 301 301 302 -== 007: Getdisksize==303 +== **007: Получить размер псевдодиска** == 303 303 304 - Therearetwocommandsforobtaining the size of a pseudo-disk,i.e.theAZnfile-imagemountedonthe selected pseudo-drive.305 -\\ IftheOSbeing used(oraprogramworkingwithdiskswithout an OS)canworkwithlarge(morethan32M)disks,youshouldusethecommand with thecode017.Thesequence of actions:resetthecontroller(command000),selectthedrive(p. 3.2)andsendthecode017to the CSR,andthen,withoutanywaiting,readfromDRfirstthe lower word,andthenthehigherwordofthesizeofthe selected drive(image file).306 -\\ IftheOSyouareusingcannotworkwithdiskslarger than32M(RT-11),youshouldusethe007command-getthepseudo-disksizewithalimit of up to32M.Thesteps are similar:resetthe controller,selectthe disk,sendthe007 code to theCSRandreadonewordofthe pseudo-disk size fromDR.Ifthesizeoftheimagefilemountedontheselectedpseudo-driveis larger than65534blocks,thecontrollerreturnsthenumber65534instead of this "large" size.Weremindyouthat the number65535isusedinsomeplacesforspecialpurposesandcannotbe the disk size.307 -\\ Wealsoremindyouthatiftheimagefileis not mounted on this drive,thesequenceofactionswill not work(command001selectdevice)andtheprogramexecutionwillsimplynotreachthis point.Therefore,thesecommandsdonotprovidefor errors.305 +Есть две команды получения размера псевдодиска, т.е. смонтированного на выбранный псевдопривод AZn файл-образа. 306 +\\Если используемая ОС (или программа, работающая с дисками без ОС) умеет работать с большими (больше 32М) дисками, следует пользоваться [[командой с кодом 017>>doc:||anchor="H017:A041F43E43B44344743844244C44043043743C43544043F44143543243443E43443844143A4302C43143E43B44C44843E439"]]. Последовательность действий: сбросить контроллер (команда 000), выбрать накопитель (п. 3.2) и переслать в CSR код 017, а затем, без каких-либо ожиданий, считать из DR сначала младшее, и следом за ним старшее слово размера выбранного накопителя (файл-образа). 307 +\\Если используемая ОС не умеет работать с дисками бОльшими, чем 32М (RT-11), следует пользоваться командой 007 - получить размер псевдодиска с ограничением до 32М. Действия похожие: сбрасываем контроллер, выбираем диск, посылаем в CSR код 007 и считываем из DR одно слово размера псевдодиска. Если размер файл-образа, смонтированного на выбранный псевдопривод, больше 65534 блоков, вместо этого "большого" размера, контроллер возвращает число 65534. Напоминаем, что число 65535 кое-где используется в специальных целях и не может быть размером диска. 308 +\\Также напоминаем, что если на этот накопитель не смонтирован файл-образ, последовательность действий не пройдет (команда 001 выбор устройства) и исполнение программы до этого места просто не дойдет. Поэтому ошибок у этих команд не предусмотрено. 308 308 309 - Exampleofaprogram with"small"disks310 +Пример программы с "малыми" дисками 310 310 311 311 {{code language="assembler"}} 312 312 ;......................................