Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - Relbmessa

Seiten: [1]
1
Offtopic / Frohe Weihnacht
« am: 24. December 2015, 12:53 »
Ich wünsche euch allen ein frohes Fest und Gesundheit.
Relbmessa
2
Lowlevel-Coding / ARM PI PI2B IVT IRQ
« am: 09. September 2015, 13:37 »
Hallo,

wieder mal komme ich nicht weiter.

Habe ein kleines Test-Programm für Pi und Pi2 entworfen.

Auf dem Pi macht es alles was ich erwarte. Der Pi2B macht im wesentlichen auch alles, nur beim ARM_Timer IRQ
hängt er sich auf.
Soweit ich gelesen habe, soll er aber abwärts Kompatibel sein.

Frage: :?

Hat sich schon Jemand damit befast ?
Wenn ja, würde ich einen kleinen Gedankenaustausch begrüßen.

Leider ist der komplette Code etwas umfangreich.
Also erstmal nur einen Code-Auschnitt.

Gruß
Relbmessa


/********************************************************/
/* DANK PETER LEMON */
/*Dual Raspberry Pi */ /*Test IRQ */

 .section .init
 .globl _start
 _start:

/*; Setup Frame Buffer */
SCREEN_X       = 1024
SCREEN_Y       = 768
BITS_PER_PIXEL = 24

BASIS_ADD      =0x20000000 /* Pi 2B 0x3F000000 */

@CS_TIMER       =0x3000

/*; Setup  */


/*; Setup SMP (Boot Offset = $4000008C + ($10 * Core), Core = 1..3)
/*;Core1Boot = $4000008C + ($10 * 1) ; Core 1 Boot Offset */
 Core1Boot = 0x4000009C            @ ; Core 1 Boot Offset
/*;Core2Boot = $4000008C + ($10 * 2) ; Core 2 Boot Offset */
 Core2Boot = 0x400000AC            @ ; Core 2 Boot Offset
/*;Core3Boot = $4000008C + ($10 * 3) ; Core 3 Boot Offset */
 Core3Boot = 0x400000BC            @ ; Core 3 Boot Offset
@/*-------------------------------------------------------------------*/
  mov sp , #0x8000
b FB_Init 
@/*-------------------------------------------------------------------*/
    ldr pc,reset_handler
    ldr pc,undefined_handler
    ldr pc,swi_handler
    ldr pc,prefetch_handler
    ldr pc,data_handler
    ldr pc,unused_handler
    ldr pc,irq_handler
    ldr pc,fiq_handler
reset_handler:      .word resetVector
undefined_handler:  .word undVector
swi_handler:        .word swiVector
prefetch_handler:   .word prefVector
data_handler:       .word dataVector
unused_handler:     .word reservVector
irq_handler:        .word irqVector
fiq_handler:        .word fiqVector
/*--------------------------------------------------------------*/
  mov r0,r0
  mov r0,r0
/*--------------------------------------------------------------*/
FB_Init:
/*;---------------------------------------------------------------*/
  mov r0 ,#FB_STRUCT     @ mov r0,#FB_STRUCT @ 0xB0
  orr r0,#8 /*; MAIL_TAGS*/
  orr r0,r0 ,#0x8000
  orr r0,r0 ,#0
/*;--------------------------------------------------------------- -------- */
mov r1 ,#BASIS_ADD @0x3F000000 /*;@ Address Mail_Box */
orr r1,r1,#0xB800
orr r1,r1,#0xA0
orr r1,r1,#0                                                  ;
/*;------------------------------------------------------------------------*/
 str r0,[r1] @ /*; Mail Box Write */   ;70-7F   */
/*;------------------------------------------------------------------------*/
  mov r1 ,#FB_POINTER @FB_POINTER 0x2C ;
  orr r1 ,r1,#0x8100
  orr r1 ,r1,#0
  orr r1 ,r1,#0
@;/*;----------------------------------------------------------------------*/ 
  ldr r10,[r1] /* ; R10 = Frame Buffer Pointer ;A0-AF */
  cmp r10,#0   /* Compare Frame Buffer Pointer To Zero */
  beq FB_Init  /* IF Zero Re-Initialize Frame Buffer */
  mov r12 , r10
b weiter_programm
/*;----------------------------------------------------------------------------------------------------------*/
Ersatz_align:
  .word 0xFFFFFFFF
  .word 0xFFFFFFFF @ der achte
