some complement
This commit is contained in:
113
4.md
Normal file
113
4.md
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
# Memory
|
||||||
|
|
||||||
|
## Default Memory Access Permissions
|
||||||
|
|
||||||
|
The Cortex-M3 memory map has a default configuration for memory access permissions
|
||||||
|
Default memory access permission is used when either:
|
||||||
|
* No MPU is present
|
||||||
|
* MPU is present but disabled
|
||||||
|
Otherwise MPU will determine
|
||||||
|
When a memory access is blocked the fault exception takes place immediately.
|
||||||
|
|
||||||
|
```python { cmd matplotlib hide }
|
||||||
|
|
||||||
|
import pymupdf
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
doc = pymupdf.open("./pdf/L4.pdf")
|
||||||
|
|
||||||
|
pix = doc[12].get_pixmap()
|
||||||
|
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
|
||||||
|
plt.axis('off')
|
||||||
|
plt.subplots_adjust(left=0, right=1, top=1, bottom=0)
|
||||||
|
plt.imshow(img)
|
||||||
|
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## MPU(Memory Protection Unit)
|
||||||
|
|
||||||
|
MPU
|
||||||
|
|
||||||
|
Regions can be overlapped only in ARMv7
|
||||||
|
|
||||||
|
## Bit-Band Operations
|
||||||
|
|
||||||
|
it allows a single load/store opertation to access a **single data bit**.
|
||||||
|
|
||||||
|
Bit-band regions:
|
||||||
|
* The first 1MB of the SRAM region
|
||||||
|
* The first 1MB of theperipheral region
|
||||||
|
|
||||||
|
They can be accessed via a separate memory region called the bit-band alias.
|
||||||
|
|
||||||
|
Bit-Banding done transparently by **bus matrix**.
|
||||||
|
|
||||||
|
### Write to Bit-Band Alias
|
||||||
|
|
||||||
|
* Without Bit-Band:
|
||||||
|
```armasm
|
||||||
|
LDR R0, =0x20000000 ; Setup address
|
||||||
|
LDR R1, [R0] ; Read
|
||||||
|
ORR.W R1, #0x4 ; Modify bit
|
||||||
|
STR R1, [R0] ; Write back result
|
||||||
|
```
|
||||||
|
|
||||||
|
* With Bit-Band:
|
||||||
|
```armasm
|
||||||
|
LDR R0, =0x22000008 ; Setup address
|
||||||
|
MOV R1, #1 ; Setup data
|
||||||
|
STR R1, [R0] ; Write
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Read from the Bit-Band Alias
|
||||||
|
|
||||||
|
To get bit 2 in word data in address `0x20000000`:
|
||||||
|
* Without
|
||||||
|
```armasm
|
||||||
|
LDR R0, =0x20000000 ; Setup address
|
||||||
|
LDR R1, [R0] ; Read
|
||||||
|
UBFX.W R1, R1, #2, #1 ; Extract Bit[2]
|
||||||
|
```
|
||||||
|
|
||||||
|
* With
|
||||||
|
```armasm
|
||||||
|
LDR R0, = 0x22000008 ; Setup address
|
||||||
|
LDR R1, [R0] ; Read
|
||||||
|
```
|
||||||
|
|
||||||
|
### Advantages of using bit-band ops
|
||||||
|
|
||||||
|
* Faster bit operations with fewer instructions
|
||||||
|
* Prevent a **race condition** problem in bit modification
|
||||||
|
|
||||||
|
|
||||||
|
### Usecase in C
|
||||||
|
|
||||||
|
* There is no native support of bit-band ops in most C compilers
|
||||||
|
* The simplest solution is to separately declare the address and the bit-band alias of a memory location
|
||||||
|
|
||||||
|
```c
|
||||||
|
#define DEVICE_REGO *((volatile unsigned long *) 0x40000000)
|
||||||
|
#define DEVICE REGO_BIT0 *((volatile unsigned long *) 0x42000000)
|
||||||
|
#define DEVICE REGO_BIT1 *((volatile unsigned long *) 0x42000004)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Unaligned Transfers
|
||||||
|
|
||||||
|
Coretex-M3 optionally supports unaligned transfers on single accesses.
|
||||||
|
Data memory accesses can be defined as aligned or unaligned.
|
||||||
|
|
||||||
|
Unaligned transfers are converted into multiple aligned transfers by the processor's bus interface unit:
|
||||||
|
* transparent to application programmers
|
||||||
|
* it takes more clock cycles for a single data access
|
||||||
|
|
||||||
|
Limitations:
|
||||||
|
* Not supported in load/store multiple instructions
|
||||||
|
* Stack operations (PUSH/POP) must be aligned
|
||||||
|
* Exclusive access must be aligned
|
||||||
|
* Unaligned transfers are not supported in bit-band ops
|
||||||
31
5.md
Normal file
31
5.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# ARM ISA
|
||||||
|
|
||||||
|
## Syntax of Assembly
|
||||||
|
|
||||||
|
* Label: Define a symbol
|
||||||
|
```
|
||||||
|
label:
|
||||||
|
```
|
||||||
|
|
||||||
|
* Instruction
|
||||||
|
* Directive
|
||||||
|
```
|
||||||
|
.directive[;]
|
||||||
|
```
|
||||||
|
* macro_invocation
|
||||||
|
|
||||||
|
## Assembly Expression
|
||||||
|
|
||||||
|
Expressions consist of one or more integer literals or symbol references, combined using operators. Expression can be used as instruction operands or directive argument.
|
||||||
|
|
||||||
|
Assembler evaluates all expression, which means **no rum-time evaluation**.
|
||||||
|
|
||||||
|
Assembly Expressions are
|
||||||
|
* Constnats
|
||||||
|
* Symbol References
|
||||||
|
* Operators
|
||||||
|
* Unary Operators: `+`, `-`, `~`
|
||||||
|
* Binary Operators: `+`, `-`, `*`, `/`, `%`
|
||||||
|
* Binary Logical Operators: `&&`, `||`
|
||||||
|
* Binary Bitwise Operators: `&`, `|`, `^`, `>>`, `<<`
|
||||||
|
* Binary Comparison Operators: `<`, `<=`, `>`, `>=`, `==`, `!=`
|
||||||
BIN
pdf/L4.pdf
(Stored with Git LFS)
Normal file
BIN
pdf/L4.pdf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
pdf/L5.pdf
(Stored with Git LFS)
Normal file
BIN
pdf/L5.pdf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
pdf/L6.pdf
(Stored with Git LFS)
Normal file
BIN
pdf/L6.pdf
(Stored with Git LFS)
Normal file
Binary file not shown.
Reference in New Issue
Block a user