реклама на сайте
подробности

 
 
> помогите разобратся, с исходником файловой системы
extreme
сообщение May 25 2010, 23:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 13-03-10
Пользователь №: 55 930



вот нашол код в исходнике что он означает ,а точнее код который выделен.
исходник используется в прошитом мк к нему подключена флеш карта.
Код
;---------------------------------------------------------;
; FAT16 file system
;---------------------------------------------------------;

file_init:
    clr    T14L;0
    stsi    CurrSect0+2, -1;Read MBR to Buff0
    ldiw    A, 0    ;
    ldi    BH, 0    ;
     rcall    file_get_sect0;
    rjne    fsi_err    ;/
    inc    T14L;1
    ldiw    Y, Buff0+0x1C2;Chekc MBR sign (55AA)
    lddw    A, Y+60    ;
    subiw    A, 0xAA55;
    rjne    mmi_err    ;/
    [i]inc    T14L;2
    ld    AL, Y    ;Check if 1st patition is FAT16.
    cpi    AL, 0x06;
    rjne    fsi_err    ;/


Модератор. Формулируйте названия своих тем более полно и осмысленно!

Сообщение отредактировал rezident - May 26 2010, 12:55
Причина редактирования: Нарушение п.2.1в Правил форума. Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
extreme
сообщение May 31 2010, 23:04
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 13-03-10
Пользователь №: 55 930



люди помогите пожалуста.выбивает noitem
CODE
;----------------------------------------------------------------------------;
; Laser Display Controller ©ChaN, 2006
;----------------------------------------------------------------------------;

.include "m64def.inc"
.include "avr.inc"
.include "ldp.inc"

;----------------------------------------------------------;
; SRAM Area

.dseg
.org RAMTOP100
Buff0: .byte 512 ;File system working buffer
Buff1: .byte 512 ;File buffer1
.byte 512 ;File buffer2


FatBase: .byte 3 ; FAT start sector
DirBase: .byte 3 ; Directory start sector
DataBase: .byte 3 ; Data start sector
DirNum: .byte 2 ; Number of root directory entry
ClstSize: .byte 1 ; Cluster size (sectors)