/* align 8 */
FB_STRUCT:
  .word FB_STRUCT_END - FB_STRUCT
  .word 0
       
  .word 0x00048003 /*,Set_Physical_Display*/
  .word 0x8
  .word 0x8
  .word SCREEN_X
  .word SCREEN_Y

  .word 0x00048004 /*Set_Virtual_Buffer  */
  .word 0x8
  .word 0x8
  .word SCREEN_X
  .word SCREEN_Y
 
  .word 0x00048005 /*Set_Depth        */
  .word 0x4
  .word 0x4
  .word BITS_PER_PIXEL

  .word 0x00048009 /*Set_Virtual_Offset */
  .word 0x8
  .word 0x8
FB_OFFSET_X:
  .word 0
FB_OFFSET_Y:
  .word 0
 
  .word 0x00040001 /*Allocate_Buffer */
  .word 0x8      
  .word 0x8
FB_POINTER:
  .word 0
  .word 0
 
  .word 0x0            
FB_STRUCT_END:
/*-----------------------------------------------------------*/
/*////////////////////////////////////////////////////////*/
 .align 8
resetVector:

  push {r0-r12 ,r14}
  /* nur Message-------------*/
     mov r0 ,#0 /*Spalte */
     mov r1 ,#1  /*Zeile   */   
 bl upcurserPos  /* Start-Position    */
      mov r0 , #16 /* 0x10 zeichen */
 bl upconvbyte 
     
haltreset:
 b haltreset
 
  pop {r0-r12 ,r14}
/*---IRQ-Ende----*/
      subs r15 ,r14,#4     

/*////////////////////////////////////////////////////////*/

 .align 8
undVector:

  push {r0-r12 ,r14}
    /* nur Message-------------*/
     mov r0 ,#0 /*Spalte */
     mov r1 ,#2  /*Zeile   */   
 bl upcurserPos  /* Start-Position    */
      mov r0 , #16+1 /* zeichen */
 bl upconvbyte
haltund:
  b haltund
  pop {r0-r12 ,r14}
/*---IRQ-Ende----*/

movs r15 ,r14
 
/*////////////////////////////////////////////////////////*/

/*////////////////////////////////////////////////////////*/
 .align 8
swiVector:



  push {r0-r12 ,r14}
 
    /* nur Message-------------*/
     mov r0 ,#0 /*Spalte */
     mov r1 ,#3  /*Zeile   */   
 bl upcurserPos  /* Start-Position    */
      mov r0 , #16+2 /* zeichen */
 bl upconvbyte
@ haltswi:
@  b haltswi
  pop {r0-r12 ,r14}
/*---IRQ-Ende----*/
movs r15 ,r14
 
/*////////////////////////////////////////////////////////*/

/*////////////////////////////////////////////////////////*/
 .align 8
prefVector:

  push {r0-r12 ,r14}
   /* nur Message-------------*/
     mov r0 ,#0 /*Spalte */
     mov r1 ,#4  /*Zeile   */   
 bl upcurserPos  /* Start-Position    */
      mov r0 , #16+3 /* zeichen */
 bl upconvbyte

HALTVector:
b HALTVector
     
    pop {r0-r12 ,r14}   

subs r15,r14,#4
/*////////////////////////////////////////////////////////*/
/*////////////////////////////////////////////////////////*/
 .align 8
dataVector:

push {r0-r12 ,r14}
    /* nur Message-------------*/
     mov r0 ,#0 /*Spalte */
     mov r1 ,#5  /*Zeile   */   
 bl upcurserPos  /* Start-Position    */
      mov r0 , #16+4 /* zeichen */
 bl upconvbyte
 
haltdata:
 b haltdata

  pop {r0-r12 ,r14}
@/*---IRQ-Ende----*/
     subs r15 ,r14 ,#8   

/*////////////////////////////////////////////////////////*/
/*////////////////////////////////////////////////////////*/
 .align 8
reservVector:

  push {r0-r12 ,r14}
 
    /* nur Message-------------*/
     mov r0 ,#0 /*Spalte */
     mov r1 ,#6  /*Zeile   */   
 bl upcurserPos  /* Start-Position    */
      mov r0 , #16+5 /* zeichen */
 bl upconvbyte
 

haltreserv:
 b haltreserv
 
  pop {r0-r12 ,r14}
/*---IRQ-Ende----*/

 movs r15 ,r14
/*////////////////////////////////////////////////////////*/

/*//////////////////////////////////////////////////////////*/
 .align 8
