Techtronik.pl Serwis : Software, hardware, diagnoza, naprawa
Forum dla zaawansowanych hobbystów elektroników i serwisantów

| FAQ |  Szukaj |  Użytkownicy |  Grupy |
| Rejestracja |  Zaloguj |

Baza wiedzy, serwis GSM, simlock BB5, naprawa, diagnoza, forum.



Poprzedni temat «» Następny temat
Programowanie AMR, DSP, COBBA i obsługa HW/SW w DCT3
Autor Wiadomość
mlodya 
Member



Telefon: 6230
Wiek: 36
Dołączył: 24 Lip 2002
Posty: 696
Skąd: Poznań (Polanka)
Wysłany: 14 Mar 2004 21:26   Programowanie AMR, DSP, COBBA i obsługa HW/SW w DCT3

W związku z notorycznym brakiem czasu na dokończenie tutoriala Repair DCT3... Przedstawię garść informacji które mogą się przydać userom zaawansowanym w modyfikacjach SW w modelach DCT3...

Wszystkie opisywane informacje w niniejszym dokumencie dotyczą modelu 33XX.

Podziękowania dla: Exitusa, g3ggO, petera Hanzela, AlexD, TechTron, NokRev, Tomasa, Marcina Wiącka i innych osób, które brały udział w projekcie Blacksphere , jak też dla tych, którzy wspomogli mnie w opracowaniu tych informacji.

W dniu dzisiejszym zaczniemy od mapy pamięci obszaru I/O MADa...

I/O zakres (00020000-000200FF)

Adres / długość / zawartość
(Zapis/Odczyt)
00 1 [CTSI] DCT3 ASIC version Primary hardware version
- identyfikacja wersji HW telefonu
(O) 00001111 Revision
(O) 11110000 Version

01 1 [CTSI] MCU reset control register
- rejestr stanu oraz sterowania zerowaniem SW
(O) 00000001 Enabled after powerup (powód:wyłączenie zasilania)
(O) 00000010 Last reset was by watchdog (powod:watchdog)
(Z/O) 00000100 SW reset (zerowanie)

02 1 [CTSI] DSP reset control register
- rejestr stanu i zerowania DSP
(Z/O) 00000001 Enable DSP (włączenie DSP, 0=OFF)
(Z/O) 00000010 Enabled after setup in task (0=gdy ostatnie zadanie spowodowało reset DSP)


03 1 [CTSI] ASIC watchdog write register Load the ASIC watchdog timer with a certain number of seconds.
- rejestr watchdoga, gdy osiągnie zero, powoduje wywołanie funkcji SW reset
(Z) 0xFF disables the dog (wyłączenie watchdoga)

04 2 [CTSI] Sleep clock counter Reads the current value of the 16 bit timer.
(O) - 16 bitowy licznik zegara czasu rzeczywistego (SLEEP MODE) w CONNT

06 2 [CTSI] (sleep) clock destination
(O) - żródło licznika w trybie SLEEP

08 1 [CTSI] FIQ lines active
(Z/O) - rejest odpowiedzialny za włączanie lub wyłączanie przerwań FAST (1=przyjmowanie przerwania nieaktywne)
00000001 FIQ 0
00000010 FIQ 1
00000100 FIQ 2
00001000 FIQ 3
00010000 FIQ 4
00100000 FIQ 5
01000000 FIQ 6
10000000 FIQ 7

09 1 [CTSI] IRQ lines active
(Z/O) - rejest odpowiedzialny za włączanie lub wyłączanie przerwań maskowalnych (opis jak dla FIQ)

0A 1 [CTSI] FIQ lines mask 0=passed 1=masked
(Z/O) - rejestr maskowania globalnego przerwaniami FIQ

0B 1 [CTSI] IRQ lines mask 0=passed 1=masked
(Z/O) - rejestr maskowania globalnego przerwaniami IRQ

0C 1 [CTSI] Interrupt control register
(Z/O) - zarządzanie przerwaniami
00000001 Global FIQ enable
00000010 Global FIQ disable
00000100 Global IRQ enable
00001000 Global IRQ disable
00100000 IRQ 8 line active
01000000 IRQ 8 mask

