亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? flashcarddrive.bas

?? 用ATMEL AVR CPU開發CF CARD的程式.在BASCOM環境
?? BAS
字號:
' This files contains the Routines


Declare Sub ReadSector(pwSRAMPointer as Word , plSectorNumber as Long , byVal pbSectorCount as Byte)
Declare Sub WriteSector(pwSRAMPointer as Word , plSectorNumber as Long , byVal pbSectorCount as Byte)
Declare Sub GetDriveIdentity(pwSRAMPointer as Word )
Declare Sub DriveInit()
Declare Sub DriveReset()
Declare Function DriveCheck() as Byte


' Register - definitions for ASM-Routines

rByteCount_Low alias r20
rByteCount_High alias r21
rCF_SectorCount alias r21
rCF_Reg alias r22
rData alias r23

nop
nop

Sub ReadSector(pwSRAMPointer as Word , plSectorNumber as Long , byVal pbSectorCount as Byte)
    ' Read Sector(s) from CF-Card to SRAM
    ' pwSRAMPointer: (Word) Variable which holds the address of SRAM to transfer Sector(s) from Card
    ' plSectorNumber: (Long) CF-Startingsector from which data should be transfered
    ' pbSectorCount: (Byte) Count of 512-Byte Sector(s) to transfer (largest Value = &H7F)
    loadadr pbSectorCount , X
    ld rCF_SectorCount, X
    loadadr pwSRAMPointer , X
    ld zl, X+
    ld zh, X+
    loadadr plSectorNumber , X
    !call _CF_Read_Sector
End Sub



Sub WriteSector(pwSRAMPointer as Word , plSectorNumber as Long , byVal pbSectorCount as Byte)
    ' Write Sector(s) from CF-Card to SRAM Byte
    ' pwSRAMPointer: (Word) Variable which holds the address of SRAM to transfer Sector(s) from Card
    ' plSectorNumber: (Long) CF-Startingsector from which data should be transfered
    ' pbSectorCount: (Byte) Count of 512-Byte Sector(s) to transfer (largest Value = &H7F)
    loadadr pbSectorCount , X
    ld rCF_SectorCount, X
    loadadr pwSRAMPointer , X
    ld zl, x+
    ld zh, x+
    loadadr plSectorNumber , X
    !call _CF_Write_Sector
End Sub



Sub GetDriveIdentity(pwSRAMPointer as Word )
    ' Read the Identity Drive from CF-Card to SRAM Byte
    ' pwSRAMPointer: (Word) Variable which holds the address of SRAM to transfer Sector(s) from Card
    ' 512 Bytes will be written
    loadadr pwSRAMPointer , X
    ld zl, x+
    ld zh, x+
    !call _CF_Read_DriveIdentity
End Sub



Sub DRIVEINIT()
    ' Setup Pins to CF-Card for Input/Output and reset CF-Card
    !Call _CF_Setup
End Sub



Sub DRIVERESET()
    ' Reset CF-Card
    !Call _CF_Reset
End Sub



Function DriveCheck() as Byte
    ' Check, if drive is ready (plugged in)
    !Call _CF_CheckCard
    loadadr DriveCheck , X
    st x, r24
End Function

nop


' =============================================================================
' ASM - Routines
' -----------------------------------------------------------------------------

' Hardware Definitions
' Port und Pin - Definitionen

' Data Port
CF_Data_Out alias PortA
CF_Data_In alias PinA
CF_Data_DDR alias DDRA

' Register - addressing
CF_ADDR_Out alias PortC
' CF_Addr_in alias PinC                ' Port C nur Output
' CF_Addr_DDR alias DDRC
' remove Comment-mark ' if bidirectional Port is used

' Control - Port
CF_Control_Out alias PortB
CF_Control_In alias PinB
CF_Control_DDR alias DDRB

' Pins at Control-Port
CF_CE1 alias 0                          ' Card enable
CF_CD1 alias 1                          ' Card detect
CF_RESET alias 2                        ' Reset-Pin
CF_OE alias 3                           ' Output enable
CF_WE alias 4                           ' Write enable
CF_RDY alias 5                          ' Card ready