irqVector:

  push {r0-r12 ,r14}
 
  ldr r0 , =BASIS_ADD
  ldr r1 , =0xB40C
  add r0 , r1 /* Ziel  */
   
  ldr r1 , =0x01
  str r1 , [r0]
 
 ldr r0 ,=startProgr
 mov r1 ,#1 /* startProgramm ein */
 str r1 ,[r0] /* heute */
/*********************************************************/
  mov r1 , #1
  ldr r0 , =uhrzeitzaehl
  ldr r2 , [r0]
  add r2 , r1
  str r2 , [r0]
   /* nur Message-------------*/
@     mov r0 ,#0 /*Spalte */
@     mov r1 ,#7  /*Zeile   */   
@ bl upcurserPos  /* Start-Position    */
@      mov r0 , #16+6 /* zeichen */
@ bl upconvbyte
 
  pop {r0-r12 ,r14}
/*---IRQ-Ende----*/
      subs r15 ,r14,#4     
/*---IRQ-Ende----*/
/*////////////////////////////////////////////////////////*/
 .align 8
fiqVector:

  push {r0-r12 ,r14}
 
      /* nur Message-------------*/
     mov r0 ,#0 /*Spalte */
     mov r1 ,#8  /*Zeile   */   
 bl upcurserPos  /* Start-Position    */
      mov r0 , #16+7 /* zeichen */
 bl upconvbyte

haltfiq:
b haltfiq

  pop {r0-r12 ,r14}
/*---IRQ-Ende----*/
     subs r15 ,r14 ,#4   
/**********************************************************/
/*////////////////////////////////////////////////////////*/
@/*------------ UP ---------------------------------------*/
up_cursor:
  push {r4-r12}
  mov r6 ,r4 @ offset /startpunkt
  mov r4 ,#16 @ anzahl spalte
  mov r5 ,r4 @ anzahl zeile
loop_cursor: 
  strb r1 , [r0,r6] @ blue
   add r0 , #1
  strb r2 , [r0,r6] @ gruen
   add r0 , #1
  strb r3 , [r0,r6] @ rot
   add r0 , #1
   sub r4 , #1 @ spalte
   cmp r4 , #0
   bne loop_cursor
   mov r4 , #16 @ reset spalte
   add r6 , #1024*3     @ nächste zeile
   sub r6 , #16*3 @ offset
   sub r5 ,#1
   cmp r5 ,#0
   bne loop_cursor
   pop {r4-r12}     
mov pc , lr

@/*////////////////////////////////////////////////////////*/
 .align 2
 .section .data

bws_pointer:
  .word 0x0
/*-----------------------------------------------------------*/
bws_hell_rot:
  .word 0xFF
 
bws_hell_gruen:
  .word 0x0

bws_hell_blue:
  .word 0xFF
 
bws_anzahl_point:
  .word 1024*16 @1024*768
/*-----------------*/ 
pause_value:
  .word 0x003F0000
/*-----------------*/
pause_valueA:
  .word 0x000F0000
/*----------------*/
pause_valueB:
  .word 0x000F0000*2
/*---------------------------------------------------------------------*/
 .align 2
meValueAnzbyte: @ Parameter upsiebenzweiBWS
 .int 0x4
meValueAnzZeil:
 .int 0x8 @ 20d
@--------------Anzeige zeile 1-8 --------------------------------------*/
 .align 8
data_bws0:
  .word 0x11111111
data_bws4:
  .word 0x22222222
data_bws8:
  .word 0x33333333 
data_bwsC:
  .word 0x44444444
data_bws10:
  .word 0x55555555 
data_bws14:
  .word 0x66666666
data_bws18:
  .word 0x77777777
data_bws1C:
  .word 0x88888888 
data_bws20:
  .word 0x0
/*---------------------------------------------------------------------*/
data_bws24:
  .word 0x24
data_bws28:
  .word 0x0 
data_bws2C:
  .word 0x0
data_bws30:
  .word 0x0 
data_bws34:
  .word 0x0
data_bws38:
  .word 0x0
data_bws3C:
  .word 0x0 
data_bws40:
  .word 0x40
/*-------------------------------------------------------------------*/
data_bws44:
  .word 0x44
data_bws48:
  .word 0x0 
data_bws4C:
  .word 0x0
data_bws50:
  .word 0x0 
data_bws54:
  .word 0x0
data_bws58:
  .word 0x0
data_bws5C:
  .word 0x0 
data_bws60:
  .word 0x60
/*-------------------------------------------------------------------*/
/*------------------*/
uhrzeitzaehl:
  .int 0x0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