CurrSect0: .byte 3 ; Current sector in Buff0
DirIndex: .byte 2 ; Directory index (file_dir_)
DirClst: .byte 2 ; Directory cluster number (0:Null, 1:Root, >1:clst#)
DirSect: .byte 3 ; Current sector
DirInClst: .byte 1 ; Current sector in currrent cluster

FileName: .byte 11 ; File name buffer for file_open



; File control structure 1
File1: .byte 18 ; 0[4]: File ptr
File2: .byte 18 ; 4[4]: File size
; 8[3]: Current sector
; 11[1]: Current sector in currrent cluster
; 12[2]: Current cluster
; 14[2]: Start cluster
; 16[2]: Ptr to file buffer


LineBuf: .byte 40 ;Command Input buffer
DumpAdr: .byte 3
RxBuff: .byte 2+32 ;Serial Receiving Buffer

KeyCmd: .byte 3 ;Key input buffer
Lcdp: .byte 1 ;LCD cursor position

VectFifo: .byte 2+1 ;Vector FIFO buffer {RPtr, Count}

Index: .byte 2 ;Current, Items
ListPtr: .byte 2 ;
List: .byte 2000 ;File List


;----------------------------------------------------------;
; Program Code

.cseg
; Interrupt Vectors (ATmega64)
jmp reset ; Reset
jmp 0 ; Extrenal INT0
jmp 0 ; External INT1
jmp 0 ; External INT2
jmp 0 ; External INT3
jmp 0 ; External INT4
jmp 0 ; External INT5
jmp 0 ; External INT6
jmp 0 ; External INT7
jmp 0 ; TC2 COMP
jmp 0 ; TC2 OVF
jmp 0 ; TC1 CAPT
jmp isr_tc1_coma ; TC1 COMPA
jmp 0 ; TC1 COMPB
jmp 0 ; TC1 OVF
jmp isr_tc0_com ; TC0 COMP
jmp 0 ; TC0 OVF
jmp 0 ; SPI,STC
jmp isr_usart0_rx ; USART0 RX
jmp 0 ; USART0 UDRE
jmp 0 ; USART0 TX
jmp 0 ; ADC
jmp 0 ; EE READY
jmp 0 ; ANALOG COMP
jmp 0 ; TC1 COMPC
jmp 0 ; TC3 CAPT
jmp 0 ; TC3 COMPA
jmp 0 ; TC3 COMPB
jmp 0 ; TC3 COMPC
jmp 0 ; TC3 OVF
jmp 0 ; USART1 RX
jmp 0 ; USART1 UDRE
jmp 0 ; USART1 TX
jmp 0 ; TWI
jmp 0 ; SPM READY


.include "LDP_MMC.ASM" ; MMC control and FAT16 file system
.include "LDP_MON.ASM" ; Monitor
.include "LDP_UI.ASM" ; Key, Serial, LCD


;----------------------------------------------------------;
; Initailize peripherals and work area

reset:
clr _0 ;Zero reg.
ldiw Z, RAMEND ;SP
outw SP, Z ;/
ldiw X, 4096-1 ;Clear RAM
st -Z, _0 ;
sbiw XL, 1 ;
brne PC-2 ;/

outi PORTA, 0b01111111 ;Port A
outi DDRA, 0b01110000 ;

outi PORTB, 0b11111001 ;Port B
outi DDRB, 0b00000111 ;

outi PORTD, 0b11000000 ;Port D
outi DDRD, 0b00111111 ;

outi PORTE, 0b11111111 ;Port E
outi DDRE, 0b00110010 ;

stsi PORTF, 0b11111111 ;Port F
stsi PORTG, 0b11111 ;Port G

ldi AL, SYSCLK/16/BPS-1 ;Start USART0
out UBRR0L, AL ;
outi UCSR0B, 0b10011000 ;/

outi SPCR, 0b01011000 ;Enable SPI
outi SPSR, 0b00000001 ;/

outi OCR0, 156-1 ;Timer0: 100Hz interval
outi TCCR0, 0b00001111 ;/

outi TIMSK, 0b00010010 ;Enable timer interrupts

sei

rcall lcd_init ;Initialize LCD

ldi AL, 13 ;200ms
ldiw X, 0 ;
sbiw XL, 1 ;
brne PC-1 ;
dec AL ;
brne PC-5 ;/

rcall pps_stop ;Initialize DAC

rcall mmc_init ;Initialize MMC
breq PC+4 ;
ldiw Z, die_mmcerr*2 ; "MMC Err #"
rjmp die ;/

rcall file_init ;Initialize file system
breq PC+4 ;
ldiw Z, die_fserr*2 ; "FS Errr #"
rjmp die ;/


;----------------------------------------------------------;
; Main

main_index:
ldiw D, 0
rcall file_dir_init ;Initialize directory index
rcall clr_index
mi_l1:
rcall file_dir_next ;Get next file
rjne mi_err ;/
cpw Z, _0 ;No more?
breq mi_l2 ;/
rcall chk_index ;Check if *.txt
brne mi_l1 ;/
rcall add_index ;Add it to index list
brne mi_l1 ;/
mi_l2:
rcall disp_item
mi_l3:
rcall chk_online
rcall get_key_nw
breq mi_l3
sbrc AL, K_NEXT
rcall idx_next
sbrc AL, K_PREV
rcall idx_prev
sbrc AL, K_SET
rjmp main_list
sbrc AL, K_CLR
rjmp main_index
rjmp mi_l2


main_list:
rcall get_item
ldiw Y, File1
ldiw A, Buff1
rcall file_open
cpw Y, _0
rjeq mi_err
rcall clr_index
ml_l1:
ldiw Z, LineBuf ;Get next line
rcall file_gets ;
brne ml_l2 ;/
lds AL, LineBuf ;Check if valid line
cpi AL, '0' ;
brcs ml_l1 ;/
rcall add_index ;Add it to index list
brne ml_l1 ;/
ml_l2:
rcall disp_item_file
ml_l3:
rcall get_key_nw
breq ml_l3
sbrc AL, K_NEXT
rcall idx_next
sbrc AL, K_PREV
rcall idx_prev
sbrc AL, K_CLR
rjmp main_index
sbrs AL, K_SET
rjmp ml_l2
ml_l4:
rcall get_item
ldiw Y, File1
ldiw A, Buff1
rcall file_open
cpw Y, _0
breq ml_l3
rcall play
sbrc AL, K_NEXT
rjmp pi_next
sbrc AL, K_PREV
rjmp pi_prev
rjmp ml_l3
pi_next: rcall idx_next
rcall disp_item_file
rjmp ml_l4
pi_prev: rcall idx_prev
rcall disp_item_file
rjmp ml_l4


disp_item_file:
rcall lcd_clear
ldsw A, Index
cp AL, AH
brcc di_noitem
inc AL
rcall lcd_prin_val
ldi AL, ':'
rcall lcd_wr_chr
rcall get_item
ldiw Y, File1
ldiw A, Buff1
rcall file_open
brne dif_nofile
cpw Y, _0
breq dif_nofile
ldiw Z, LineBuf
ldiw C, 32
rcall file_read
brne dif_ivd
cpi CL, 32
brne dif_ivd
ldiw Z, LineBuf
lddw A, Z+0
cpi AL, 'V'
brne dif_ivd
cpi AH, 'D'
brne dif_ivd
adiw ZL, 16
std Z+14, _0
rcall lcd_mprin
ret
dif_nofile:
ldiw Z, id_nofile*2
rjmp lcd_fprin
dif_ivd:
ldiw Z, id_invalid*2
rjmp lcd_fprin


disp_item:
rcall lcd_clear
ldsw A, Index
cp AL, AH
brcc di_noitem
inc AL
rcall lcd_prin_val
ldi AL, ':'
rcall lcd_wr_chr
rcall get_item
rcall lcd_mprin
ret
di_noitem:
ldiw Z, id_noitem*2
rjmp lcd_fprin


idx_next:
ldsw B, Index
inc BL
cp BL, BH
brcc PC+3
sts Index, BL
ret

idx_prev:
lds BL, Index
subi BL, 1
brcs PC+3
sts Index, BL
ret

get_item:
lds DL, Index
ldiw Z, List
subi DL, 1
brcc PC+2
ret
ld AL, Z+
cpi AL, 0
brne PC-2
rjmp PC-6


add_index:
ldiw Z, LineBuf
ldsw X, ListPtr
ldiw C, ListPtr+2000
cpw X, C
breq PC+10
ld AL, Z+
st X+, AL
cpi AL, 0
brne PC-6
lds AL, Index+1
inc AL
sts Index+1, AL
stsw ListPtr, X
ret


clr_index:
stsw Index, _0
ldiw A, List
stsw ListPtr, A
ret


chk_index:
ldd AL, Z+8 ;*.TXT
cpi AL, 'T' ;
brne ci_ret ;
ldd AL, Z+9 ;
cpi AL, 'X' ;
brne ci_ret ;
ldd AL, Z+10 ;
cpi AL, 'T' ;
brne ci_ret ;/
ldiw X, LineBuf
ldi CL, 0
ld AL, Z+
inc CL
cpi AL, ' '+1
brcs PC+2
st X+, AL
cpi CL, 8
brne PC+3
ldi AL, '.'
st X+, AL
cpi CL, 11
brne PC-10
st X+, _0
ci_ret: ret


mi_err:
clr T14L
ldiw Z, die_ioerr*2
rjmp die


id_noitem:
.db "<no item>",0
id_nofile:
.db "<no file>",0
id_invalid:
.db "<invalid>",0


;----------------------------------------------------------;
; Play a vector file

play:
ldiw Z, Buff1 ;Get file header
ldiw C, 512 ;
rcall file_read_block ;
rjne play_break ;/
ldiw A, 32 ;Check if the file is a valid frame data
cpw C, A ;
rjcs play_break ;
lddw A, Z+0 ;
cpi AL, 'V' ;
ldi AL, 'D' ;
cpc AH, AL ;
rjne play_break ;/
sts VectFifo+2, _0 ;Start vector interruput
lddw A, Z+4 ;
rcall pps_start ;/
play_l1:
ldiw A, 0 ;Seek to top of vector data
ldiw B, 0 ;
rcall file_seek ;
brne play_break ;/
lds AL, VectFifo+2 ;Wait for FIFO empty
cpi AL, 0 ;
brne PC-3 ;/
ldiw Z, Buff1 ;Load first data block (with 32 byte header)
ldiw C, 512 ;
rcall file_read_block ;
brne play_break ;/
lsrw C ;Initialize FIFO
lsrw C ;
subi CL, 32/4 ;
ldiw A, Buff1+32 ;
stsw VectFifo+0, A ;
sts VectFifo+2, CL ;/
play_l2:
rcall chk_rcvr ;Check if any data or key is received
brne play_break ;
rcall get_key_nw ;
brne play_exit ;/
lds AL, VectFifo+2 ;Wait for data size in FIFO < 128 pts
cpi AL, 512/4 ;
brcc play_l2 ;/
addi ZH, high(512) ;WritePtr++
cpi ZH, high(Buff1+512*2) ;
brcs PC+2 ;
subi ZH, high(512*2) ;/
ldiw C, 512 ;Load next data block
rcall file_read_block ;
brne play_break ;/
lsrw C ;Number of sample ++
lsrw C ;
cli ;
lds AL, VectFifo+2 ;
add AL, CL ;
sts VectFifo+2, AL ;
sei ;/
cpi CL, 512/4 ;End of block?
breq play_l2 ;/
rjmp play_l1 ;Is end of block

play_break:
rcall receive
clr AL
play_exit:
push AL
rcall pps_stop
pop AL
ret



;----------------------------------------------------------;
; Point output driver

pps_start:
cpi AL, 250 ;Clip A between 250-30000
cpc AH, _0 ;
brcs PC+2 ;
ldi AL, 250 ;
ldiw B, 30000 ;
cpw A, B ;
brcs PC+2 ;
movw AL, BL ;/
ldi BL, byte1(SYSCLK) ;CL:B = SYSCLK
ldi BH, byte2(SYSCLK) ;
ldi CL, byte3(SYSCLK) ;/
clrw T0 ;CL:B /= A
ldi CH, 24 ;
lslw B ;
rol CL ;
rolw T0 ;
cpw T0, A ;
brcs PC+4 ;
subw T0, A ;
inc BL ;
dec CH ;
brne PC-12 ;/
outw TCNT1, _0
outw OCR1A, B
outi TCCR1B, 0b00001001
cbi PORTE, OUTEN
ret


pps_stop:
out TCCR1B, _0 ;Stop PPS
ldiw A, 2048
ldiw B, 2048
rcall set_vector
ret


; Vector output interrupt

isr_tc1_coma:
push AL
in AL, SREG
pushw A
pushw B
pushw X

lds AL, VectFifo+2 ;Check if vector data is available
subi AL, 1 ;
brcc PC+3 ;
sbi PORTE, LDMOD ; Stop laser if under-flow occured
rjmp vo_ret ; /
sts VectFifo+2, AL ;/

ldsw X, VectFifo+0 ;X = Read ptr
ldw B, X+ ;Get vector
ldw A, X+ ;
rcall set_vector ;/
ldiw A, Buff1+512*2 ;Next read ptr
cpw X, A ;
brcs PC+2 ;
subi XH, high(512*2) ;/
stsw VectFifo+0, X ;Restore read ptr

vo_ret: popw X
popw B
popw A
out SREG, AL
pop AL
reti


;----------------------------------------------------------;
; Vector output functions
;
; Call: A = vector Y (0..4095)
; B = vector X (0..4095), BH.7 = Mod

set_vector:
andi AH, 0b00001111 ; Send Y value into buffer
ori AH, 0b00010000
cbi PORTB, DACS
rcall send_spi
mov AH, AL
rcall send_spi
sbi PORTB, DACS

mov AH, BH ; Send X value and latch both channels
andi AH, 0b00001111
ori AH, 0b10000000
cbi PORTB, DACS
rcall send_spi
mov AH, BL
rcall send_spi
sbi PORTB, DACS

sbrc BH, 7 ;Set modulation
cbi PORTE, LDMOD ;
sbrs BH, 7 ;
sbi PORTE, LDMOD ;/

ret

send_spi:
out SPDR, AH
ldi AH, 12/3
dec AH
brne PC-1
ret




после нажатия set выбивает IO Err
CODE
;---------------------------------------------------------------;
; Space, CRLF

crlf:
ldi AL, 13
rcall xmit
ldi AL, 10
rjmp xmit

space:
ldi AL,' '


;---------------------------------------------------------------;
; UART control driver

xmit: ; Transmit AL
sbis UCSR0A, UDRE0
rjmp PC-1
out UDR0, AL
ret

chk_rcvr:
ldsw A, RxBuff
cp AL, AH
ret



receive:; Receive a char into AL. (ZR=no data)
ldiw Y, RxBuff
cli
ldd AH, Y+0
ldd AL, Y+1
cp AH, AL
breq PC+9
mov AL, AH
inc AL
andi AL, 31
std Y+0, AL
add YL, AH
adc YH, _0
ldd AL, Y+2
clz
sei
ret


isr_usart0_rx:
push AL
in AL, SREG
push BL
pushw A
pushw Y
in BL, UDR0
ldiw Y, RxBuff
ldd AL, Y+0
ldd AH, Y+1
inc AH
andi AH, 31
cp AH, AL
breq PC+7
std Y+1, AH
dec AH
andi AH, 31
add YL, AH
adc YH, _0
std Y+2, BL
popw Y
popw A
pop BL
out SREG, AL
pop AL
reti



;----------------------------------------------------------;
; Key driver


get_key:
lds AL, KeyCmd
andi AL, K_MASK
breq get_key
get_key_nw:
lds AL, KeyCmd
andi AL, K_MASK
breq PC+8
sts KeyCmd, _0
lds AH, KeyCmd+1
andi AH, K_MASK
swap AH
or AL, AH
ret


isr_tc0_com:
push T0L
in T0L, SREG
sei
pushw A

in AL, PINF
com AL
andi AL, K_MASK
lds AH, KeyCmd+2
sts KeyCmd+2, AL
cp AL, AH
brne isc_0e
lds AH, KeyCmd+1
sts KeyCmd+1, AL
eor AH, AL
and AH, AL
breq isc_0e
sts KeyCmd+0, AH

isc_0e:
popw A
out SREG, T0L
pop T0L
reti



;-------------------------------------------------------;
; Die with dieing message
;
;Call: Z = Pointer to the message
; T14L = Error code (0..9)

die:
rcall lcd_fprin_clr
mov AL, T14L
rcall lcd_prin_val
rjmp PC


die_mmcerr: .db "MMC Err ", 0
die_fserr: .db "FS Err ", 0
die_ioerr: .db "IO Err ", 0



;----------------------------------------------------------;
; LCD control
;
; Data:PD[3..0], RS:PD4, E:PD5
;

.equ LCDRS = PD4
.equ LCDEN = PD5


lcd_init:
rcall delay_5ms
rcall delay_5ms
rcall delay_5ms
cbi PORTD, LCDRS ; RS=0
ldi AL, 0b00110000
rcall lcd_wr_n
rcall delay_5ms
ldi AL, 0b00110000
rcall lcd_wr_n
rcall delay_5ms
ldi AL, 0b00110000
rcall lcd_wr_n
rcall delay_5ms
ldi AL, 0b00100000
rcall lcd_wr_n
ldi AL, 0b00101000 ;DL=0, N=1, F=0
rcall lcd_wr_cmd
ldi AL, 0b00001100 ;D=1, C=0, B=0
rcall lcd_wr_cmd
ldi AL, 0b00000110 ;I/D=1, S=0
rcall lcd_wr_cmd
rjmp lcd_clear



lcd_prin_val:
clr CH
inc CH
ldi CL, 8
clr AH
lslw A
cpi AH, 10
brcs PC+3
subi AH, 10
inc AL
dec CL
brne PC-7
addi AH, '0'
push AH
cpi AL, 0
brne PC-14
pop AL
rcall lcd_wr_chr
dec CH
brne PC-3
ret



lcd_mprin_clr:
rcall lcd_clear
lcd_mprin:
ld AL, Z+
tst AL
brne PC+2
ret
rcall lcd_wr_chr
rjmp lcd_mprin


lcd_fprin_clr:
rcall lcd_clear
lcd_fprin:
lpm AL, Z+ ;Get a char
tst AL ;Zero?
brne PC+2 ;/
ret
rcall lcd_wr_chr ;
rjmp lcd_fprin ;/


lcd_clear:
stsi Lcdp, 8
ldi AL, 0x01
rcall lcd_wr_cmd
rjmp delay_5ms


lcd_wr_chr:
sbi PORTD, LCDRS
rcall lcd_delay
rcall lcd_wr_n
rcall lcd_wr_n
lds AL, Lcdp
dec AL
sts Lcdp, AL
breq PC+2
ret
ldi AL, 0xC0
lcd_wr_cmd:
cbi PORTD, LCDRS
rcall lcd_delay
rcall lcd_wr_n
lcd_wr_n:
swap AL
push AL
andi AL, 0b00001111
in AH, PORTD
andi AH, 0b11110000
or AH, AL
out PORTD, AH
pop AL
sbi PORTD, LCDEN
rjmp PC+1
cbi PORTD, LCDEN
ret

lcd_delay:
ldi AH, 848/4 ;Delay 53us
dec AH ;
nop ;
brne PC-2 ;/
ret

delay_5ms: ;Delay 5ms
ldiw X, 80000/4
sbiw XL, 1
brne PC-1
ret



в архиве лежит вся прошивка к проэкту и файлы для флэш карты

Сообщение отредактировал extreme - May 31 2010, 23:08
Прикрепленные файлы
Прикрепленный файл  ldp2.zip ( 503.35 килобайт ) Кол-во скачиваний: 11
 
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th August 2025 - 13:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016