100% found this document useful (2 votes)
567 views

ARM Parallel IO

Arm parallel io's

Uploaded by

Aaaa Aaaa
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
567 views

ARM Parallel IO

Arm parallel io's

Uploaded by

Aaaa Aaaa
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 34

Parallel Input/Output

Textbook Chapter 14 – General-Purpose Input/Output


STM32F407 Reference Manual, Chapter 8 (general-purpose IOs)
Computer Architecture (Chapter 1)
Von-Neumann Harvard
Instructions and data are stored in Data and instructions are stored
the same memory. into separate memories.

I/O
Peripherals
I/O Address
Peripherals Data
Address
Data

Memory-mapped I/O : I/O peripherals assigned addresses in memory address map


Isolated I/O : I/O peripherals have a separate (isolated) address map
Embedded system components

STM32F407VG
Arm Cortex-M4 based system
Microcontroller System bus
ARM® CortexTM-M
processor
Input
PPB ports
Internal
Advanced
peripherals High-perf Output
Bus ports
Instructions
Flash ROM Data
ICode bus DCode bus RAM

 ARM Cortex-M4 processor


 Harvard architecture
Different busses for instructions and data
 RISC machine
Pipelining effectively provides single cycle operation for many
instructions
Thumb-2 configuration employs both 16 and 32 bit instructions

Bard, Gerstlauer, Valvano,Yerraballi


Arm Cortex-M4 processor
Interrupt
Signals
Interrupt
Control
ST-Link
Debugger
(on the board)

Program memory Data memory I/O devices


Arm Cortex-M4
memory map 4

STM32F407VG Microcontroller
1. Flash memory @0x08000000
2. SRAM @0x20000000
3. ST peripheral modules*
4. Cortex-M4 peripherals*
*Memory-Mapped I/O

1
ROM
CPU
ST Microelectronics
STM32F40x RAM
microcontroller
General-Purpose
Inputs/Outputs
(GPIO)

Other
Peripheral
Other Modules
Peripheral
Modules
STM32F407 flash memory
Main memory = 1Mbyte = 7x128K + 1x64K + 4x16K “sectors”
(Commands erase one “sector” or entire memory)

Program code,
Constant data

Separate,
one-time
programmable
STM32F407 SRAM blocks
 Byte, half-word, and word addressable
 192Kbytes of system SRAM
 112Kbyte and 16Kbyte blocks at 0x2000_0000
 Accessible by all AHB masters
 64Kbyte block at 0x1000_0000
 Accessible by CPU only via D-bus
 Supports concurrent SRAM accesses to separate blocks
 4Kbytes of battery-backed-up SRAM
 Configure with control registers
Input/Output (I/O) Overview
 Issues
 Device selection: I/O addressing/address decoding
 Data transfer: amount, rate, to/from device
 Synchronization: CPU and external device
 Bus structures
 Links: Internal bus, system bus, data link
 Memory-mapped I/O
 Synchronization
 Programmed I/O
 Interrupt-driven I/O
 DMA (Direct Memory Access) I/O
Interface between CPU and external device
 “Device” may include digital and/or non-digital components.
 Two paths: CPU-to-interface; interface-to-device
 Can be different data widths and speeds (data rates)
 Might not be ready “at the same time”
 Typical digital interface to CPU is via addressable registers
 Registers assigned memory-mapped (or isolated I/O) addresses

Interface
control
reg

mechanism
CPU data
System bus reg Data “Device”
link

status
reg
Simple input: on/off switch
+3.3V +3.3V
TM4C TM4C
10kΩ
s Input port t Input port
10kΩ
Negative logic Positive logic

Negative Logic s Positive Logic t


– pressed, 0V, false – pressed, 3.3V, true
– not pressed, 3.3V, true – not pressed, 0V, false
+3.3V +3.3V +3.3V +3.3V
TM4C TM4C TM4C TM4C
10kΩ 10kΩ
3.3V 0V
s Input port s Input port t Input port t Input port
0.0V 3.3V
10kΩ 10kΩ
Pressed Not pressed Pressed Not pressed

Bard, Gerstlauer,
Valvano, Yerraballi
Example – 10-key matrix keypad
1
Drive (output pins) 0
1
1
Uses both input
and output pins.
1

Read (input pins) 0

Pull-up Pressed
10K
Resistors Key
+3v
Simple output: LED
anode (+)

anode cathode
cathode (-)
“big voltage connects to big pin”