/*=======================================================*/
startProgr:
  .int 0x01
weitermitProgramm:
  .int 0x0
prMatrixXXX:
  .int Proffset
  .int Pr001 , Pr002 , Pr003 , Pr004 , Pr005 , Pr006 , Pr007 , Pr008 , Pr009 , Pr010
  .int Pr011 , Pr012 , Pr013 , Pr014 , Pr015 , Pr016 , Pr017 , Pr018 , Pr019 , Pr020
 /*;--------------------------------------------------------------------*/
weiter_programm:
@/*-------------------------------*/
/*============================================================*/
/*    ISR Vectoren      */
/************************************************************/
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ ------------- IVT Pointer -------------------------------

mov r0 , #8 @;Anzahl
ldr r1 , =0xEA000006 @;value sprung
mov r2 , #0 @; ram null
ivt_pointer0:
str r1 ,[r2]
add r1 ,#2
add r2 ,#4
sub r0 ,#1
cmp r0 ,#0
bne ivt_pointer0
@----------------ENDE------------------------------------
@;;;;;; lade E59FF000------------------------------------
mov r0 , #8 @;Anzahl
ldr r1 , =0xE59FF000 @;ldr PC, [PC]
mov r2 , #32 @; ram start 0x20
ivt_pointer1:
str r1 ,[r2]
@add r1 ,#2
add r2 ,#12 @ Abstand 0x0C
sub r0 ,#1
cmp r0 ,#0
bne ivt_pointer1
@----------------ENDE------------------------------------
@;;;;;;;;; address händler-------------------------------
mov r0 , #8 @;Anzahl
ldr r1 , =0x00008008 @;Erster reset_handler
mov r2 , #40 @; ram 40 0x28
ivt_pointer2:
str r1 ,[r2]
add r1 ,#4
add r2 ,#12 @ Abstand 0x0C
sub r0 ,#1
cmp r0 ,#0
bne ivt_pointer2
@----------------ENDE-------------------------------------------
   
3
Lowlevel-Coding / Linux syscall read write
« am: 28. April 2015, 18:25 »
Hallo Gemeinschaft

Vielleicht kann mir Jemand helfen??

Das Problem ist ein kleines Kopierprogramm für Linux ARM (Pi 2B)
Es soll als Dauerschleife laufen und ist in Assembler mit Linux syscall read und write.

Der Fehler:
das Programm macht 510 Schleifen und hört dann mit dem kopieren auf!

Das Programm ist aber in der Programmliste (top) noch aktiv (aber nur mit ca 1,7 prozent)

Hier nun der Code:
@------------------------------------------------------------------------------
@ Test pi 2B Programm twG (testen)
@ gcc -o twG twG.s
@------------------------------------------------------------------------------
@ as -o twG.o twG.s -> main ersetzen mit _start sonst Fehlermeldung
@ ld -o twG twG.o
@------------------------------------------------------------------------------

      .global main @ gcc -o

@       .global _start  @ as -o -> ld -o
     
.section .data
@------------------------------------------------------------------------------   

@------------------------------------------------------------------------------
   fd_in:
    .int 0x0
   fd_out:
    .int 0x0
@--------------------------
   reserve:
    .int 0x0
@----------parameter- sleep---------------------------------------------------
time_value:
.int 0 @ Sekunde
.int 2000000 @ 10mS /100mS  100000000

@------------------------------------ 
  file_reada:
    .asciz  "/dev/shm/A/B640x480rgb0"
  .align 2
@---write--------------------------   
  file_write2:
    .asciz  "/dev/shm/G/B640x480rgb0"
  .align 2

@------------------------------------------------------------------------------
  buffer_a:
  .space 1024*901
   
@-Ende section .data---------------------------------------------------------
@-----------------------------------------------------------------------------

main: @ gcc     
@ _start:      @ as -> ld
   mov r4 , #71 @ G
   mov r5 , #72 @ H
@-----------------------------------
   mov r3 , #65         @ A
   mov r6 , #66 @ B   
   mov r8 , #1024       @ schleife
   ldr r9 , =0x1 @ für Test
  ldr r10 , =18 @ für Test 18d

@-----------------------------------------------------------------------------

