Title: Blackfin BF533 EZ-KIT Control The O in I/O
1Blackfin BF533 EZ-KIT ControlThe O in I/O
- Activating a FLASH memory output linePart 3
New instruction recap Tutorial
2Agenda
- Processors need to send out control signals (high
/ low 1 / 0 true / false) - General purpose input / output GPIO on processor
chip (16) - FLASH memory chip has additional I/O ports
connected to Ez-Lite KIT LEDs - Making the FLASH memory I/O port control the
Ez-KIT LEDs - The new Blackfin assembly language instructions
needed
3LEDs connected to FLASH port
BACKFORWARDRIGHTLEFT??? CONTROL ON Might be
connected to other thingsDONT CHANGEBEHAVIOUR
4Activating LEDs -- REVIEW
SOME LAB. 1 FUNCTIONS ARE NOW IN C
- Get the FLASH to work correctly
- InitFlashCPP( )
- Get the Port to work correctly as output for pins
PB5 ? PB0, leaving other pins unchanged - InitFlashPortCPP( )
- Write the value we want to LEDs
- WriteFlashLEDASM( int value)
- Read back the value the LEDs show
- int ReadFlashLEDASM( )
5Blackfin Memory Map
- If P0 is 0x20001000thenR0 P0 readsa
value fromFLASH BANK 0 - If R0 is 6 andP0 is 0x1000 thenP0 R0
placesa value intoSDRAM
6InitFlashCPP( ) -- REVIEW
SOME LAB. 1 FUNCTIONS ARE NOW IN C
- Get the FLASH to work correctly
- May be many processes running on the Blackfin.
All these processes may want to use InitFlashCPP(
) - InitFlashCPP( )
- If FLASH memory already configured
return without initializing - Else
- configure Memory Bank control
register - THEN configure Global control
(turns on the FLASH)
-
-
7Set the Bank control register
- Kit documentation recommends 0x7BB0
7 cyclesnot 15 11 not 15 B 1011 2 cycles 3
cycles
IGNORE 4 cycles
8Set General Control Register
- Documentation says set to 0xF for this
particular FLASH chip
ENABLE ALL
9Key issues -- REVIEW
SOME LAB. 1 FUNCTIONS ARE NOW IN C
- InitFlashCPP( )
- Does not sound too big a deal
- Set pointer to EBIU_AMBCTLO
- Then value 0x7BB07BB0
- Then use pointer value
- Then make sure write occurs NOW as this
processor can delay doing writes until
convenient - Do the same for the other 32 bit registers
10Obvious problem value needed EBIU_AMBCTL0 ?
Code review2 obviouserrors SAME ERRORS ARE
POSSIBLE IN C VERSION
11Corrected code still fails
No in a define statement No spaces in
number Spell check 0 not O DEFECTS in code
process Pair programming cost 3 5
12MIPS and Blackfin behave same
- You cant load a 32-bit register with a 32-bit
immediate value using one instruction - WRONG R0 0x7BB07BB0
- Must load low 16-bit of register R0.L
0x7BB0 - Then load high 16-bits of register R0.H
0x7B00 - You handle P0 0xFFC00A04
- REMEMBER C can introduce similar errors, but
with different detail
13More readable code
Selfdocumenting code I do defineand then
cut-and-pastethe label
14WriteFlashLEDASM(long in_value)
STILL IN BF533 ASSEMBLY CODE
- Write 1 (on) or 0 (off) to the Port to
activate LEDs connected to pins PB5 ? PB0,
leaving other pins unchanged.
15WriteFlashLEDASM(long in_value)
STILL IN BF533 ASSEMBLY CODE
- Read LED data register into processor data
register (makes a copy) - Keep top 2 bits (AND operation) of copy
- Keep bottom 6 bits of in-par 32-bit in_value
- OR the two processor data registers
- Write modified copy back into LED data
register - PROBLEM byte read and writes
16Now identify the registers to use
STILL IN BF533 ASSEMBLY CODE
- In_par is in R0
- We can use R1, R2 and R3 without saving registers
to the stack
17Add in the code we understand
STILL IN BF533 ASSEMBLY CODE
Fixed typo Still anothersyntaxproblem
188 bit and 32 bit writes
- P0 R0 32-bit write (4 bytes)
- Places all 32-bits of processor data register
into long word (32 bit) address starting at
memory location P0 - If P0 0x1000 then place 32-bit value at
memory location 0x1000 - BP0 R0 8-bit write
- Places bottom 8-bits of processor data register
into byte (8 bit) address starting at memory
location P0
198 bit and 32 bit reads
- R0 P0 32-bit read (4 bytes)
- Places all 32-bits of long word (32 bit)
address starting at memory location P0 into
processor data register - If P0 0x1000 then place 32-bit value at
memory location 0x1000 - R0 BP0 (Z) 8-bit read
- Places byte (8 bit) address starting at memory
location P0 into bottom 8-bits of processor
data register and puts 0 into the top 24 bits
of register - Must convert 8-bit read operation into a 32
bit store in register operation
20Add byte read and write operations
Is this correct for keeping top 2 bits of an
8-bit value? DEFECT if not corrected Still
syntaxproblems ERRORS Fix as exercise
21InitFlashPortCPP() to complete
NOW IN C
- Set direction to 1 on lower pins leaving other
direction values unchanged around 12 lines Read
direction byte register into processor data
register (makes a copy) - Set another processor data register to 0x3F
- OR the two data registers (HOW?)
- Write modified copy back into direction byte
register
22InitFlashCPP( ) -- Exercise
- InitFlashCPP( )
- If FLASH memory already configured
return without initializing - Else
- configure Memory Bank control
register - THEN configure Global control
(turns on the FLASH)
-
- -- 21 instructions many
cut-and-paste-modify
IF CLOCK ACTIVATED THEN ASSUME ANOTHER PROCESS
HAS ALREADY SET THE FLASH AND on BIT 0 of
EBIU_AMGCTL register followed by IF set then
JUMP
23- Work in pairs for the solutions
- These exercises will form part of take-home quiz
1 - IF-THEN-ELSE SYNTAX
- Do bits 7 to 4 of register R0 contain 12???
- R0 ????
- R1 0x000000F0 // MASK
- R2 0x000000C0 // Expected value
- R1 R0 R1 // KEEP old value
- CC R1 R2 // Check to see if 12 is
there - IF CC JUMP IS_TRUE
- IF !CC JUMP IS_FALSE
24This slide is not in the course notes
25This slide is not in the course notes
26This slide is not in the course notes
27Agenda
- Processors need to send out control signals (high
/ low 1 / 0 true / false) - General purpose input / output GPIO on processor
chip (16) - FLASH memory chip has additional I/O ports
connected to Ez-Lite KIT LEDs - Making the FLASH memory I/O port control the
Ez-KIT LEDs - The new Blackfin assembly language instructions
needed