+ All Categories
Home > Documents > Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and...

Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and...

Date post: 19-Dec-2015
Category:
View: 217 times
Download: 3 times
Share this document with a friend
24
Developing a bicycle speed-o- meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332
Transcript
Page 1: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

Developing a bicycle speed-o-meter

A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332

Page 2: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

2

General Project concept

Magnetic Sensor Signal

High speed clock signal

BlackfinProgrammableFlag (PF) Input

MotorolaParallel

Interface Timer (PIT)

Input

Page 3: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

3

Main function concept ulong DetermineSpeed(ulong wheelDiameter, ulong clockFrequency)

#define ulong unsigned long int;

extern “C” ulong CountClockASM(const int); // Assembly code interfaceextern “C” ulong CalculateSpeedASM(ulong, ulong, ulong);extern “C” void SetupInterface(void);

ulong DetermineSpeed(ulong wheelDiameter, ulong clockFrequency) { // Get to known position on magnetic sensor signal unsigned long discard_count; unsigned long count_high, count_low; SetupInterface( ); discard_count = CountClockASM(while_MagneticSensorHigh); discard_count = CountClockASM(while_MagneticSensorLow); count_high = CountClockASM(while_MagneticSensorHigh); count_low = CountClockASM(while_MagneticSensorLow); return CalculateSpeedASM(count_high + count_low, wheelDiameter, clockFrequency);}

Page 4: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

4

Required Assembly Language

extern “C” ulong CountClockASM(const int); // Assembly code interfaceextern “C” void SetupInterface(void);extern “C” ulong CalculateSpeedASM(ulong, ulong, ulong);

ulong CountClockASM(const int high_low) { ulong clock_count = 0; while (magnetic_sensor = = high_low) { // if signal is unchanged from start // Must count just one clock signal low-to-high transition while (clock_signal = = high) /* wait */; while (clock_signal = = low) /* wait */; // Changes on low-to-high edge clock_count++; } return clock_count;}

Page 5: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

5

What we need to know

How can you pass parameters between “C/C++” and assembly code functions?

How can you return a parameter from assembly code functions?

What registers are available on the processor? How do you set up the interface between the processor and the

real world Many signals are coming into processor, how do you separate

(mask off) the signals you want from those you don’t? What are the basic operations for accessing memory? What are the basic ALU operations for this processor?

Page 6: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

6

Some characteristics of the processor

Motorola BlackfinData Bus 16 bits 32 bits

Instruction Bus This is the “data” bus 64-bitsCan fetch “data” on

one bus and “instructions” on

another bus at the same time

Address bus 24-bits

Accessing “slow” external memory

32 bits

Has both “fast” internal memory and “slower”

external memory

Page 7: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

7

Programming model

MC68332 Blackfin

Data Registers D0, D1 …. D7 R0, R1 …. R7

Address Registers A0, A1 …. A6

Pointer Registers P0, P1 … P5

Frame Buffer Use A4 or A6 FP

Stack Pointer SP (A7) SP

Special DSP I0-I3, B0-B3, M0-M3, L0-L3

Page 8: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

8

Syntax examples

MC68332 BlackfinRegister to Register Move

reg1 reg 232 bit operations

MOVE.L D2, D1

(4 cycles @ 8 MHz)

R1 = R2;(1 cycle @ 500 MHz)

Register to Register Move reg1 reg 2

16 bit operations

MOVE.W D2, D1 R1.L = R2.L; and also

R1.H = R2.L;

Register to Register Move reg1 reg 2

8 bit operations

MOVE.B D2, D1

MOVE.B D2, D1EXT.B D1;

(8 cycle @ 8 MHz)

R1 = R2.B (X);(1 cycle @ 500 MHz)

Page 9: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

9

Syntax examples

MC68332 BlackfinRegister to Register ADD

reg1 reg 2 + reg332 bit operations

MOVE.L D2, D1ADD.L D3, D1 (10 cycles @ 8 MHz)

R1 = R2 + R3; (1 cycle @ 500 MHz)

Register to Register Move reg1 reg 2 + reg3

16 bit operations

MOVE.W D2, D1ADD.W D3, D1

(8 cycles @ 8 MHz)

R1.L = R2.L + R3.L (NS);

(1 cycle @ 500 MHz)

Also R1 = R2 +|- R3;

Means R1.L = R2.L – R3.L; and R1.H = R2.H + R3.H;

Register to Register Move reg1 reg 2 + reg3 8 bit

operations

MOVE.B D2, D1ADD.B D3, D1

R1.L = R2.B (X);R0.L = R3.B (X);R1.L = R1.L + R0.L (NS);

( > 3 cycles @ 500 MHz)

Page 10: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

10

In class exercise

Do what?

Page 11: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

11

32-bit Memory Move operations

Motorola Blackfin

Value at memory location 1 placed at memory location 2

MOVE.L #MEM1, A0MOVE.L #MEM2, A1

MOVE.L (A0), (A1)

36 cycles @ 8 MHz

P0.H = hi(MEM1); P0.L = lo(MEM1);

P1.H = hi(MEM2); P1.L = lo(MEM2); R0 = [P0];

[P1] = R0; > 6 cycles

Multiple moves MOVE.L #MEM1, A0MOVE.L #MEM2, A1

MOVE.L (A0)+, (A1)+

MOVE.L (A0)+, (A1)+

MOVE.L (A0)+, (A1)+

P0.H = hi(MEM1); P0.L = lo(MEM1);

P1.H = hi(MEM2); P1.L = lo(MEM2); R0 = [P0++];

[P1++] = R0;

R0 = [P0++];

[P1++] = R0;

R0 = [P0++];

[P1++] = R0;

Page 12: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

12

16-bit Memory Move operations

Motorola Blackfin

Value at memory location 1 placed at memory location 2

MOVE.L #MEM1, A0MOVE.L #MEM2, A1

MOVE.W (A0), (A1)

36 cycles @ 8 MHz

P0.H = hi(MEM1); P0.L = lo(MEM1);

P1.H = hi(MEM2); P1.L = lo(MEM2); R0 =W [P0];

W[P1] = R0; > 6 cycles

Multiple moves MOVE.L #MEM1, A0MOVE.L #MEM2, A1

MOVE.W(A0)+, (A1)+

MOVE.W(A0)+, (A1)+

MOVE.W (A0)+, (A1)+

P0.H = hi(MEM1); P0.L = lo(MEM1);

P1.H = hi(MEM2); P1.L = lo(MEM2); R0 = W[P0++] (X);

W [P1++] = R0;

R0 = W[P0++] (X);

W[P1++] = R0;

R0 =W [P0++] (X);

W [P1++] = R0;

Page 13: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

13

Memory Move operations

Motorola Blackfin

Multiple moves of registers

MOVEM.L D0-D3/A0-A5, -(SP) [- - SP] = (R7:5, P5:3);

Combination of memory moves and ALU operations

Can also do parallel read and write operations together with math operations

Syntax looks like this

R1 = R2 | | R3 = [I0++] | | [I1++] = R4;

Not all operations can be made parallel

Page 14: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

14

In class exercise

Do what

Page 15: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

15

If – then – else constructsSigned tests

Motorola BlackfinSet the condition code register

CMP.L D0, D1 CC = D1 == D0;CC = D1 < D0;CC = D1 <= D0;

Conditional jump BEQ NEXT_INSTR (D1 == D0)BLT NEXT_INSTR (D1 < D0)BLE NEXT_INSTR (D1 <= D0)

IF CC JUMP NEXT_INSTR

BNE NEXT_INSTR (D1 <> D0)BGE NEXT_INSTR (D1 >= D0)BGT NEXT_INSTR (D1 > D0)

IF !CC JUMP NEXT_INSTR

Page 16: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

16

If – then – else constructsUn-signed tests

Motorola BlackfinSet the condition code register

CMP.L D0, D1 CC = D1 == D0 (UI);CC = D1 < D0 (UI);CC = D1 <= D0 (UI);

Conditional jump BEQ NEXT_INSTR (D1 == D0)BLO NEXT_INSTR (D1 < D0)BLS NEXT_INSTR (D1 <= D0)

IF CC JUMP NEXT_INSTR

BNE NEXT_INSTR (D1 <> D0)BHS NEXT_INSTR (D1 >= D0)BHI NEXT_INSTR (D1 > D0)

IF !CC JUMP NEXT_INSTR

Page 17: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

17

Example if-then-else code

C++ example Motorola Blackfin

IF (A > B) C = D;

ELSE C = E;

Set A, B, C, D, Eto registers D0, D1, .. D4

CMP.L D1, D0 BLE ELSE MOVE.L D3, D2 JMP END_IFELSE: MOVE.L D4, D2END_IF:

Set A, B, C, D, Eto registers R0, R1, .. R4

CC = R1 < R0; IF !CC JUMP ELSE; R2 = R3; JUMP END_IF;ELSE: R2 = R4;END_IF:

CC = R1 < R0; IF CC R2 = R3; IF !CC R2 = R4;

Page 18: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

18

Example loop code -- software loop

C++ example Motorola Blackfinsum = 0;

for (loop = 0; loop < 6; loop++) sum = sum + loop;

Set D0 = sum , D1 = loop MOVE.L #0, D0 MOVE.L #0, D1

LOOP: CMP.L #6, D1 BGE PAST_LOOP ADD.L D1, D0

ADD.L #1, D1 BRA LOOP

PAST_LOOP:

Set R0 = sum , R1 = loop

R0 = 0; R1 = 0;

R2 = 6;

LOOP: CC = R2 <= R1; IF !CC JUMP PAST_LOOP; R0 = R0 + R1; R1 += 1;

JUMP LOOP

PAST_LOOP:

Page 19: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

19

Example loop code -- Harware loop

C++ example Motorola Blackfinsum = 0;

for (loop = 0; loop < 6; loop++) sum = sum + loop;

Set D0 = sum , D1 = loop MOVE.L #0, D0 MOVE.L #0, D1

LOOP: CMP.L #6, D1 BGE PAST_LOOP ADD.L D1, D0

ADD.L #1, D1 BRA LOOP

PAST_LOOP:

Set R0 = sum , R1 = loop

R0 = 0; R1 = 0;

P1 = 6;

LSETUP(LSTART, LEND) LC1 = P1;

LSTART: R0 = R0 + R1;LEND: R1 += 1;

PAST_LOOP:

Has a capability of 2 hardware (high-speed, zero overhead) loop

Page 20: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

20

Hardware test – wait while magnetic signal is “high”

C++ Motorola BlackfinMagnetic Signal Bit 1 of PADR register

of PI/T interfaceBit 10 of FIO_FLAG_D register of PF interface

while (mag_signal == HIGH)

/* wait */ ;

MASK EQU 0x1

MOVE.L #PITBASE, A0

WHILE:

MOVE.B PADR(A0), D0 AND.B #MASK, D0 CMP.B #MASK, D0 BEQ WHILE

#define MASK 0x400

P0.H = hi(FIO_FLAG_D);

P0.L = lo(FIO_FLAG_D); R1 = MASK;

WHILE:

R0 = W[P0] (Z); R0 = R0 & R1; CC = R0 == R1; IF CC JUMP WHILE (BP);

Page 21: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

21

Subroutine / Function calls

C++ Motorola Blackfin

extern “C” int FooASM(int, int, int)

C = FooASM(1,2,3)

.IMPORT _FooASM

FP EQU A6

LINK FP, -16

MOVE.L D4, 12(SP)

MOVE.L #1, 0(SP) MOVE.L #2, 4(SP)

MOVE.L #3, 8(SP)

JSR _FooASM

MOVE.L D0, D4

.. Other code

MOVE.L 12(SP), D4 UNLINK

RTS

.extern _FooASM

LINK 20;

[SP + 16] = R4;

R0 = 1;

R1 = 2;

R2 = 3;

CALL _FooASM;

R4 = R0;

.. Other code

R4 = [SP + 16];

UNLINK;

RTS;

Page 22: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

22

Code conventions for subroutines / functions

Motorola -- SDS Blackfin -- VisualDSP

Volatile registers D0, D1

A0, A1

R0, R1, R2, R3P0, P1, P2

Non-volatile registers D2, D2, D4, D5, D6, D7A2, A3, A4, A5, A6, A7

R4, R5, R6, R7

P3, P4, P5, FP, SP

Subroutine return value is passed in

D0 R0

Subroutine OUTPARS OUTPAR1 0(SP)

OUTPAR2 4(SP)

OUTPAR3 8(SP)

OUTPAR4 12(SP)

OUTPAR1 R0

OUTPAR2 R1

OUTPAR3 R2

OUTPAR4 12(SP)

Page 23: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

23

In class exercise

Do what?

Page 24: Developing a bicycle speed-o-meter A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.

04/18/23Motorola Blackfin Comparison Part 1 , Copyright M. Smith, ECE, University of Calgary, Canada

24

Information taken from Analog Devices On-line Manuals with permission http://www.analog.com/processors/resources/technicalLibrary/manuals/

Information furnished by Analog Devices is believed to be accurate and reliable. However, Analog Devices assumes no responsibility for its use or for any infringement of any patent other rights of any third party which may result from its use. No license is granted by implication or otherwise under any patent or patent right of Analog Devices. Copyright Analog Devices, Inc. All rights reserved.


Recommended