loop_neu:
@--open the file for reading---hole Bilddavor (/C/B640x480rgb0)---------------
      ldr r0 , =file_reada @
      strb r3 , [r0,#9] @ pfad A oder B
      mov r1 , #2 @ read
      ldr r2 , =444 @ all
      mov r7 , #5 @ syscall 5 open file
      swi 0
      ldr r1 , =fd_in
      str r0 , [r1] @ Rückgabe-Wert
@-----------------------------------------------------------------------------
@-- read from file------------------------------------------------------------
  @   ldr r1 , =fd_in
  @   ldr r0 , [r1] @ deskriptor fd_in
      ldr r1 , =buffer_a @ Zeiger -> Anfang der Daten
      mov r2 , #1024*900
      add r2 , #15 @ Anzahl Byte hier (900,0kiB 921615 Byte)
      mov r7 , #3 @ syscall 3 -> read file
      swi 0
@-----------------------------------------------------------------------------
@--close the file-------------------------------------------------------------
      mov r7 , #6
  @   ldr r1 , =fd_in
  @   ldr r0 , [r1] @ deskriptor fd_in
      swi 0
@------------------------------------------------------------------------------
str r9  , [r1, r10] @ r10 =ziel
add r9  , #1 @ kontrolle anzahl

@---lesen Ende-----------------------------------------------------------------
@-----create -----------------------------------------------------
ldr r0 , =file_write2
       strb r4 , [r0,#9] @ pfad G H
ldr r1 , =444
mov r7 , #8 @ syscall 8 create
swi 0
ldr r1 , =fd_out
str r0 , [r1]
@-----write file---------------------------
mov r2 , #1024*900
add r2 , #15
ldr r1 , =buffer_a @ Quelle (Ergebnis)
@@ ldr r1 , =fd_out
@@ str r0 , [r1]
mov r7 , #4 @ syscall write 4
swi 0
@------------------------------------------
@@ ldr r1 , =fd_out
@@ str r0 , [r1]
  mov r7 , #6 @ close
swi 0

@-----sleep sys 162 ----------------------------------------------------------
mov r7 , #162
ldr r0 , =time_value
mov r1 , #0
swi 0
@---------Test pfad read -----------------------------------------------------
add r3 , #1
cmp r3 , r6
ble pfadr_ok
sub r3 , #2
pfadr_ok:
@---------Test pfad write ----------------------------------------------------
add r4 , #1
cmp r4 , r5
ble pfad_ok
sub r4 , #2
pfad_ok:
@---------Durchlauf für Test--------------------------------------------------
@@ sub r8 , #1
@@ cmp r8 , #0
@@ bne loop_neu
b loop_neu @ max 0x01FE 510d -> warum ??
@-----------------------------------------------------------------------------

@--syscall exit 1 ------------------------------------------------------------
    mov r7 , #1
    mov r0 , #0
    swi 0 @ Ende   
     












Hilfen sind willkommen.

Gruß
Relbmessa
4
Lowlevel-Coding / ARM Timer-IRQ
« am: 23. August 2013, 19:36 »
Hallo ,
im Moment beschäftige ich mit Timer-IRQ Raspberry Pi.
Leider hänge ich immer noch an der Grundlagenforschung fest.

Die nachfolgende Tabelle ist von Berry-Boot
nach dem Start vom OS ausgelesen.


00  060000EA  b address     28  0C1C81E3  ??
04  0000A0E1  mov r0 ,r0    2C  00209FE5  ldr r2 ,[r15]
08  0000A0E1  mov r0 ,r0    30  00F09FE5  ldr r15,[r15]
0C  0000A0E1                34  00010000
10  0000A0E1                38  00080000
14  0000A0E1                3C  00000000
18  0000A0E1
1C  0000A0E1
20  0000A0E3  mov r0,#0
24  4210A0E3  ??

Mich interessiert im Moment Zeile 24 und 28.
Leider habe ich noch keine passenden Befehle
bzw. Syntax gefunden.
Vielleicht kann ja Jemand helfen?

Gruß
Relbmessa
5
Offtopic / Männertag
« am: 09. May 2013, 01:14 »
Hura Männertag :-D
Einen Regenfreien Tag und viel Spass wünscht euch

Relbmessa  8-)
6
Lowlevel-Coding / EHCI Asynchronous Schedule
« am: 18. February 2013, 22:02 »
Hallo

ich bin gerade dabei mich mit EHCI zu beschäftigen. (Asynrchronous Bulk Control)

Meine Frage:

Wird der Current qTD Pointer vom Queue Head (EHCI-Spec. Seite-46 3/12/2002) als Zeiger eingetragen?
Ich habe eine einfache EHCI Daten Struktur gefunden und da ist der Current qTD Pointer Null!
Nun bin ich einwenig ratlos.
Vielleicht hat ja einer von euch einen Tipp für mich.   

Gruß
Relbmessa

 
7
Lowlevel-Coding / SN9C202+OV9650
« am: 16. April 2012, 20:04 »
Hallo,
ich kämpfe gerade mit einer Webcam. (SN9C202+OV9650)
Bei der Enumeration komme ich aber nur bis zum setzen Set_Address. :-P :?

Hat vielleicht einer eine Specification oä. für den SN9C202.
Die Specification SN9C201 ist leider nur ähnlich, und mein suchen war bisher
leider erfolglos.

Schon Dank im voraus für Deine (Eure) Aufmerksamkeit.

Gruß
Relbmessa
8
Lowlevel-Coding / bInterfaceProtocol 80
« am: 31. March 2012, 14:59 »
Hallo,
ich suche Informationen Bulk only 80 (zip).
Specification oder ä.
Finde im Moment leider nichts!

Kurze Antwort zu den Unterschieden zwischen bIterfaceProtocol 50 und 80 würde mir auch weiter
helfen.
Schon jetzt, danke für die Aufmerksamkeit!!  :-D

Gruß
Relbmessa
9
Lowlevel-Coding / Eine Antwort UHCI Setup-Control
« am: 25. February 2012, 15:23 »
Hallo
Antwort zu UHCI Setup-Transfer

Eine Antwort – nicht die Antwort Setup (Control)

Erfragen Get_Deskriptor

Die von mir verwendet Frame: 


Nr.05_A
001  00021000 00021010     002  00021010 00021020     003  00021020 00021030
1Fra 00021004                   00021014                   00021024          
     00021008                   00021018                   00021028
     0002100C          BUF      0002101C          BUF      0002102C          BUF

004  00021030 00021040     005  00021040 00021052 ZQH 006  00021050 00021090 ZTD1
     00021034                   00021044          QH       00021054 00000001  IRQ         
     00021038                   00021048                   00021058
     0002103C          BUF      0002104C          BUF      0002105C          BUF

007  00021060 00021070     008  00021070 0021080     009  00021080 00021090
     00021064                   00021074                   00021084          
     00021068                   00021078                   00021088
     0002106C BUF               0002107C 00120118 BUF      0002108C 00120140 BUF

010  00021090 000210A0     011  000210A0 000210B0     012  000210B0 000210C0
TD1  00021094              TD2  000210A4              TD3  000210B4          
     00021098                   000210A8                   000210B8
     0002109C 00120118 BUF      000210AC 00120140 BUF    000210BC 00120168 BUF

013  000210C0 000210E2 ZQH 014  000210D0 000210E0     015  000210E0 00000001
TD4  000210C4                   000210D4              QH   000210E4 00000001         
     000210C8                   000210D8                   000210E8
     000210CC 00120190 BUF      000210DC          BUF      000210EC          BUF

;;;;;;;;;;----Vorbereitung für Control-Transfer----------------------------1.Einstellung
;-------------TD-1---------------------------------------------------------
    mov dword [0x00021094] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x00021098] , 0x00E0002D ;Reg 08-0Bh Token Setup -> 2Dh
    mov dword [0x0002109C] , 0x00120118 ;Buffer-Pointer TD1