0D 1 [CTSI] Clock control register Controls the various clock lines in the system
(Z/O) - rejestr sterujący zegarem systemowym
00000001 ARM clock
00000010 sleep clock (power OFF)
00000100 GENSIO clock (must be enabled for CCont and LCD) (oparty na odświerzaniu LCD)
00001000 Enabled in firmware init - reason unknown (zegar programowy)
00100000 SIM clock
01000000 SIM (programowy, sterowany z SIM)

0E 1 [CTSI] Interrupt trigger register The lines that trigger IRQ5 and IRQ6
- rejestr monitorujący przerwanie IRQ5 i IRQ6
(O) 00000001 IRQ 5
(O) 00000010 IRQ 6

0F 1 [CTSI] Programmable timer clock divider
- programowany dzielnik licznika zegara systemowego
(O) - nastawa dzielnika
(Z) - maksymalna wartość licznika zegara (zegar dzielony przez tą wartość +1)

10 2 [CTSI] Programmable timer counter Reads the current value of the 16 bit programmable timer
(O) - wartość licznika zegara (drugi odczyt licznika, przed jego przeładowaniem nie uaktualnia tej komórki)

12 2 [CTSI] Programmable timer destination When the 16 bit programmable timer (above) reaches this value, the programmable timer interrupt is generated.
(Z/O) - rejestr ustawiający wartość licznika po której nastąpi przeładowanie

15 1 [PUP] PUP control
- rejestr zarządzający interface systemowym (MADa)
(Z/O) 00000111 MBUS baudrate (000=9600;001=19200;011=57600;100=115200;111=9600;pozostałe wartosci=prędkość nieustalona)
(Z/O) 00001000 MBUS reset enabled & disabled in mbus_init (włączenie(1)/wyłączenie(0) MBUSa)
(Z/O) 00010000 Vibrator enable
(Z/O) 00100000 Buzzer enable
(Z/O) 01000000 Unknown (MBUS)Cleared in mbus_init MBUS mode? 0 = clocked, 1 = synchronous
(Z/O) 10000000 MBUS clock speed (FIQ3 - częśtotliwość wzorcowa taktowania MBUSa (423,1/s lub 846,2/s))

16 1 [PUP] FIQ 8 interrupt control
- rejestr sterujący przerwaniem FIQ8
(Z/O) 00000001 Enable (0=wyłączone)
(Z/O) 00000010 FIQ8 active (0=aktywne 1=stan oczekiwania)
(Z/O) 00000100 FIQ8 mask (1=masowanie)

18 1 [PUP] MBUS control
- rejestr sterujący trybami pracy MBUSa
(Z/O) 00000011 Synchronous serial enable (1=BootROM Flashing)
(Z/O) 00001100 Unknown enabled in mbus_init
(Z/O) 00100000 MBUS transmit mode (odpowiedz interfejsu, po wyzwoleniu przerwania FIQ3. 1=pierwszy bajt; 0=ostatna wartość)
(Z/O) 01000000 MBUS receive mode (1= MBUS_init)
(O) 10000000 Status/initialisation (0=trwa inicjalizacja MBUSa)

19 1 [PUP] MBUS status
- sterowanie sprzętowe transmisją
(Z/O) 00000111 Number of bits transmitted/received (rejestr szeregowy-numer bitu na lini)
(O) 00010000 MBUS send ready (gotowość do nadawania)
(O) 00100000 MBUS receive byte available (odebrano bajt danych)
(O) 01000000 txd bit ready (flasher) = SCL = FBUS_RX (taktowanie w trybie flash)
(Z/O) 10000000 txd bit (flasher) = Serial data out = FBUS_TX

1A 1 [PUP] MBUS RX/TX Bytes are sent to and received from the line in this register.
(Z/O) - bufor transmisji

1B 1 [PUP] Vibrator
- sterowanie vibratorem
(Z) 00011111 Vibrator frequency
(Z) 01100000 Vibrator mode

1C 1 [PUP] Buzzer clock divider Buzzing frequency is 13000000/div
(Z) - rejestr dzielnika buzerra

1E 1 [PUP] Buzzer volume
(Z) - poziom głośności buzerra

20 1 [PUP] McuGenIO signal lines (0=low 1=high)
- linie sygnałowe MCU_GEN I/O
(Z/O) 00000001 CCUT (EM)
(O) 00000110 Numer wersji MADa
(Z/O) 00001000 LCD leds on/off
(Z/O) 00010000 CHARLIM (EM)