' Input: CF_CD1, CF_RDY: Input
Const CF_Control_Direction = &B00011101 ' I/O Richtungen am Control-Port

Const CF_Control_Init = &B00011000      ' Setup-Ausgabe  f黵 Control-Port
Const CF_Control_Dir_Mask = &B11000000  'Maske f黵 belegte Pin's am Controlport

' CF-Card Register
' addresses uses 3 LSB Bit x x x x x A2 A1 A0

' Register addresses
Const Data_Reg = &H00
Const Error_Reg = &H01
Const Feature_Reg = &H01
Const Sec_Cnt_Reg = &H02
Const Sec_Num_Reg = &H03
Const Cyl_Lo_Reg = &H04
Const Cyl_Hi_Reg = &H05
Const Head_Reg = &H06
Const Status_Reg = &H07
Const Command_Reg = &H07

' Commands for Compact Flash Card

Const CF_Identify = &HEC
Const CF_Write_Sec = &H30
Const CF_Read_Sec = &H20

'------------------------------------------------------------------------------
' Read Identity Info from the CF-Card
_CF_Read_DriveIdentity:
   ldi rCF_SectorCount, 1               ' 512 Bytes = 1 Sector to read
   ldi rData, CF_Identify               ' Command for Card identity
   rcall _CF_Write_CommandReg           ' send to card
   rjmp _CF_Read_Sector_LBASet          ' Read Info to SRAM (mit return)


'------------------------------------------------------------------------------
' Pin CF_Rdy is Low at Ready
_CF_Check_Ready:
   sbis CF_Control_In, CF_Rdy           ' no timeout!!!
   rjmp _CF_Check_Ready
   Ret

'------------------------------------------------------------------------------
' give a pulse to WE to force Compactflash Card to read Data
' Registeraddress (A0-A2) and Data (D0-D7) must be set
_CF_Write:
   rcall _CF_Check_ready
   cbi CF_Control_Out, CF_WE            ' WE Line to Low
   nop                                  ' 600 ns at 3.3 V VCC is enough
   nop
   sbi CF_Control_Out, CF_WE            ' WE Line to High
   ret

'------------------------------------------------------------------------------
' Read 1 Byte from the CF
' Register address must be set.
_CF_Read:
   rcall _CF_Check_Ready
   ldi _temp1, &H00                     ' change data-port to Input
   !out Cf_Data_DDR , _temp1
   cbi CF_Control_out, CF_OE            ' OE Line to Low
   nop
   nop
   nop
   in rData,CF_Data_in                  ' Read Byte
   sbi CF_Control_Out, CF_OE            ' OE - Line to High
   ldi _temp1, &HFF                     ' change Data-port back to OUTPUT
   !out CF_Data_DDR, _temp1
   ret

'------------------------------------------------------------------------------
' Set register address, and leave pins 3 - 7 unchanged
' two entry-points to routine
' 1: CF_Set_RegAddr: Register address must passed in rCF_Reg
' 2: CF_Set_RegAddrData: register address is Data
_CF_Set_RegAddrData:
   ldi rCF_Reg, Data_Reg
_CF_Set_RegAddr:
   in _temp1, CF_Addr_Out               ' get current output at Port
   andi _temp1, &B11111000              ' CF-Address-bits masked out
   or _temp1, rCF_Reg                   ' add CF-Address with OR
   !out CF_Addr_Out, _temp1
   ret


' -----------------------------------------------------------------------------
' Read Sector(s) from CF-Card to SRAM
' Entry with following parameters set:
' Register rCF_SectorCount: Count of Sector(s) to transfer
' Register X: Pointer to Sectornumber (LONG)
' Register Z: SRAM-Address, where the data to transfer
_CF_Read_Sector:
   rcall _CF_Set_CntLBA                 ' LBA-Sector to CF
   ldi rData, CF_Read_Sec               ' read command
   rcall _CF_Write_CommandReg           ' to Compactflash
