SOCIIA5 Hamdi PDF
SOCIIA5 Hamdi PDF
SOCIIA5 Hamdi PDF
Page 2
Cest quoi un
SoC?
Page 3
Architecture?
Comment le
programmer
?
Plan de cours
Processeurs avances
Page 4
Projet de synthese
processeurs embarqus
1
2
Processeurs ARM
FPGA
6
Page 6
Mmoires
Page 7
Page 8
Page 9
ASIC
Processeur
E/S
Mmoire
Partie matrielle
Partie logicielle
Page 10
Page 11
Page 12
Exemple de SoC
NEXCOM Forays into ARM SOC
Solutions for Internet of Things
Page 13
http://www.nexcom.com/
Exemple de SoC
Page 14
Exemple de SoC
ARM1176JZ
Page 15
Micro-contrleurs
Utilis pour le contrle embarqu
Censeur, contrleurs simples
Manipule des vnements, quelques donnes mais en faible
quantit
Exemple: camscope, disque dur, appareil photo numrique,
machine laver, four micro-onde
Quelques caractristiques frquentes
Priphriques prsents sur le circuit (timer, convertisseur
analogique numrique, interface de communication), accessible
directement grce aux registres
Programme et donnes intgres au circuit
Accs direct du programmeur de nombreuses broches
du circuit
Instructions spcialises pour les manipulation de bits.
Page 18
ARM
ARM SoC
Page 26
ARM
ARM SoC
Page 27
Modle de programmation :
Bas sur une grande quantit de registres gnralistes, qui peuvent contenir
des donnes ou des adresses:
R0 R12
R13 = Stack pointer pile
R14 = Link register (pour des instructions de branchements)
R15 = Program Counter
CPSR = Current Program Status Register (tat et mode courants)
Page 28
Modle de programmation :
Jeu d'instructions :
Instructions de traitement de donnes :
ADD, ADC (add with carry)
SUB, SBC (substract with carry)
AND, ORR (or), EOR (xor)
LSL (logical shift left), LSR (logical shift right), ROR (rotate right),
MUL (multiplication)
Instructions d'accs la mmoire :
LDR (load register from memory)
STR (store register to memory)
Instructions de branchements :
B (non conditionnel)
BEQ, BNE (branchement si gal, si diffrent)
BGE, BLE (branchement si , si ")
Page 29
r3
mmoire
r3
mmoire
Page 30
fp #-24
fp #-16
1
r3
Mov: charge une entier dans un registre
mov r3, #1
str r3, [fp, #-16]
fp #-16
mmoire
@ charger r3 par 1
@ stockage 1 contenu du r3 dans fact mmoire
Code :
Initialisation
Renvoi vers le test de i<x
Multiplication
Fact=Fact*i
et
incrmentation
test de i<x
Ble .L 3
Page 32
Code :
Initialisation
Renvoi vers le test de i<x
Multiplication
Fact=Fact*i
et
incrmentation
test de i<x
Ble .L 3
Page 33
Programme assembleur:
Exercice ASM
Page 35
Exercice ASM
Page 36
Exercice ASM C
Page 37
Exercice ASM C
ASM
Page 38
Page 39
Page 40
GPIO
Gnralits
Chaque port peut tre configur par le software en entre
ou en sortie grce un registre de configuration (32 bits).
Les ports du GPIO peuvent tre partags avec des
AFIO.
Page 42
GPIO
GPIO
Rsumons :
En mode Push-Pull, c'est le port d'E/S qui impose le
niveau logique d'une broche, que ce soit un niveau
'1' ou '0'. Il est le matre, le circuit extrieur est
l'esclave, rcepteur.
En mode Open Drain (Drain est le nom de la broche
du transistor MOS relie la broche : Drain
laiss ouvert), le port d'E/S ne peut imposer que le
niveau logique '0'. Le niveau '1' est fix par le circuit
extrieur. Le port d'E/S n'est donc pas le seul matre
du potentiel sur la broche. Le circuit extrieur l'est
aussi.
Page 44
Autres fonctions
Mcanisme de verrouillage
Set/reset de bit
Configuration analogique
Page 46
Page 48
GPIO Mthodologie
2.
3.
Page 49
GPIO Mthodologie
Documents
1.
2.
Page 50
GPIO Methodologie
GPIO Mthodologie
Fichier_gpio.c
/*Configure GPIO pin */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pin */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
Page 52
GPIO Mthodologie
Page 53
Source : DM00039084.pdf
GPIO Mthodologie
Configuration Registers
The STM32 has four configuration registers for each of the ports.
Port mode register GPIOx_MODER
Output type register GPIOx_OTYPER
Speed register GPIOx_OSPEEDR
Pull-up/Pull-down register GPIOx_PUPDR
Each of these registers is 32-bits wide although not all of the bits are used in
all of the registers.
Page 54
GPIO Mthodologie
Port Mode Register GPIOx_MODER
This 32 bit register holds 2 bit values which defines the operation mode. The
modes allowed are:
Bit Values
00
01
10
11
Description
Input
General purpose output
Alternate function
Analog
Page 55
GPIO Mthodologie
Page 56
GPIO Mthodologie
Page 57
GPIO Mthodologie
Page 58
Description
No pull-up or pull-down resistor
Pull-up resistor
Pull-down resistor
Reserved
GPIO Mthodologie
A more effective way of setting/resetting a bit in the output register is to use the bit
set/reset register.
Set/reset register
The set/reset register sets or resets a single bit in the output data register.
Bit Set/Reset Register GPIOx_BSSR
This is a 32-bit register and it is split into two halves, the lower 16 bits are used for
setting a bit and the upper 16 bits are used for resetting a bit. This is a write only
register; reading this register will return 00000.
Setting a bit in the lower 16-bits of this register will cause the corresponding bit in the
output data register to be set to 1.
Similarly, setting a bit in the upper 16-bits of this register will cause the corresponding
bit in the output data register to be set to 0.
Exemple:
Valeurs de sortie :
reg pour mise en On de la led rouge : GPIOD->BSRRL = 0x4000;
reg pour mise en Off de la led rouge : GPIOD->BSRRH = 0x4000;
Page 59
C embarqu: Mthodologie
Mthodologie
GPIO Exemple
Le STM32F4 renferme 5 GPIOx chaque port contient 16
pin , chaque pin est configurable en plusieurs modes
possibles.
Le bouton est connect au Port A pin0.
Bouton user
GIOPA
Pin 0
But user
Page 61
Configuration du bouton:
void BTN_Init(void) {
RCC->AHB1ENR |= ((1UL << 0) ); /* Enable GPIOA clock
*/
GPIOA->MODER &= ~((3UL << 2*0) );
/* PA.0 is
input
*/
GPIOA->OSPEEDR &= ~((3UL << 2*0) ); /* reset du
registre OSPEEDER avant de le reprogrammer par une
nouvelle valeur */
GPIOA->OSPEEDR |= ((2UL << 2*0) ); /* PA.0 is 50MHz
Fast Speed */
GPIOA->PUPDR &= ~((3UL << 2*0) );
/* PA.0 is no
Pull up , le reste ici joue le meme role que la
reprogrammation car en tout cas on a besoin de charger
ce registre par des 0 pour configurer le pin en Pull up
*/
}
Driver extensible
main
Driver.h
Convert.asm
Driver.C
Driver extensible
Convert.s :
DAC
DAC
ADC
Page 66
NOC ARM
ARM1176JZ
Page 67
NOC ARM
Page 68
NOC ARM
Page 69
NOC ARM
Exemple :
Page 70
NOC ARM
Exemple :
Page 71
Page 72
Page 73
NOC ARM
Etude de cas
SoC stm32f407vg:
Bus AHB, GPIO, DAC
AHB1ENR 32b
MODER 32b
OSPEEDER 32b
IDR/ODR 16
GPIOx
Page 74
NOC ARM
Etude de cas
SoC stm32f407vg:
Bus AHB, GPIO, DAC
DM00031020.pdf
Mode input pour pin0
*~(3<<2*00)
*~(3<<2*00)
Frequ = 2 Mhz
Masque , data:(0/1)
pin15
Data=GPIOA&(1<<0)
pin0
GPIOA
Page 76
1<<00
Etude de cas
SoC stm32f407vg:
Bus AHB, GPIO, DAC
|=(1<<3)
Mode output
Frq=50MHz
|=(2<<2*15)
Pin 15=1
|=(1<<15)
pin15
pin0
GPIOD
Page 77
|=(1<<2*15)
Etude de cas
SoC stm32f407vg:
Bus AHB, GPIO, DAC
|=(1<<3)
Mode output
..
fpin15=50MHz,Fpin14=100
..
Pin15,14
pin0
GPIOD
Page 78
Etude de cas
SoC stm32f407vg:
Bus AHB, GPIO, DAC
|=(1<<3)
Mode output
|=(1<<15*2)+(1<<14*2)
fpin15=50MHz,Fpin14=100
|=(2<<15*2)+(3<<14*2)
|=(1<<15)+(0<<14)
Pin15,14
pin0
GPIOD
Page 79
Etude de cas
SoC stm32f407vg:
Bus AHB, GPIO, DAC
DM00031020.pdf p172
APB1ENR
CR
MODER
DHR12R1/R2
Pin 5, 4
GPIOD
Page 80
pin0
DAC
Page 81
// Ch. 2 as TI2
// Ext. clk mode 1
// TI2FP2 as ext. clock
// enable counting
while (1) {
for (int i = 0; i<100000; i++) {}; // waste some time
if (GPIOA->IDR & 0x01)
TIM2->CNT = 0;
// reset counter
if (GPIOA->IDR & 0x02)
TIM2->CR1 |= 0x01; // enable counter
if (GPIOA->IDR & 0x04)
TIM2->CR1 &= ~0x01; // disable counter
};
}
ARM1176JZ
Page 85
Systme dhorloge
Bus ARM
TIMERx
BUS ARM
Page 88
BUS ARM
Page 89
BUS ARM
Exemple :
Page 90
Page 91
BUS ARM
AHB1ENR 32b
MODER 32b
OSPEEDER 32b
IDR/ODR 16
GPIOx
Page 92
NOC ARM
1<<00
*~(3<<2*00)
*~(3<<2*00)
Frequ = 2 Mhz
Masque , data:(0/1)
pin15
Data=GPIOA&(1<<0)
pin0
GPIOA
Page 94
BUS ARM
APB1ENR
CR
MODER
DHR12R1/R2
Pin 5, 4
pin0
GPIOD
Page 95
BUS ARM
TIMER2:
RCC->APB1ENR |= 0x01; // Clock for Timer2
BUS ARM
RCC->APB1ENR |= 0x01;
CR
MODER
DHR12R1/R2
Pin 5, 4
pin0
GPIOD
Page 97
Les TIMERS
Les TIMERS
8 Timers
Groupe Timer Fmax
84 mhz via APB1
Groupe Timer Fmax
168 mhz via APB2
Page 98
Les TIMERS
Les TIMERS
8 Timers
4 sorties
MLI
Quels PIN ?
AF
Page 99
Les TIMERS
Alternates functions
Les TIMERS
Alternates functions:
AF1: TIM1/TIM2, AF2 TIM3..5, AF9: can
16 AF sur chaque pin, la configuration par 4 bits via aux reg AFRL
et AFRH
Page 101
Les TIMERS
TIM3..5
Page 102
Les TIMERS
Alternates functions
AFRL pour configurer les pins de 0 7
AFRH pour configurer les pins de 8 15
Les Timer 3 et 4 utiliser ici, sont
connects quel pin ?
Page 103
Les TIMERS
Alternates functions
Registre AF[1]: AFH, pin 0->7
Registre AF[0]: AFL, pin 8->15
Exemple 4 sorties de TIM3 comme AF via au port C :
Chaque pin est configurable par 4 bits
GPIOC->AF[0] |=(2<<4*6)+(2<<4*7); // en hexa 0x22000000
GPIOC->AF[1] [=(2<<4*0)+;(2<<4*1); //pin 8et9 : les 2 premiers bits
de AFH en hexa : 0x00000022
Comment configure les 4 Sorties de TIM4 comme AF via au port D:
GPIOD->AF[0] |= ??
Page 104
Les TIMERS
Alternates functions
TIME TIM3 (4
R
chaines)
TIM4 (4
chaines)
ADC1
input
DAC
GPIO PC6->PC9
PD12->15
PA0->
PA7
PA4,
PA5
Les TIMERS
1
2
3
Page 106
Les TIMERS
Page 107
Config PWM
Activation chaines 1,2,3 et 4
Les TIMERS
ccr1
ccr3
Page 108
Les TIMERS
Page 109
Les interruptions
Page 110
Les interruptions
Sources dinterruptions
GPIO
Priphriques autres pour
rveiller le cur
Ethernet
USB OTG
Horloge RTC
Page 111
Les interruptions
Page 112
Les interruptions
Les interruptions
Page 114
Les interruptions
Deux impulsions chaque 1 ms, linterruption prend ~3.5us.
Chaque impulsion sur le port PE08 prend ~0.5 us
~3.5us
~0.5 us
Page 115
Les interruptions
Clignotement de la led
Chaque 100ms
Page 116
Les interruptions
Page 117
IRQ
Conversion+PID
Les interruptions
TIMER2
ADC1,2
NVIC
PID
DAC1,2
Les interruptions
DAC :
PA04, PA05 are
analog outputs
TIMER 2:
TIMER3:
Comme source priodique dinterruption
Periode = 1us, f=10 kHz, TIM2->ARR = 8400; Source MLI largeur
dimpulsion=sortie
de regulateur
Freq choisir
Page 119
Les interruptions
DAC->CR
|=(1<<0)+(1<<16) = 0x00010001;
Activation de deux chaines de sortie
Page 120
Les interruptions
DAC->SQ3
|=(1<<0)+(1<<16) = 0x00010001;
Page 121
Les interruptions
Programme principale , Notes et indications :
While(1)
{
Ajustement de Kp :
si PE0 et PE05 sont activs au mme temps
Alors Kp++ :
if ((GPIOE->IDR & 0x003f) == (0x01 + 0x20)) Kp++; // manually set Kp
Rq 0x003f=111111: masque, 0x01 + 0x20= 100001 : PE0 et PE05
si PE0 et PE04 sont activs au mme temps
Alors Kp-if ((GPIOE->IDR & 0x003f) == (0x01 + 0x10)) Kp--;
Ajuste de kd via PE01 et PE05 : Kd+0.001 , PE01 et PE04 kd -0.001
Ajustement de Ki via PE02 et PE05, ki+0.0001, PE02 et PE04 ki -0.0001
}
Page 122
Les interruptions
Fonction dinterruption : indications
Conversion ADC1et2
Error[Ptr] = Ref[Ptr] - x[Ptr]; // calculate error
Prop = Kp * (float)Error[Ptr]; // proportional part
Dif = Kd * (float)(Error[Ptr] - Error[(Ptr-1) & 63]) / Ts; // diff. part
Int += Ki * (float)Error[Ptr]; // integral part
Reg[Ptr] = (int)(Prop + Dif + Int); // summ all three
Sorties : Reg et Error via au DAC1et2
Le DAC est limit entre 0 et 4095
Page 123
Les interruptions
Code:
Page 124
Les interruptions
Code_suite:
Page 125
Les interruptions
Code_suite:
Page 126
Les interruptions
Code_suite:
Page 127
Les interruptions
Code_suite:
Page 128
Les interruptions
Code_suite:
Page 129