22 1 [PUP] DSP Fbus Mode
- sterowanie trybem rozszerzonym komunikacji Fbus via DSP
(Z/O) 00100000 DSP mode (włączenie rozszerzenia komend 0x40 i sub 0x80 - zaleca się nie korzystać)

24 1 [PUP] McuGenIO I/O direction
(Z/O) - ustawianie kierunku portu MCU_GEN (0=wejście/1=wyjście)

28 1 [UIF/KBGPIO] Keyboard ROW signal lines
(Z/O) - sterowanie sygnałem ROW klawiatury (0=niski/1=wysoki)

29 1 [UIF/KBGPIO] Keyboard ROW
(Z/O) - rejestr powtórzony (zaleca się nieużywać)

2A 1 [UIF/KBGPIO] Keyboard COL signal lines
(Z/O) - sterowanie sygnałem COL klawiatury (0=niski/1=wysoki)

2B 1 [UIF/KBGPIO] Keyboard COL
(Z/O) - rejestr powtórzony (zaleca się nieużywać)

2C 1 [UIF/GENSIO] CCont write
(Z) - linia Tx danych do CCONT

2D 1 [UIF/GENSIO] GENSIO start transaction
(Z) 00100101 (0x25)włączenie nadawania do CCONT lub LCD (przy włączonej tranmisji, przejście CCONT w tryb pracy SHUT_DOWN, powoduje zawieszenie SW)
(Z) 00011111 Serial clock speed divisor (dzielnik zegara transmisji, 0x00=fast (60Mb/s) - 0x1f=slow (950kb/s)
(Z) 00100000 Select/enable (wyłączenie reakcji CCONT i LCD na komendy - nigdy nie wyłączać!)

2E 1 [UIF/GENSIO] LCD data write
(Z) - linia Tx danych do LCD

32 1 [UIF] CTRL I/O 2
- rejestr kontrolny nr. 2
(Z/O) 00100000 Reset LCD (FraCtrl) (zerowanie LCD 0=reset 1=włączony)
(Z/O) 10000000 Another really cool and fluffy output bit

33 1 [UIF] CTRL I/O 3
- rejestr kontrolny nr.3
(Z/O) 00000001 Vpp (RxPwr pin) (włączenie napięcia programującego)
(Z/O) 00000010 Keyboard leds (TxPwr pin) (włączenie LEDów klawiatury)
(Z/O) 00001000 Maps memory (mapowanie pamięci 00400000 - 00200000 w 3330 (mirror))
(Z/O) 00100000 BUTTON_CTRL (EepromSelX pin)
(Z/O) 01000000 CHAR_CTRL (xSynthEna2x pin)

36 1 [SIMI] SIM UART TxD
(Z) - linia Tx do karty SIM

37 1 [SIMI] SIM UART RxD
(O) - linia Rx od karty SIM

38 1 [SIMI] SIM UART Interrupt Identification
(O) - identyfikacja nadejścia przerwania z SIM

39 1 [SIMI] SIM Control
(Z/O) - rejestr kontrolny SIM (kanał komend)

3A 1 [SIMI] SIM Clock Control
(Z/O) - sterowanie zegarem transmisji SIM

3B 1 [SIMI] SIM UART TxD Low Water Mark
(O) - status zasilania SIM (brak mocy)
3C 1 [SIMI] SIM UART RxD queue fill
(O) - status przepełnienia bufora odczytu SIM

3D 1 [SIMI] SIM RxD flags
(O) - status zajętości lini Rx SIM

3E 1 [SIMI] SIM TxD flags
(O) - status zajętości lini Tx SIM

3F 1 [SIMI] SIM UART TxD queue fill
(O) - status przepełnienia bufora zapisu SIM

69 1 [UIF/KBGPIO] Keyboard ROW interrupt mask
(Z/O) - sterowanie przerwaniami z lini ROW (1=maskowanie)

6A 1 [UIF/KBGPIO] Keyboard COL 2
(Z/O) - linie COL klawiatury

6B 1 [UIF/KBGPIO] Keyboard COL interrupt
(Z/O) - sterowanie przerwaniami z lini COL (1=maskowanie)

6C 1 [UIF/GENSIO] CCont read
(O) - odczyt danych z CONNT

6D 1 [UIF/GENSIO] GENSIO status
- rejestr statusu portu GENS_I/O
(O) 00000001 Ready for data write (gotowość do zapisu)
(O) 00000010 Ready for transaction (gotowość wykrywania kolizji)
(O) 00000100 Ready for data read (gotowość do czytania)

6F 1 [UIF/GENSIO] GENSIO (3/SELECT1)
(Z/O) - port I/O

70 1 [UIF] CTRL I/O 0 direction
(Z/O) - rejestr sterujący kierunkiem przepływu I/O portu 0 (0x30)
I/O dir1=0 I/O dir2=0 Disabled
I/O dir1=0 I/O dir2=1 Input
I/O dir1=1 I/O dir2=0 Output
I/O dir1=1 I/O dir2=1 ??

71 1 [UIF] CTRL I/O 1 direction (0x31)
(Z/O) - rejestr sterujący kierunkiem przepływu I/O portu 1

72 1 [UIF] CTRL I/O 2 direction (0x32)
(Z/O) - rejestr sterujący kierunkiem przepływu I/O portu 2

73 1 [UIF] CTRL I/O 3 direction (0x33)
(Z/O) - rejestr sterujący kierunkiem przepływu I/O portu 3

A8 1 [UIF/KBGPIO] Keyboard ROW I/O direction
(Z/O) - sterowanie przepływem lini ROW klawiatury (0=wejście 1=wyjście)

A9 1 [UIF/KBGPIO] Keyboard ROW 3
(Z/O) - linia ROW3 klawiatury

AA 1 [UIF/KBGPIO] Keyboard COL I/O direction
(Z/O) - sterowanie przepływem lini COL klawiatury (0=wejście 1=wyjście)

AB 1 [UIF/KBGPIO] Keyboard COL 3
(Z/O) - linia COL3 klawiatury

AD 1 [UIF/GENSIO] GENSIO (1/SELECT2)
- port GENS_I/O 1 (wybrany jako drugi)

AE 1 [UIF/GENSIO] GENSIO (2/SELECT2)
- port GENS_I/O 2 (wybrany jako drugi)

AF 1 [UIF/GENSIO] GENSIO (3/SELECT2)
- port GENS_I/O 3 (wybrany jako drugi)

B0 1 [UIF] CTRL I/O 0 direction (2) See port 0x30

B1 1 [UIF] CTRL I/O 1 direction (2) See port 0x31

B2 1 [UIF] CTRL I/O 2 direction (2) See port 0x32

B3 1 [UIF] CTRL I/O 3 direction (2) See port 0x33

ED 1 [UIF/GENSIO] GENSIO (1/SELECT3)
- port GENS_I/O 1 (wybrany jako trzeci)

EE 1 [UIF/GENSIO] GENSIO (2/SELECT3)
- port GENS_I/O 2 (wybrany jako trzeci)

EF 1 [UIF/GENSIO] GENSIO (3/SELECT3)
- port GENS_I/O 3 (wybrany jako trzeci)

F0 1 [UIF] CTRL I/O 0 input (0x30)
(O) - wejście portu sterującego 0 (porty pracują w trybie bitowym)

F1 1 [UIF] CTRL I/O 1 input (0x31)
(O) - wejście portu sterującego 1

F2 1 [UIF] CTRL I/O 2 input (0x32)
(O) - wejście portu sterującego 2

F3 1 [UIF] CTRL I/O 3 input (0x33)
(O) - wejście portu sterującego 3



Przerwania:

W modelach 331x występują następujące przerwania:
- FIQ (DSP control)
- IRQ (przerwania maskowalne MADa)
- ICCONT (przerwania CCONTa)

FIQ:
FIQ 8 ct_timer (przerwanie timera EM i DEVIO)
FIQ 7 SIMCardDetX (wyjęcie baterii)
FIQ 6 SIM UART (przerwanie z portu SIM)
FIQ 5 I/O 0x04
FIQ 4 timer (programowany timer)
FIQ 3 MBUS TxD (gotowość)
FIQ 2 MBUS RxD (gotowość)
FIQ 1 MDISND (pusta kolejka)
FIQ 0 MDIRCV (nowe dane na stosie)

IRQ:
IRQ 8 NOP (No Operation - disables itself)
IRQ 7 NOP (No Operation)
IRQ 6 HEADDET (detekcja zestawu słuchawkowego)
IRQ 5 HOOKDET (detekcja zestawu głośnomówiącego)
IRQ 4 DSP (żądanie dostępu do zasobów)
IRQ 3 Wake up from sleep (pobudka z uśpienia)
IRQ 2 CContINT (inicjalizacja CCONTa)
IRQ 1 NOP[/color]
IRQ 0 Keyboard (przerwanie od klawiatury)

CContInt:
INT 3 CHARGER (ładowanie)
INT 4 RTC-SEC (przerwania od zegara)
INT 5 RTC-MIN
INT 6 RTC-DAY
INT 7 RTC-ALR (przerwanie od alarmu)


Mapa pamięci MCU:

000000000000FFFF RAM (= 00100000-0010FFFF)
0001000000010FFF DSP shared memory
00020000000200FF IO (Primary I/O range, configures peripherals)
0003000000030001 DSPIF (API control register)
0004000000040003 MCUIF (Secondary I/O range, configures memory ranges)
001000000011FFFF RAM
00200000003FFFFF Flash ROM
00400000005FFFFF Flash ROM 2 (=00200000-003FFFFF if flash only 2MB)
00600000007FFFFF External ROM/RAM; empty (0x00)
.................................................................................................................................

Mapa pamięci DSP

Adres...... Program ....... Data
0000
............. Reserved ....... MMR
0060
............. Reserved ....... Scratch pad RAM
0080
............. DARAM 0 ....... DARAM 0
0800
............. DARAM 1 ....... DARAM 1 - (AMR accessible)
1000
............. DARAM 2 ....... DARAM 2
2000
............. Program ........ DARAM 2
............. ROM
4000
............. Program ........ Reserved
............. ROM
B000
............. Program ........ Data ROM
............. ROM
F000
............. Program ........ Program
............. ROM .............. ROM (mirror)
FFFF

.................................................................................................................................
DSPIF (30000-30001)

00 1 [dspif] API (MCU-DSP) control register

0000000000000010 APIMODE (zarządzanie DMA do DSP 0=współdzielenie 1=tylko host)
0000000000000100 DSPINT (1=wyzwolenie przerwania)


MCUIF (40000-40003)
DSP komunikuje się z pamięcią oraz jednostką stałoprzecinkową za pomocą magistrali BusC.

Magistrala ta realizuje:
konfigurowanie pamięci
dekodowanie i wybór układu
Programowe regulowanie czasu oczekiwania (busy wait cycle)
sterowanie szyną danych (8/16 bitów)
Zerowanie Pamięci (on reset) 0x7F 0x0F 0x?? 0xC3

001 [mcuif] MCUIF0
011 [mcuif] MCUIF1
021 [mcuif] MCUIF2
031 [mcuif] MCUIF3

...............................................................................................................................

Timery:

Timer 0: (programowalny)
I/O 0x0F (byte) dzielnik zegara
I/O 0x10 (halfword) odczyt aktualnej wartości
I/O 0x12 (halfword) ustawienie następnego przerwania
(zegar taktowany jest częstotliwością 33055 Hz/dzielnik+1; zegar wyzwala przerwanie IRQ 4)

Timer 1: (taktujący)
I/O 0x04 (halfword) odczyt aktualnej wartości
(zegar taktowany jest częstotliwością 1057 Hz; wartość 0x7FFF powoduje wyzwolenie przerwania)

ASIC watchdog timer
I/O 0x03 (byte) Czas pętli w sekundach. Wartość 0xFF wyłącza watchdoga. Dojście licznika do zera powoduje reset MADa

CCont watchdog timer
CCont 0x05 - Czas pętli w sekundach. Wartość 0x3F wyłącza watchdoga. Dojście licznika do zera powoduje uruchomienie procedury Turned OFF

...............................................................................................................................

GenSIO - Generic Serial I/O

Interfejs szeregowy 2 przewodowy (clock,I/O) do komnikacji z układami peryferyjnymi: CCONT i LCD.

Procedura inicjalizacji CCONT i LCD. (zapis bajtów w takiej kolejności)

0xAF 0x60
0x6F 0x04
0xEF 0x00
0xAD 0xCF
0xED 0x20
0xAE 0x20
0xEE 0x80

..............................................................................................................................

Dzisiaj mała gratka...Zdisasemblowany kod BootROM wraz z komentarzem. (16.03.2004)

BootROM to procedura, która jest wykonywana po inicjalizacji MADa. Jej podmiana umożliwia nam coś takiego jak Flashowanie za pomocą interfejsu Dejana :)