_CF_Read_Sector_LBASet:
   rcall _CF_Set_RegAddrData            ' turn register-address to data
   clr rByteCount_Low                   ' Low-Byte of Byte-Count always zero
   lsl rByteCount_High                  ' Change Sector-Count to HighByte of Transferlenght
_CF_Read_Sector1:
   rcall _CF_Read                       ' read 1 Byte
   st z+, rData
   dec rByteCount_Low
   brne  _CF_READ_SECTOR1
   dec rByteCount_High
   brne  _CF_READ_SECTOR1               ' all bytes read?
   Ret


' -----------------------------------------------------------------------------
' write Sector(s) to CF-Card
' Entry with following parameter set:
' Register rCF_SectorCount: Count of sector(s) to transfer
' Register X: Pointer to Sectornumber (LONG)
' Register Z: SRAM-Address, at which Data to transfer starts
_CF_Write_Sector:
   rcall _CF_Set_CntLBA                 ' LBA-Sector to CF
   ldi rData, CF_Write_Sec              ' write command
   rcall _CF_Write_CommandReg           ' to compactflash
_CF_Write_Sector_LBASet:
   rcall _CF_Set_RegAddrData            ' turn register-address to data
   clr rByteCount_Low                   ' Low-Byte of Byte-Count alwas zero
   lsl rByteCount_High                  ' Change Sector-Count to HighByte of Transferlenght
_CF_Write_Sector1:
   ld rData, z+
   !out CF_Data_out, rData              ' Byte to data port
   rcall _CF_Write                      ' force CF to read byte
   dec rByteCount_low
   brne  _CF_Write_SECTOR1
   dec rByteCount_High
   brne  _CF_Write_SECTOR1              ' last byte written?
   Ret

'------------------------------------------------------------------------------
' write a value to a specified register address, value is passed in rData
' two different entry points
' 1: CF_Write_CommandReg: write value to command-register (default)
' 2: CF_Write_Reg: Register passed in rCF_Reg
_CF_Write_CommandReg:
   ldi rCF_Reg, Command_Reg             ' Default register: Command
_CF_Write_Reg:
   !out CF_Data_out, rData              ' set data to data port
   rcall _CF_Set_RegAddr                ' set register address
   rjmp _CF_Write                       ' force CF to accept register and data

' -----------------------------------------------------------------------------
' Write count of sector(s) (read or write) and Sectornumber (LBA) to CF-Card
' following parameter must be set:
' Register CF_SectorCount: Count of Sector(s) (max &7F)
' Register X: Pointer to sectornumber
'
_CF_Set_CntLBA:
   ldi rCF_Reg, Sec_Cnt_Reg             ' Start with Sector-Count Register in CF (2)
   mov rData, rCF_SectorCount           ' prepare for output
   rjmp _CF_Set_LBA2
_CF_Set_LBA1:
   ld rData, X+                         ' load next byte of sectornumber
_CF_Set_LBA2:
   rcall _CF_Write_Reg                  ' set register-address
   inc rCF_Reg                          ' set to next register address
   cpi rCF_Reg, 6
   brmi  _CF_Set_LBA1                   ' Reg. 6 reached? (LBA/Disk/Header)
   ld rData, X+                         ' need special handling
   andi rData, &B00001111               ' mask upper nibble (LBA-Sign and drive)
   ori rData, &HE0                      ' set to LBA
   rjmp _CF_Write_Reg                   ' write to CF; incl Ret