;-------------TD-2---------------------------------------------------------
    mov dword [0x000210A4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210A8] , 0x02280069 ;Reg 08-0Bh Token DATA1 IN-> 69h
    mov dword [0x000210AC] , 0x00120140 ;Buffer-Pointer TD2
;----------------------------------------------------------------------------
;-------------TD-3-----------------------------------------------------------
    mov dword [0x000210B4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210B8] , 0x02200069 ;Reg 08-0Bh Token DATA0  IN -> 69h ????
    mov dword [0x000210BC] , 0x00120168 ;Buffer Pointer TD3
;----------------------------------------------------------------------------
;-------------TD-4-----------------------------------------------------------
    mov dword [0x000210C4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210C8] , 0x02280069 ;Reg 08-0Bh Token DATA1 IN-> 69h
    mov dword [0x000210CC] , 0x00120190 ;Buffer-Pointer TD4
;----------------------------------------------------------------------------
;---------Speicher-Einstellung-Buffer-Bereich erst mal Null------------------
    mov dword [0x00120118] , 0x01000680 ;Get_Deskriptor TD1
    mov dword [0x0012011C] , 0x00120000
;--------------------------------
    mov dword [0x00120140] , 0x0 ; TD2
    mov dword [0x00120144] , 0x0 ;
;-------------------------------
    mov dword [0x00120168] , 0x0 ; TD3
    mov dword [0x0012016C] , 0x0