Current
high LM3S +3.3V
2 + a Out R
I I or 1mA
R 1mA TM4C
(mA) 1 - k LM3S LED
or
TM4C LED
voltage low
0 Out
1.5 1.6 1.7
V (volts)
(a) LED curve (b) Positive logic interface (c) Negative logic interface

Bard, Gerstlauer,
Valvano, Yerraballi
LED interfaces
Positive logic, low current Positive logic, high current
high +5V
Out TM4C 7405 10mA
R 2mA or 7406 R
TM4C +5V LED
LED high
Out 0.5V
PF2

Negative logic, low current Negative logic, high current


+5V
TM4C 3.3 V TM4C 10mA
R 7407 R
2mA +5V LED
LED low
Out 0.5V
Out
low
7-segment LED/LCD display
 May use parallel or multiplexed port outputs.
a a

b b
f f
g g

Common anode or c c
Common cathode e e

d d

Select digit

Data[6:0]
To LEDs a-g
Discovery board button and LEDs
PAx = port GPIOA pin PDx = port GPIOD pin

LED3
 The user button is positive logic LED4 LED5
 Uses external pull-down resistor (outside the uC)
LED6
 Reset (black button) – NRST pin
 LED3-LED6 are positive logic
 LED7 (USB OTG, Vbus) – PA9
 LED8 (USB OTG, overcurrent) – PD5
 LED1 – USB communication From Discovery Board
 LED2 – 3.3v power User Manual
Parallel input/output ports
 Parallel port => multiple bits read/written in parallel by the
CPU
 Parallel input port = portal through which a CPU can access
information FROM an external device
 Parallel output port = portal through which a CPU can send
information TO an external device
 Multiple I/O ports are contained in the most microcontrollers
 Some microcontrollers allow for additional I/O ports to be added
via “expansion buses”
 Each port is configured and accessed via one or more registers
 Each register is assigned a unique memory address
 CPU reads/writes data via port data registers
 Mode Register (or data direction register) for each port
determines whether each pin is input or output
I/O Ports and Control Registers
Read from port address
GPIOA_IDR
n n
Input data
Processor
n n
DQ Input/Output Port

GPIOA_ODR Write to port address


Output data
Direction bits
n 1 means output
DQ 0 means input
GPIOA_MODER
Bus Write to port direction register

 The input/output direction of a bidirectional port is specified by its “mode”


register (sometimes called “data direction” register)
 GPIOx_MODER : designate each pin as input, output, analog, or
“alternate function”

Question:What if the program reads from GPIOA_ODR?


Bard, Gerstlauer,
Valvano, Yerraballi
STM32F4xx microcontroller
General-Purpose I/O (GPIO) ports
 Up to 144 GPIO pins, individually configurable
 # GPIO ports varies among microcontroller parts
 Each port (GPIOA through GPIOI) comprises 16 GPIO pins
 Pin options (each pin configurable via GPIO registers):
 Output: push-pull or open-drain+pull-up/down + selectable speed
 Input: floating, pull-up/down
 Analog: input or output
 Alternate functions: up to 16 per pin
 Data to/from peripheral functions (Timers, I2C/SPI, USART, USB, etc.)
 Digital data input/output via GPIO registers
 Input data reg. (IDR) – parallel (16-bit) data from pins
 Output data reg. (ODR) – parallel (16-bit) data to pins
 Bit set/reset registers (BSRR) for bitwise control of output pins
STM32F4xx GPIO pin structure
Analog IO

Alt. Function

PIN
IDR

BSRR
ODR

Alt. Function
GPIO “mode” register
 GPIOx_MODER selects operating mode for each pin
x = A…I (GPIOA, GPIOB, …, GPIOI)
 2 bits per pin: 31 7 6 5 4 3 2 1 0
00 – Input mode (reset state): … Pin 3 Pin 2 Pin 1 Pin 0
Pin value captured in IDR every bus clock (through Schmitt trigger)
01 – General purpose output mode:
 Write pin value to ODR
 Read IDR to determine pin state
 Read ODR for last written value
10 – Alternate function mode:
Select alternate function via AF mux/register (see later slide)
11 – Analog mode:
Disable output buffer, input Schmitt trigger, pull resistors
(so as not to alter the analog voltage on the pin)
GPIO data registers
 16-bit memory-mapped data registers for each port GPIOx