' -----------------------------------------------------------------------------
' Setup the pins needed for the CF-Card
_CF_Setup:
   ' Data port to OUTPUT
   ldi _temp1, &H00                     ' all Data pins to low
   !out CF_Data_Out, _temp1

   ldi _temp1, &HFF
   !Out CF_Data_DDR , _temp1            ' Data pins to output

   ' Controlport: prepare 6 pins, leave other two unchanged
   in _temp1, CF_Control_Out            '
   andi _temp1, CF_Control_Dir_Mask     '
   ori _temp1, CF_Control_Init
   !Out CF_Control_Out, _temp1

   in _temp1, CF_Control_DDR            ' read direction of pins at control port
   andi _temp1, CF_Control_Dir_Mask     ' mask out used pins
   ori _temp1, CF_Control_Direction     ' set direction in and Out
   !Out CF_Control_DDR, _temp1          ' set new direction configuration

   ' Address port: attention: adjust if not on Port C at ATMega103
   ' ATMega103 Port C have only output, so here no configuration is necessary
   'in _temp1, CF_ADDR_DDR
   'ori _temp1, &B00000111
   '!Out CF_Addr_DDR, _temp1
   waitms 1
   rjmp _CF_Reset

'------------------------------------------------------------------------------
' force CF-Card to a Hardware-reset
_CF_Reset:
   sbi CF_Control_Out, CF_Reset
   waitms 1
   cbi CF_Control_Out, CF_Reset
   waitms 500
   ret

'------------------------------------------------------------------------------
' Checks, whether Card is plugged in: Pin CD1 is LOW
' if OK r24 = 1; otherwise 0
_CF_CheckCard:
   ldi r24, 1
   sbic CF_Control_In, CF_CD1           ' flashcard plugged in?
   ldi r24, 0
   ret