;-------------------------------
    mov dword [0x00120190] , 0x0 ; TD4
    mov dword [0x00120194] , 0x0
;-------------------------------------------------------------------------
Frame-List Pointer

Code
;--------Frame List--TD-Pointer------------------ ----------------------------------------

;----------------------------------------------------------------------------------------
 
    mov eax , 0x00020000+4 ;+1 siehe Erster FLP /Ziel  Framme List
    mov ebx , 0x00023001 ;Inhalt Frame List -> Link -Pointer 
    mov ecx , 1024-1
Frame_List:
      mov [eax] , ebx
      add eax , 0x04 ;Abstand 4-Byte Frame Pointer
;      add ebx , 0x10 ;Abstand Link-Pointer 16-Byte (10h)
    loop Frame_List
;-------Link-Pointer-TD-1------------------------------------------------
      mov eax , 0x00021000 ;Ziel TD-2 Pointer
      mov ebx , 0x00021010 ;Link-Pointer
      mov ecx , 1024
Link_Pointer_1:
      mov [eax] , ebx
      add eax , 0x10
      add ebx , 0x10
    loop Link_Pointer_1

;--------------Frame-List-Pointer------------------------------------------------
     mov dword [0x00020000] , 0x00021000 ;Erster Frame-List-Pointer   
     mov dword [0x00020004] , 0x00021090 ;Zeiger 2
;---------------------------------------------------------------------------------
     mov dword [0x00020008] , 0x00021090 ;Zeiger 3


 Mit dieser Konfiguration melden sich die meisten Geräte

Ausnahmen bestätigen die Regel – Acer 1Giga und Cruzer 4Giga
melden sich meist nicht – keine Ahnung  warum??

Mit der folgenden Konfiguration habe ich dieses Problem gelöst

;;;;;;;;;;----Vorbereitung für Control-Transfer----------------------------
;-------------TD-1---------------------------------------------------------
    mov dword [0x00021094] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x00021098] , 0x00E0002D ;Reg 08-0Bh Token Setup -> 2Dh
    mov dword [0x0002109C] , 0x00120118 ;Buffer-Pointer TD1
;-------------TD-2---------------------------------------------------------
    mov dword [0x000210A4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210A8] , 0x02200069 ;Reg 08-0Bh Token DATA0 IN-> 69h
    mov dword [0x000210AC] , 0x00120140 ;Buffer-Pointer TD2
;----------------------------------------------------------------------------
;-------------TD-3-----------------------------------------------------------
    mov dword [0x000210B4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210B8] , 0x02280069 ;Reg 08-0Bh Token DATA1  IN -> 69h ????
    mov dword [0x000210BC] , 0x00120168 ;Buffer Pointer TD3
;----------------------------------------------------------------------------
;-------------TD-4-----------------------------------------------------------
    mov dword [0x000210C4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210C8] , 0x02200069 ;Reg 08-0Bh Token DATA0 IN-> 69h
    mov dword [0x000210CC] , 0x00120190 ;Buffer-Pointer TD4
;----------------------------------------------------------------------------
;---------Speicher-Einstellung-Buffer-Bereich erst mal Null------------------
    mov dword [0x00120118] , 0x01000680 ;Get_Deskriptor TD1
    mov dword [0x0012011C] , 0x00120000
;--------------------------------
    mov dword [0x00120140] , 0x0 ; TD2
    mov dword [0x00120144] , 0x0 ;
;-------------------------------
    mov dword [0x00120168] , 0x0 ; TD3
    mov dword [0x0012016C] , 0x0
;-------------------------------
    mov dword [0x00120190] , 0x0 ; TD4
    mov dword [0x00120194] , 0x0
;-------------------------------------------------------------------------

Diskussion erwünscht , aber nicht Bedingung

Viel Spaß und Erfolg beim Programmieren

Relbmessa

PS
Wollte ein wenig Farbe in die Gestaltung bringen.
Wie Funktioniert das?-> ist aber nicht wichtig!!
10
Lowlevel-Coding / Frage zu UHCI Setup Control Transfer
« am: 29. January 2012, 17:10 »
Hallo
ich versuche gerade UHCI Programmierung  Control-Transfer  Setup(Control)

 ;SETUP TD