x = A…I (GPIOA, GPIOB, …, GPIOI)
 GPIOx_IDR
 Data input through the 16 pins
 Read-only
 GPIOx_ODR
 Write data to be output to the 16 pins
 Read last value written to ODR
 Read/write (for read-modify-write operations)
 C examples:
GPIOA->ODR = 0x45; //send data to output pins
N = GPIOA->IDR; //copy data from in pins to N
GPIO port bit set/reset registers
 GPIO output bits can be individually set and cleared
(without affecting other bits in that port)
 GPIOx_BSRR (Bit Set/Reset Register)
 Bits [15..0] = Port x set bit y (y = 15..0) (BSRRL)
 Bits [31..16] = Port x reset bit y (y = 15..0) (BSRRH)
 Bits are write-only
 1 = Set/reset the corresponding GPIOx bit
 0 = No action on the corresponding GPIOx bit
(“set” has precedence if bit=1 in both BSSRL and BSSRH)
 C examples:
GPIOA->BSRRL = (1 << 4); //set bit 4 of GPIOA
GPIOA->BSRRH = (1 << 5); //reset bit 5 of GPIOA
Alternate function selection
Each pin defaults to GPIO pin at reset (mux input 0)

GPIOx_AFRL GPIOx_AFRH
(low pins 0..7) (high pins 8..15)
GPIO pin option registers
Modify these registers for other than default configuration
 GPIOx_OTYPER – output type
 0 = push/pull (reset state)
 1 = open drain
 GPIOx_PUPDR – pull-up/down
 00 – no pull-up/pull-down (reset state)
 01 – pull-up
 10 – pull-down
 GPIOx_OSPEEDR – output speed
 00 – 2 MHz low speed (reset state)
 01 – 25 MHz medium speed
 10 – 50 MHz fast speed
 11 – 100 MHz high speed (on 30 pf)
GPIO register addresses
 Base addresses of GPIOx register “blocks”
 GPIOA = 0x4002 0000 • GPIOF = 0x4002 1400
 GPIOB = 0x4002 0400 • GPIOG = 0x4002 1800
 GPIOC = 0x4002 0800 • GPIOH = 0x4002 1C00
 GPIOD = 0x4002 0C00 • GPIOI = 0x4002 2000
 GPIOE = 0x4002 1000
 Register address offsets within each GPIOx register block
 GPIOx_MODER = 0x00 pin direction/mode register
 GPIOx_OTYPER = 0x04 pin output type register
 GPIOx_OSPEEDR = 0x08 pin output speed register
 GPIOx_PUPDR = 0x0C pull=up/pull-down register
 GPIOx_IDR = 0x10 input data register
 GPIOx_ODR = 0x14 output data register
 GPIOx_BSRR = 0x18 bit set/reset register
 GPIOx_BSRRL = 0x18 BSRR low half – set bits
 GPIOx_BSRRH = 0x1A BSRR high half – reset bits
 GPIOx_LCKR = 0x1C lock register
 GPIOx_AFRL = 0x20 alt. function register – low
 GPIOx_AFRH = 0x24 alt. function register - high
Assembly language example
;Symbols for GPIO register block and register offsets
GPIOA EQU 0x40020000 ;GPIOA base address
GPIO_ODR EQU 0x14 ;ODR reg offset
GPIO_IDR EQU 0x10 ;IDR reg offset
;Alternative – create symbol for each register address
GPIOA_ODR EQU GPIOA + GPIO_ODR ;addr of GPIOA_ODR
GPIOA_IDR EQU GPIOA + GPIO_IDR ;addr of GPIOA_IDR

;Using addresses = GPIO base + register offset