nop
nop
nop   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
9191成人精品久久| 97精品国产露脸对白| 亚洲视频小说图片| 久久久久综合网| 精品日韩一区二区三区| 9191久久久久久久久久久| 欧美日韩精品欧美日韩精品一| 成人性生交大合| 高清成人在线观看| www.欧美精品一二区| 99精品视频在线观看| caoporn国产精品| 99精品视频一区二区| 色哟哟欧美精品| 欧美三级电影一区| 欧美一级高清大全免费观看| 日韩视频一区在线观看| 欧美不卡一二三| 国产农村妇女毛片精品久久麻豆| 国产精品情趣视频| 亚洲人成网站影音先锋播放| 一区二区三区精品视频在线| 视频在线观看91| 国产精品一区二区在线看| 丁香激情综合五月| 在线观看精品一区| 日韩免费福利电影在线观看| 国产欧美一区二区三区网站| 亚洲另类在线制服丝袜| 免费人成在线不卡| 成人av片在线观看| 欧美日本精品一区二区三区| 精品国产免费久久| 亚洲精品国产无天堂网2021| 日本欧美肥老太交大片| 成人av集中营| 日韩欧美在线一区二区三区| 国产精品久久看| 日韩成人免费电影| 成人99免费视频| 91精品国产麻豆国产自产在线| 国产日韩欧美制服另类| 亚洲妇熟xx妇色黄| 不卡一二三区首页| 日韩视频一区在线观看| 亚洲曰韩产成在线| 成人午夜碰碰视频| 日韩欧美一区二区三区在线| 亚洲免费观看高清在线观看| 精品一区二区免费看| 欧美日韩在线观看一区二区| 久久综合九色综合欧美亚洲| 亚洲国产精品精华液网站| 成人精品小蝌蚪| 久久先锋影音av| 婷婷成人激情在线网| 色婷婷狠狠综合| 中文字幕的久久| 国产精品一区二区久激情瑜伽| 欧美挠脚心视频网站| 亚洲人xxxx| www.欧美色图| 国产精品毛片久久久久久| 精品一二线国产| 日韩一本二本av| 日韩电影网1区2区| 欧美日韩精品欧美日韩精品一 | 国产色产综合产在线视频| 天天综合天天做天天综合| 日本精品视频一区二区| 国产精品激情偷乱一区二区∴| 国产中文一区二区三区| 日韩小视频在线观看专区| 亚洲va欧美va天堂v国产综合| aaa欧美大片| 成人欧美一区二区三区小说| 成人黄色大片在线观看| 日本一二三不卡| 成人午夜看片网址| 亚洲视频1区2区| 99视频精品免费视频| 蜜臀av性久久久久蜜臀aⅴ| 99久久综合狠狠综合久久| 亚洲图片你懂的| 色婷婷久久综合| 亚洲超碰97人人做人人爱| 欧美日韩精品一区视频| 日韩成人av影视| 欧美一区二区三区四区高清| 天天做天天摸天天爽国产一区| 欧美精品在线一区二区三区| 奇米精品一区二区三区在线观看 | 欧美视频第二页| 亚洲成av人在线观看| 337p亚洲精品色噜噜噜| 亚洲福利视频一区| 欧美精品日韩一本| 日韩精品一二三区| 日韩视频永久免费| 高清国产午夜精品久久久久久| 国产精品少妇自拍| 在线视频观看一区| 免费成人在线视频观看| 国产欧美精品一区二区三区四区 | 欧美国产精品专区| 色噜噜狠狠色综合欧洲selulu| 亚洲综合久久久久| 久久夜色精品一区| 色天使色偷偷av一区二区| 日韩国产欧美三级| 欧美韩国一区二区| 欧美三级视频在线观看| 久久丁香综合五月国产三级网站| 国产亚洲精品中文字幕| 欧美在线观看一二区| 韩国av一区二区三区四区| 一区二区视频免费在线观看| 日韩网站在线看片你懂的| 91在线视频播放地址| 日韩电影在线一区二区三区| 国产精品免费久久| 日韩一区二区麻豆国产| av在线一区二区三区| 麻豆国产精品一区二区三区| 亚洲欧美视频在线观看| 亚洲精品一区二区三区福利| 91行情网站电视在线观看高清版| 久久疯狂做爰流白浆xx| 亚洲福中文字幕伊人影院| 国产精品视频第一区| 精品奇米国产一区二区三区| 欧美视频中文一区二区三区在线观看| 精品无人码麻豆乱码1区2区 | 国产性色一区二区| 7799精品视频| 日本伦理一区二区| 成人黄色小视频在线观看| 久草在线在线精品观看| 亚洲国产成人高清精品| 亚洲天天做日日做天天谢日日欢| 欧美精品一区二区久久婷婷| 欧美美女网站色| 在线观看日韩国产| 91视视频在线直接观看在线看网页在线看 | 欧美成人伊人久久综合网| 欧美伊人久久久久久久久影院| 懂色av中文一区二区三区| 捆绑调教一区二区三区| 全部av―极品视觉盛宴亚洲| 午夜视频在线观看一区二区| 一区二区三区91| 亚洲区小说区图片区qvod| 国产精品成人在线观看| 国产精品你懂的在线欣赏| 国产亚洲欧美一区在线观看| 久久久久成人黄色影片| 欧美va亚洲va国产综合| 欧美sm极限捆绑bd| 欧美成人一区二区三区| 精品国产91久久久久久久妲己 | 国产在线看一区| 国产一区视频导航| 精品一二三四在线| 高清shemale亚洲人妖| 成人精品免费网站| 99久久精品久久久久久清纯| 99久久99久久久精品齐齐| 一本到不卡免费一区二区| 欧美日韩中文一区| 91精品国产高清一区二区三区蜜臀| 欧美日韩一区久久| 欧美大片国产精品| 久久久亚洲综合| 亚洲同性同志一二三专区| 亚洲一区二区三区中文字幕在线| 亚洲va在线va天堂| 精品亚洲欧美一区| 91啦中文在线观看| 欧美日韩一区二区在线观看| 欧美成人福利视频| 最新日韩av在线| 天天av天天翘天天综合网| 精品一区二区在线免费观看| 国产一区二区成人久久免费影院| 国产盗摄一区二区| 色综合天天综合网国产成人综合天 | 国产成人aaaa| 欧日韩精品视频| 欧美精品一区二区三区久久久| 国产精品麻豆视频| 石原莉奈一区二区三区在线观看| 韩国v欧美v日本v亚洲v| 91视频91自| 精品日韩一区二区三区免费视频| 国产精品高潮呻吟| 蜜桃av一区二区| 91原创在线视频| 精品美女在线播放| 一区二区三区欧美在线观看| 国内精品久久久久影院色|