00025000 ;Link Pointer
18800000 ;Control/Status
00E0002D ;Len=8,DATA0 , Setup
00120118 ;Buffer Pointer

;DATA0 TD

00029000 ;Link Pointer
18800000 ;Control/Status
00E00069 ;Len=8,DATA0 , IN
00120140 ;Buffer Pointer

;DATA1 TD

0002D002 ;Link Pointer
18800000 ;Control/Status
00E80069 ;Len=0,DATA1 , IN
00120168 ;Buffer Pointer


;Buffer

  mov dword [0x00120118] , 0x80 ;Setup Packet
  mov dword [0x0012011C] , 0x08000000



Leider meldet sich der USB-Stick nicht

Mir geht es nur darum ob die Tds  und das Setup-Packet  richtig sind??
Vielleicht kann mir ja jemand einen Tipp geben.

Danke
Relbmessa
11
Lyrisches Eck / Frohes Fest
« am: 24. December 2011, 10:53 »
Hallo Gemeinde
allen C-Feunden und Assembler-Vermeidern

Ein frohes Weihnachtsfest wünscht Euch

Relbmessa   :-D

 
12
Lowlevel-Coding / MiniOS protecdet Mode
« am: 31. July 2011, 12:53 »
Hallo Forum,
ich bin neu hier und  möchte mich mit einen kleinen Beitrag bei der Community-Gemeinschaft
bedanken.
 
Leider habe ich nicht viel Zeit,
im Moment ist alles neu und bunt und ich weiß nicht wo ich ansetzen soll.
Ich habe ein kleines MiniOS dass ich mit Quelltext zur Verfügung stellen möchte.

Die Parameter sind:
Assembler Nasm
32 Bit Protected Mode
APIC
Einfacher Tastaturtreiber

Es wurde geteste mit:
VIA nano PC
Pentium 32 BIT Intel   865G Chipset
AMD Athlon X2 mit BS600 Chipset

Boot.asm
<asm>
org 0x7C00  ; Start-Adresse
; alles auf Null ;
    xor ax, ax
    mov ds, ax
    mov es, ax
    mov ss, ax
    mov sp, ax

; lese kernel von Laufwerk ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    mov [bootdrive], dl ; boot drive
                        
;-------------------------------------------------------------
;BWS->schwarz
  mov cx,2000-4
bild_loeschen:
    sub cx, 1
    cmp cx, 0
    je bild_loeschen_ende
    mov ax, 0x0E00   ;Zeichen 0   e bild_loeschen_ende
    int 10h
    jmp bild_loeschen
bild_loeschen_ende:

;Anfangs-Position-Cursor--------------------------------------
   mov ah, 0x02
   mov bh, 0x0
   mov dh,0       ;24      ; Zeile  BWS
   mov dl,0      ;79      ; Spalte BWS
    int 10h         ; Cursor-Position
;-------------------------------------------------------------

;Message:
;-------------------------------------------------------------
  mov ah, 0x0E      ;auf BWS schreiben ->aktuelle Position
  mov al, 0x4C      ;Zeichen L
  int 10h  
  mov ax, 0x0E41   ;Zeichen A   ;
  int 10h
  mov ax, 0x0E44   ;Zeichen D   ;
  int 10h
  mov ax, 0x0E45   ;Zeichen E   ;
  int 10h
;--------------------------------Ende-Massage


;--------------------------------------------
lade_kernel:
    xor ax, ax         ; mov ax, 0  => function "reset"
    int 0x13        
    jc lade_kernel     ;

    mov bx, 0x8000     ;Startadresse Kernel
    
    mov dl,[bootdrive] ; select boot drive
    mov al, 50         ; read 50 sectors
    mov ch, 0          ; cylinder = 0
    mov cl, 2          ; sector   = 2 (erster Sector Bootsector)
    mov dh, 0          ; head     = 0
    mov ah, 2          ; function "read"
    int 0x13        

;;;;;;;;;;;;;;;;;;
    jmp 0x0000:0x8000   ; adresse  kernel


;;;;;;;;;;;;;;;;;;;;;;;
   bootdrive db 0    ; boot drive

    times 510-($-$$) hlt
    dw 0xAA55

<asm>

Leider passt der Kernel nicht das Fenster des Beitrages.
Er ist zu gross!
Hat Jemand eine Idee  
Über etwas Unterstützung würde ich mich sehr freuen.

Hier nun der Rest zum runter laden: (erst mal 30 Tage)
http://pastebin.de18098

Relbmessa  
Seiten: [1]

Einloggen