280 likes | 408 Views
Just enough information to program a Blackfin. 90% of this course can be done knowing less than 10% of the Blackfin Instructions Familiarization assignment for the Analog Devices’ VisualDSP++ Integrated Development Environment. Reminder – Tutorial tomorrow -- Thursday
E N D
Just enough information to program a Blackfin 90% of this course can be done knowing less than 10% of the Blackfin Instructions Familiarization assignment for the Analog Devices’ VisualDSP++Integrated Development Environment
Reminder – Tutorial tomorrow -- Thursday • This will help to get ahead on the assignments M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Tackled today Recipe for Just in time knowledge • Need a dollop of “C++” code • A smizzen of knowledge to build the simplest possible Blackfin assembly language for-loop { } and while { } • A pinch of Window’s Experience • And a bowl to put the ingredients in (a computer account with password) and somebody else to do all the clean-up (a partner) and a desk in Labs ICT318 and 320. M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
VisualDSP++ IDE Analog Devices’ integrated development environment (IDE) has been used in the following courses • Blackfin – ADSP-BF533 • ENCM415 – Assembly language and interfacing (2004) • ENCM417 – Switching to Blackfin for 2007 • ENCM491 – Real Time Systems (2003) • ENEL619.23 -- High speed embedded system architectures (2004) • ENEL583/589 – Many 4th year team projects (2004) • TigerSHARC – ADSP-TS201 • ENCM515 – Comparative Processor Architectures for DSP (Since 1999) • ENEL619.23 -- High speed embedded system architectures (2004) M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Just enough to know • If time today will do a demo. • Build a directory U:/ENCM415/Assignment • Remember to insert the BF533 board power plug (check that lights on board flash) • Activate VisualDSP -- Log into a station and use Analog devices CONFIGURATOR to set up a “BF533 session” to connect to the hardware • Use VisualDSP++ and activate a Blackfin BF533 session – lights should pause • Build a Blackfin Project, add to your directory • Add your C++ files to the project • Compile, Link and Run using the equivalent commands as with Microsoft Visual Basic, Visual Studio etc • Add your assembly ASM files to the Blackfin project • Compile, Link and Run using the equivalent commands as with Microsoft Visual Basic, Visual Studio etc • Don’t forget to add some tests so that you know the code is working M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Analog Devices CONFIGURATOR M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Run VisualDSP – Add New Project M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
WRITE main.cpp, ADD to Project M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Then BUILD (which causes a LOAD) Build and load M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Then Debug | Run the code M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Prepare for Assignment – C++ result M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
C++ Version of assignment M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Assignment talks about “auto-increment”. Here is how to “try” to get compiler to do it M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Prepare main( ) to call assembly codeand CHECK the results M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Build WITHOUT ADDING assembly code fileError message is VERY SPECIAL We thought we needed the function Assignment1_ASMversion( ) However the linker is worried about not finding _Assignment1_ASMversion__Fv M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Standard Format“Assembly code” stub Header info Prologue Code toreturn value Epilogue M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Result using “Assembly code” stub Exactly the result we expected M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Keyword – R0 – 32-bit Data Register R0 = 7; // This returns value 7 … Assembly code comment End of line marker 32 bit data register -- R0, R1, R2, R3, R4, R5, R6, R7 M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Keyword – P0 – 32-bit pointer Register 32 bit pointer register -- P0, P1, P2, P3, P4 Final exam question from last year Careful – when not in the assembler, the linker may give errors which mention p0 which stands for processor 0. The blackfin hardware can come in multi-core version (p0 and p1 for BF561) or multi-processor version. M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Keyword 32-bit Frame pointer As on many processors LINK and UNLINK instructions involve hidden operations on FP and SP (stack pointer) More on that in a later class 32 bit Frame pointer -- FP M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Keyword – Memory operations 32 bit memory read [ ] – long-word access R0 = [FP + 4]; If FP contains the value 0x20000000 then fetch the 32-bit value starting at memory location 0x20000004 and place in data register R0 M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Keyword – Memory operations 16 bit memory read W[ ] –word access R1.H = W[FP + 28]; If FP contains the value 0x20000000 then fetch the 16-bit value starting at memory location 0x20000028 and place in data register R1.H which is the UPPER part of the register R1 (R1.H and R1.L) M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Keyword – Memory operations 8 bit memory reads are also possible B[FP + 4]; M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Perhaps time for a working example M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Programmer’s model • 32 bit data register • R0, R1, R2, R3, R4, R5, R6, R7 • 16 bit data register • R0.H, R1.H, R2.H, R3.H ……. R7.H • R0.L, R1.L, R2.L, R3.L ………. R7.L • 32 bit Pointer register • P0, P1, P2, P3, P4 • NO 16 bit Pointer registers • 32 bit Frame Pointer -- FP • 32 bit Stack Pointer -- SP M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Memory access MUST be done via a Pointer register 32-bit Memory access • Place value 0x2000 into register P1 THEN • R0 = [P1] accesses (reads) the 32-bit value at 0x2000 and leaves P1 unchanged (P1 still equals 0x2000) • R0 = [P1 + 4] accesses (reads) the 32-bit value at 0x2004 and leaves P1 unchanged (P1 still equals 0x2000) • R0 = [P1++] accesses (reads) the 32-bit value at 0x2000 and autoincrements P1 by the size of a long word (4 bytes)(P1 NOW equals 0x2004) M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Memory access MUST be done via a Pointer register 16-bit Memory access • Place value 0x4000 into register P2 THEN • R0 = W[P2] accesses (reads) the 16-bit value at 0x4000 and leaves P2 unchanged (P2 still equals 0x4000) • R0 = W[P2 + 4] accesses (reads) the 16-bit value at 0x4004 and leaves P2 unchanged (P2 still equals 0x4000) • R0 = W[P2++] accesses (reads) the 16-bit value at 0x4000 and autoincrements P2 by the size of a word (2 bytes)(P2 NOW equals 0x2002) M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller
Just enough to know • If time today will do a demo. • Build a directory U:/ENCM415/Assignment • Remember to insert the BF533 board power plug (check that lights on board flash) • Activate VisualDSP Log into a station and use Analog devices CONFIGURATOR to set up a “BF533 session” to connect to the hardware • Use VisualDSP++ and activate a Blackfin BF533 session – lights should pause • Build a Blackfin Project, add to your directory • Add your C++ files to the project • Compile, Link and Run using the equivalent commands as with Microsoft Visual Basic, Visual Studio etc • Add your ASM files to the project • Compile, Link and Run using the equivalent commands as with Microsoft Visual Basic, Visual Studio etc • Don’t forget to add some tests so that you know the code is working M. Smith -- ENCM415 Assembly Language and Interfacing on the Blackfin ADSP-BF533 microcontroller