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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? flashcarddrive.bas

?? MSP430最基本的應(yīng)用開發(fā)實例
?? 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   

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜电影网| 亚洲蜜臀av乱码久久精品| 亚洲1区2区3区视频| 在线观看av不卡| 亚洲一区视频在线| 欧美日韩一级视频| 成人亚洲一区二区一| 国产欧美日韩精品在线| 成人一区二区三区视频在线观看| 久久久久久久久久久99999| 国产99久久精品| 国产精品久线观看视频| 色视频一区二区| 肉丝袜脚交视频一区二区| 日韩免费性生活视频播放| 高清不卡在线观看av| 亚洲精品欧美综合四区| 欧美日韩五月天| 激情五月激情综合网| 亚洲国产岛国毛片在线| 在线视频国内自拍亚洲视频| 天天影视色香欲综合网老头| 精品国产免费人成在线观看| 成人一道本在线| 亚洲国产精品自拍| 久久久久久久久99精品| 色综合久久中文综合久久97 | 色综合久久久久久久| 亚洲一区二区成人在线观看| 91精品国产综合久久精品性色| 国产裸体歌舞团一区二区| 亚洲欧美日韩系列| 精品福利在线导航| 日本高清无吗v一区| 久久国产三级精品| 亚洲免费观看高清在线观看| 91精品欧美久久久久久动漫| 国产高清不卡二三区| 午夜免费欧美电影| 国产精品福利一区二区| 91麻豆精品91久久久久久清纯| 成人教育av在线| 日本成人中文字幕在线视频| 综合久久久久久| 久久久久国产一区二区三区四区| 欧美吞精做爰啪啪高潮| 粉嫩嫩av羞羞动漫久久久| 日本成人超碰在线观看| 伊人色综合久久天天| 国产嫩草影院久久久久| 欧美一区二区三区男人的天堂| www.66久久| 国产精品资源站在线| 午夜亚洲福利老司机| 国产精品盗摄一区二区三区| 欧美va亚洲va香蕉在线| 欧美亚洲动漫精品| 色综合中文字幕| 欧美三级视频在线| 成人午夜伦理影院| 韩国一区二区在线观看| 日本欧美一区二区三区| 亚洲国产精品久久人人爱| 亚洲免费观看高清| 国产精品乱码一区二三区小蝌蚪| 亚洲精品一区二区三区四区高清| 8x福利精品第一导航| 欧美最猛黑人xxxxx猛交| 色综合久久综合中文综合网| 岛国一区二区在线观看| 国产综合一区二区| 精品一区二区免费| 狠狠色丁香九九婷婷综合五月| 亚洲成a天堂v人片| 成人aa视频在线观看| 国产精品自拍一区| 国产一区福利在线| 国产剧情av麻豆香蕉精品| 久久国内精品自在自线400部| 日产欧产美韩系列久久99| 五月婷婷激情综合| 日韩精品五月天| 免费久久精品视频| 麻豆精品蜜桃视频网站| 免费观看在线综合| 久久狠狠亚洲综合| 国产一区二区三区美女| 国产精品1区2区| 国产suv一区二区三区88区| 国产馆精品极品| 91视视频在线观看入口直接观看www| 99久久国产综合精品麻豆| 成人福利视频在线看| 91同城在线观看| 在线视频观看一区| 欧美日韩视频在线第一区 | 亚洲成a人v欧美综合天堂下载| 亚洲精选在线视频| 亚洲一区二区三区免费视频| 亚洲国产综合色| 日韩国产精品久久久久久亚洲| 久久超级碰视频| 国产精品99久久久久| 99久久精品国产网站| 欧美亚洲综合色| 欧美一区二区免费| 国产午夜精品理论片a级大结局| 国产精品不卡视频| 夜夜嗨av一区二区三区四季av | 亚洲第一av色| 极品瑜伽女神91| 99麻豆久久久国产精品免费优播| 欧美日韩免费一区二区三区| 日韩欧美一级二级三级久久久| 欧美激情在线一区二区三区| 亚洲免费av观看| 久久精品国产一区二区三| 99精品在线观看视频| 91精品国产综合久久国产大片| 久久综合九色综合97婷婷女人| 亚洲女子a中天字幕| 老色鬼精品视频在线观看播放| 99国产欧美另类久久久精品| 欧美一区二区三区视频在线观看| 国产精品欧美久久久久无广告| 午夜精品久久久久久久久久| 国产一区二区三区国产| 在线免费av一区| 精品动漫一区二区三区在线观看| 一色屋精品亚洲香蕉网站| 美女诱惑一区二区| 色激情天天射综合网| 国产三级精品在线| 日本怡春院一区二区| 色综合视频一区二区三区高清| 精品av久久707| 性欧美大战久久久久久久久| 99久久久久免费精品国产 | 在线亚洲免费视频| 亚洲国产精品成人久久综合一区| 污片在线观看一区二区| www.欧美日韩| 久久精品网站免费观看| 视频一区二区三区入口| 91在线观看免费视频| 国产亚洲自拍一区| 热久久久久久久| 欧美综合久久久| 亚洲女爱视频在线| 成人午夜视频在线| 久久这里只有精品6| 轻轻草成人在线| 欧美日韩国产片| 一区二区三区久久| 色哟哟一区二区| 亚洲色图在线视频| 91在线国产观看| 国产精品久久毛片| 成人毛片视频在线观看| 久久久久久久久97黄色工厂| 激情久久久久久久久久久久久久久久| 在线不卡免费欧美| 亚洲超丰满肉感bbw| 欧美视频一区二区三区在线观看 | 国产网红主播福利一区二区| 久久99国产精品免费网站| 91精品国产欧美日韩| 青青草视频一区| 91精品免费在线观看| 免费高清在线视频一区·| 7777精品伊人久久久大香线蕉超级流畅 | 久久精品国产成人一区二区三区| 欧美午夜片在线看| 亚洲一区二区av在线| 欧美日韩美少妇| 婷婷成人综合网| 欧美一区二区三区四区五区| 美女一区二区三区| 精品久久久久久久久久久久久久久| 捆绑变态av一区二区三区| 日韩无一区二区| 韩国欧美一区二区| 久久久久久久国产精品影院| 成人开心网精品视频| 亚洲欧美日韩电影| 欧美日韩国产综合草草| 日韩国产高清在线| 欧美成人高清电影在线| 成人免费高清视频| 一区二区三区免费网站| 日韩一区国产二区欧美三区| 久久草av在线| 一区二区中文视频| 欧美日本乱大交xxxxx| 蜜乳av一区二区| 国产欧美一区二区精品久导航 | 欧美日韩精品福利| 麻豆国产精品一区二区三区| 久久久久久久久久久黄色| 99久久精品一区|