00 ; Processor : ARMB
00 ; Target assembler: Generic assembler for ARM
00 ; Byte sex : Big endian
00
00 ; IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
00
00 ; Segment type: Pure code
00 AREA ROM, CODE, READWRITE, ALIGN=0
00 CODE32
00 ANDEQ R0, R0, R0
04 ADR R0, (loc_C+1)
08 BX R0
0C ; AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
0C CODE16
0C
0C loc_C ; CODE XREF: sub_70+10 j
0C ; DATA XREF: 040
0C MOV R2, #0x40 ; '@'
0E LSL R7, R2, #0xB ; R7 = 0x20000
10 MOV R6, #2 ; two retries
12
12 loc_12 ; CODE XREF: 16 j
12 BL sub_70
16 BNE loc_12 ; loop until FBUS_RX(==flasher SCLK) set
16 ; Flasher Identification is SCLK High,Low,High
18 MOV R0, #3
1A STRB R0, [R7,#0x18] ; [20018] <- 0x03
1A ; unknown, possibly this sets synchronous
1A ; (clocked) serial MBUS,
1A ; and MBUS (half duplex) mode to Transmit
1C LSR R6, R7, #5 ; R6 = 0x1000 retries
1E
1E loc_1E ; CODE XREF: 22 j
1E BL sub_70
22 BEQ loc_1E ; loop until FBUS_RX(==flasher SCLK) reset
24
24 loc_24 ; CODE XREF: 28 j
24 BL sub_70
28 BNE loc_24 ; loop until FBUS_RX(==flasher SCLK) set
2A
2A loc_2A ; CODE XREF: 2E j
2A BL sub_70
2E BEQ loc_2A ; loop until FBUS_RX(==flasher SCLK) reset
2E ; (flasher started bootstrap transmit)
30 STRB R2, [R7,#0x19] ; [20019] <- 0x40 (set FBUS_RX - why - clears
30 ; RXD buffer?)
32 MOV R2, #0x20 ; ' '
34 LSR R6, R7, #9 ; R6 = 0x100
36 BL sub_58 ; R0 = read halfword length
3A LSR R4, R0, #1 ; get size in halfwords instead of bytes in R4
3C BEQ loc_7A
3E MOV R0, #0x80
40 STRB R0, [R7,#0x19] ; set SDA_OUT (MBUS) high
42 LSR R5, R7, #1 ; R5 = 0x10000 (origin of DSP/MCU shared ram)
44
44 loc_44 ; CODE XREF: 50 j
44 LSR R6, R7, #6 ; R6 = 0x800 retries
46 BL sub_58 ; read a halfword
4A STRH R0, [R5] ; write to RAM at R5
4C ADD R5, #2
4E SUB R4, #1
50 BNE loc_44 ; loop until all is read
52 STRB R4, [R7,#0x19] ; set SDA_OUT (MBUS) low
54 LSR R0, R7, #1
56 MOV PC, R0 ; start bootloader
58
58 ; UUUUUUUUUUUUUUU S U B R O U T I N E UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
58 ; Read a halfword from the MBUS
58 ; in: R6=retries,R2=0x20
58 ; out: R0=halfword read
58
58 sub_58 ; CODE XREF: 36p
58 ; 46 p
58 MOV R8, LR
5A
5A loc_5A ; CODE XREF: sub_58+6 j
5A BL sub_70
5E BEQ loc_5A ; wait for byte available
60 LDRB R0, [R7,#0x1A]
62 LSL R3, R0, #8 ; store in R3, upper halfword
64
64 loc_64 ; CODE XREF: sub_58+10 j
64 BL sub_70
68 BEQ loc_64 ; wait for another byte available
6A LDRB R0, [R7,#0x1A]
6C ADD R0, R3, R0 ; store in R0, lower halfword
6E MOV PC, R8
6E ; End of function sub_58
6E
70
70 ; UUUUUUUUUUUUUUU S U B R O U T I N E UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
70
70 ; R6 = number of retries before jumping into Flash
70 ; R2 = [20019] AND value: 0x40 is bit 6 (FBUS_RX), 0x20 is bit 5 (MBUS_RXDBYTE)
70 sub_70 ; CODE XREF: 12 p
70 ; 1E p ...
70 SUB R6, #1 ; R6 = R6-1
72 BEQ loc_7A ; jump if R6 == 0
74 LDRB R0, [R7,#0x19] ;
76 TST R2, R0 ; [20019] & R2, set flags accordingly
78 MOV PC, LR
7A ; AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
7A
7A loc_7A ; CODE XREF: 3C j
7A ; sub_70+2 j
7A LSL R0, R7, #4 ; R0 = 0x200000
7C LDRB R1, [R0,#1] ; R1 = [0x200001]
7E CMP R1, #0xFF
80 BEQ loc_C ; invalid - wait for flasher
82 LSL R2, R7, #1 ; R2 = 0x40000
84 STRB R1, [R2,#2] ; boot ROM maps out
86 ADD R0, #0x40 ; '@'
88 BX R0 ; Flash jump (0x200040)
88 ; End of function sub_70
88
88 ; AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
FF ; ROM ends
FF
FF END

.............................................................................................................................

Do edycji kodu pod ASMa DCT3, używamy kompilatora z C o nazwie GCC (ostatnia wersja 3.3) najlepiej wersja 2.14, gdyż nowa nie zawiera bibliotek "binutils" z konfiguracjami dla DCT3. (wersja dla linuxa)

Nasz MAD2PR a właściwie Texas Instruments TMS320C54x wymaga biblioteki "binutils tic54x" w której zawarte są też dane dla COBBA i HAGARa.

Budowa MADa:
MAD ma wbudowaną pamięć ROM o wielkości 48kB - bez możliwości flashowania, w której znajduje się procedura boot DSP.
Oprócz tego jest normalnym kontrolerem zawierającym porty I/O port (pa0..paXXX), timery, kontroler przerwań, UARTs i system kolejkowania.
No i najważniejsze...w MADa został wbudowany 32 bitowy procesor DSP (digital signal procesor).

.............................................................................................................................

Procedura uruchamiania DSP:

DSP startuje od adresu 0xFF80 ze skoku wektora RESET 0x0F00, z przydzieloną pamięcią współdzieloną RAM od adresu 0x10E00

Tryb APIMODE=0 (rejestr DSPIF) jest automatycznie ustawiany po resecie systemowym DSP.

FF80 loc_FF80: ; CODE XREF: ROM:FF20
FF80 771D FFA8 stm #0FFA8h, PMST
FF82 F073 FF85 b loc_FF85
FF84 ; -----------------------------------------------------------
FF84 F49B retf
FF85 ; -----------------------------------------------------------
FF85
FF85 loc_FF85: ; CODE XREF: ROM:FF82
FF85 F073 0F00 b unk_F00

Standartowo po resecie, wszystkie przerwania są nieaktywne, poza IRQ 4 , które jest aktywizowane sprzętowo.

# BSCR (Bank Switching Control Register)
orm #0x0008,*(0x29)
andm #0xFFF7,*(0x29)

Inicjalizacja DSP odbywa się poprzez wspomnianą pamięć 48kB ROM...w wszystkich 3310,3330 oraz 3410 znajduje się ta sama wersja ROM : B60.6.756

Ponieważ nie ma możliwości flashowania pamięci ROM w której zaszyte są procedury DSP, stworzono możliwość uaktualnienia oprogramowania, poprzez użycie pamięci współdzielonej przez MADa i DSP.
Do tego celu używa się protokołu CodeBlock niekompatybilnego z MDI

ID ..... Funkcja
0x00 Primary initialisation ; wstępna inicjalizacja DSP
0x01 Main codeblock ; update codu
0x14 Secondary initialisation ; zakończenie update

................................................................................................................................

A teraz..... kolejna porcja danych dla osób używających Cygwina...:)

nlib - zbiór podstawowych bibliotek funkcji dla 33xx (Mbus, bootloader, I/O, Ccont i inne)
WMX - biblioteka, umożliwiająca odczyt RAMu 33xx
Ostatnio zmieniony przez mlodya 18 Mar 2004 13:03, w całości zmieniany 14 razy  
 
     

Wyświetl posty z ostatnich:   
Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group - Mapa Forum
Theme created by kemustek from Forum PC

Forum dla serwisów GSM : BITCOM.pl : Przetwornice napięcia : Darmowy Katalog Polskich Stron WWW : Piłka Nożna EURO 2012
Strona wygenerowana w 0,51 sekundy. Zapytań do SQL: 10