LDR r0,=GPIOA ;GPIOA base address
STRH r1,[r0,#GPIOx_ODR] ;GPIOA base + ODR offset
LDRH r1,[r0,#GPIOx_IDR] ;GPIOA base + IDR offset
;Using separate address for each GPIO register
LDR r0,=GPIOA_ODR ;GPIOA_ODR address
STRH r1,[r0]
LDR r0,=GPIOA_IDR ;GPIOA_IDR address
LDRH r1,[r0]
How would we address GPIOD ODR/IDR?
GPIO port initialization ritual
• Initialization (executed once at beginning)
1. Turn on GPIOx clock in register RCC_AHB1ENR
(Reset and Clock Control , AHB1 peripheral clock register)
• RCC register block base address = 0x4002 3800
• AHB1ENR register offset = 0x30
• AHB1ENR bits 0-8 enable clocks for GPIOA-GPIOI, respectively
2. Configure “mode” of each pin in GPIOx_MODER
• Input/Output/Analog/Alternate Function
3. Configure1 speed of each output pin in GPIOx_OSPEEDR
4. Configure1 type of each pin in GPIOx_OTYPER
5. Configure1 pull-up/pulldown of each pin in GPIOx_PUPDR
1 if other than reset state required
• Input from switches, output to LEDs
Read/write 16-bit data via GPIOx_IDR/ODR
Set/clear output pins via GPIOx_BSRRL/BSRRH
To set bits
The or operation to set bits 3-0 of GPIOD_MODER, to select analog mode for
pins PD1 and PD0.
( The other 28 bits of GPIOD_MODER are to remain constant.)
Friendly software modifies just the bits that need to be.
GPIOD_MODER |= 0x0F; // PD1,PD0 analog
Assembly:
LDR R0,=GPIOD_MODER
LDR R1,[R0] ; read previous value
ORR R1,R1,#0x0F ; set bits 0-3
STR R1,[R0] ; update

c7 c6 c5 c4 c3 c2 c1 c0 value of R1
0 0 0 0 1 1 1 1 0x0F constant
c7 c6 c5 c4 1 1 1 1 result of the ORR

Bard, Gerstlauer, Valvano, Yerraballi


To clear bits
The AND or BIC operations to clear bits 3-0 of GPIOD_MODER to select “input
mode” for pins PD1 and PD0. (Without altering other bits of GPIOD_MODER.)
Friendly software modifies just the bits that need to be.
GPIOD_MODER &= ~0x0F; // PD1,PD0 output
Assembly:
LDR R0,=GPIOD_MODER
LDR R1,[R0] ; read previous value
BIC R1,R1,#0x0F ; clear bits 3-0
STR R1,[R0] ; update

c7 c6 c5 c4 c3 c2 c1 c0 value of R1
1 1 1 1 0 0 0 0 BIC #x0F = AND #0xFFFFFFF0
c7 c6 c5 c4 0 0 0 0 result of the BIC

Bard, Gerstlauer, Valvano, Yerraballi


To toggle bits
The exclusive or operation can also be used to toggle bits.
GPIOD_ODR ^= 0x80; /* toggle PD7 */

Assembly:
LDR R0,=GPIOD_ODR
LDRH R1,[R0] ; read port D
EOR R1,R1,#0x80 ; toggle state of pin PD7
STRH R1,[R0] ; update port D

b7 b6 b5 b4 b3 b2 b1 b0 value of R1
1 0 0 0 0 0 0 0 0x80 constant
~b7 b6 b5 b4 b3 b2 b1 b0 result of the EOR

Bard, Gerstlauer, Valvano, Yerraballi


To set or reset bits using BSSR
Use BSSR register to set or reset selected GPIO bits, without affecting the others
GPIOD_ODR |= 0x0080; // PD7 = 1
GPIOD_ODR &= ~0x0400; // PD10 = 0

Assembly:
LDR R0,=GPIOD ; GPIOD base address
MOV R1,#0x0080 ; select PD7
STRH R1,[R0,#BSSRH] ; set PD7 = 1
MOV R1,#0x0400 ; select PD10
STRH R1,[R0,#BSSRL] ; reset PD10 = 0

Alternative: write concurrently to BSSRH and BSSRL (as one 32-bit register)
LDR R0,=GPIOD ; GPIOD base address
MOV R1,#0x0400 ; select PD10 in BSSRL
MOVT R1,#0x0080 ; select PD7 in BSSRH
STR R1,[R0,#BSSR] ; PD10=0 and PD7=1
Switch Interfacing
Not +3.3V +3.3V
pressed Pressed LM3S or LM3S or
10kΩ TM4C TM4C
s Input port t Input port
10kΩ
Open Closed Negative logic Positive logic

The and operation to extract, or mask, individual bits:


Pressed = GPIOA_ODR & 0x10;
//true if PA6 switch pressed (pos. logic)
Assembly:
LDR R0,=GPIOA_IDR
LDRH R1,[R0] ; read port A IDR
AND R1,#0x10 ; clear all bits except bit 6
LDR R0,=Pressed ; update variable
STRH R1,[R0] ; true iff switch pressed

a7 a6 a5 a4 a3 a2 a1 a0 value of R1
0 1 0 0 0 0 0 0 0x40 constant
0 a6 0 0 0 0 0 0 result of the AND

Bard, Gerstlauer, Valvano, Yerraballi

You might also like