Created
January 9, 2024 15:06
-
-
Save arnoclr/35c00e83af89900523a815a1b0a79905 to your computer and use it in GitHub Desktop.
Evalbot périmétrique
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Eval BOT | |
; Programme de suivi des murs d'une pièce | |
AREA |.text|, CODE, READONLY | |
; This register controls the clock gating logic in normal Run mode | |
SYSCTL_PERIPH_GPIOF EQU 0x400FE108 ;; SYSCTL_RCGC2_R (p291 datasheet de lm3s9b92.pdf) | |
; Configure the corresponding pin to be an output | |
; All GPIO pins are inputs by default | |
GPIO_O_DIR EQU 0x00000400 ;; GPIO Direction (p417 datasheet de lm3s9B92.pdf) | |
; The GPIODR2R register is the 2-mA drive control register | |
; By default, all GPIO pins have 2-mA drive. | |
GPIO_O_DR2R EQU 0x00000500 ;; GPIO 2-mA Drive Select (p428 datasheet de lm3s9B92.pdf) | |
; Digital enable register | |
; To use the pin as a digital input or output, the corresponding GPIODEN bit must be set. | |
GPIO_O_DEN EQU 0x0000051C ;; GPIO Digital Enable (p437 datasheet de lm3s9B92.pdf) | |
; The GPIOPUR register is the pull-up control register | |
GPIO_O_PUR EQU 0x00000510 ;; GPIO Pull-Up Control | |
; The GPIODATA register is the data register | |
GPIO_PORTD_BASE EQU 0x40007000 ;; GPIO Port D (APB) base: 0x4000.7000 | |
GPIO_PORTE_BASE EQU 0x40024000 ;; GPIO Port E (APB) base: 0x4002.4000 | |
GPIO_PORTF_BASE EQU 0x40025000 ;; GPIO Port F (APB) base: 0x4002.5000 (p416 datasheet de lm3s9B92.pdf) | |
; PINS Port Input | |
PINSD_6_7 EQU 0xC0 ;; Switchs 1 & 2 on Pins 6 & 7 (1100 0000) | |
PINSE_1_2 EQU 0x03 ;; Bumpers 1 & 2 on Pins 1 & 2 (0000 0011) | |
PINSF_4_5 EQU 0x30 ;; Leds 1 & 2 on Pins 4 & 5 (0011 0000) | |
; CONSTANTS | |
WAIT_ITERATIONS EQU 0x00FFFFF ;; Number of iterations to complete a wait | |
ROTATION_ITERATIONS EQU 0x0D ;; Number of iterations to complete a rotation | |
DISTANCE_ITERATIONS EQU 0x19 ;; Number of iterations to complete a distance | |
ENTRY | |
EXPORT __main | |
;; The IMPORT command specifies that a symbol is defined in a shared object at runtime. | |
IMPORT MOTEUR_INIT ;; init motors (setup PWMS + GPIO) | |
IMPORT MOTEUR_DROIT_ON ;; enable right motor | |
IMPORT MOTEUR_DROIT_OFF ;; disable right motor | |
IMPORT MOTEUR_DROIT_AVANT ;; right motor turns forward | |
IMPORT MOTEUR_DROIT_ARRIERE ;; right motor turns backwards | |
IMPORT MOTEUR_DROIT_INVERSE ;; reverses the right motor's rotation direction | |
IMPORT MOTEUR_GAUCHE_ON ;; enable left motor | |
IMPORT MOTEUR_GAUCHE_OFF ;; disable left motor | |
IMPORT MOTEUR_GAUCHE_AVANT ;; left motor turns forward | |
IMPORT MOTEUR_GAUCHE_ARRIERE ;; left motor turns backwards | |
IMPORT MOTEUR_GAUCHE_INVERSE ;; reverses the left motor's rotation direction | |
__main | |
;; Enable the Port F peripheral clock by setting bit 5 (0x20 == 0b100000) (p291 datasheet de lm3s9B96.pdf) | |
;; (GPIO::FEDCBA) | |
LDR R5, =SYSCTL_PERIPH_GPIOF ;; RCGC2 | |
MOV R9, #0x00000038 ;; Store value to Enable clock on GPIO F, E and D (0011 1000) | |
;; (GPIO::FEDCBA) | |
STR R9, [R5] ;; Enable clock on GPIO F, E and D | |
;; "There must be a delay of 3 system clocks before any GPIO reg. access (p413 datasheet de lm3s9B92.pdf) | |
NOP ;; very important... | |
NOP | |
NOP ;; not necessary in simulation or in debbug step by step... | |
; Config Boutons | |
LDR R9, =PINSD_6_7 ;; Get the value to enable PINS 6 & 7 on PORTD | |
LDR R7, =GPIO_PORTD_BASE+GPIO_O_DEN ;; | |
STR R9, [R7] ;; Enable PINS 6 & 7 on PORTD with GPIO_O_DEN | |
LDR R7, =GPIO_PORTD_BASE+GPIO_O_PUR ;; | |
STR R9, [R7] ;; Enable PINS 6 & 7 on PORTD with GPIO_O_PUR | |
LDR R7, =GPIO_PORTD_BASE+(PINSD_6_7<<2) | |
; Config Bumpers | |
LDR R9, =PINSE_1_2 ;; Get the value to enable PINS 1 & 2 on PORTE | |
LDR R8, =GPIO_PORTE_BASE+GPIO_O_DEN ;; | |
STR R9, [R8] ;; Enable PINS 1 & 2 on PORTE with GPIO_O_DEN | |
LDR R8, =GPIO_PORTE_BASE+GPIO_O_PUR ;; | |
STR R9, [R8] ;; Enable PINS 1 & 2 on PORTE with GPIO_O_PUR | |
LDR R8, =GPIO_PORTE_BASE+(PINSE_1_2<<2) | |
; Config LEDs | |
LDR R9, =PINSF_4_5 ;; Get the value to enable PINS 4 & 5 on PORTF | |
LDR R5, =GPIO_PORTF_BASE+GPIO_O_DIR ;; | |
STR R9, [R5] ;; Enable PINS 4 & 5 on PORTF with GPIO_O_DIR | |
LDR R5, =GPIO_PORTF_BASE+GPIO_O_DEN ;; | |
STR R9, [R5] ;; Enable PINS 4 & 5 on PORTF with GPIO_O_DEN | |
LDR R5, =GPIO_PORTF_BASE+GPIO_O_DR2R ;; | |
STR R9, [R5] ;; Enable PINS 4 & 5 on PORTF with GPIO_O_DR2R | |
LDR R5, =GPIO_PORTF_BASE+(PINSF_4_5<<2) | |
; Config moteur | |
BL MOTEUR_INIT ;; Setup PWM + GPIO | |
WaitUserSelection | |
LDR R3, [R7] ;; Get Switchs Entries Values | |
LDR R4, [R8] ;; Get Bumper Entries Values | |
; CMP R4, #0x03 ;; Bumpers Status == Bumpers not pressed | |
; BNE OnBumpersPressed ;; If not equal go to actives_bumpers branch | |
CMP R4, #0x01 | |
BEQ HasChoosedToFollowLeftWall | |
CMP R4, #0x02 | |
BEQ HasChoosedToFollowRightWall | |
BL WaitUserSelection | |
HasChoosedToFollowLeftWall | |
MOV R2, #0x20 ; Activate left LED | |
BL TurnOnMotors | |
HasChoosedToFollowRightWall | |
MOV R2, #0x10 ; Activate right LED | |
BL TurnOnMotors | |
TurnOnMotors | |
BL MOTEUR_DROIT_ON | |
BL MOTEUR_GAUCHE_ON | |
STR R2, [R5] ; Allumer la LED choisie | |
BL MainLoop | |
MainLoopForRightWall | |
; on avance de 2 cases | |
BL MOTEUR_GAUCHE_AVANT | |
BL MOTEUR_DROIT_AVANT | |
BL WAIT | |
BL WAIT | |
BL BLINK_LED | |
; si on colisionne pas | |
LDR R4, [R8] | |
CMP R4, #0x03 ; aucun bumper actif | |
BEQ MainLoopForRightWall2 | |
; on a avancé et touché le mur devant nous, on tourne à gauche | |
BL MOTEUR_GAUCHE_ARRIERE | |
BL WAIT | |
; on relance la boucle | |
BL MainLoop | |
MainLoopForRightWall2 | |
; on rotationne de 90 degrés à droite | |
BL MOTEUR_DROIT_ARRIERE | |
BL WAIT | |
; on avance un peu pour voir si il y a toujours un mur à notre droite | |
BL MOTEUR_DROIT_AVANT | |
BL MEDIUM_WAIT | |
BL BLINK_LED | |
; si on colisionne pas | |
LDR R4, [R8] | |
CMP R4, #0x03 ; aucun bumper actif | |
BEQ MainLoop | |
; On a touché le mur qui était à notre droite | |
; On recule légèrement et on se remet droit | |
BL MOTEUR_DROIT_ARRIERE | |
BL MOTEUR_GAUCHE_ARRIERE | |
BL SMALL_WAIT | |
; On se retourne de 90 degrés vers la gauche | |
BL MOTEUR_DROIT_AVANT | |
BL WAIT | |
BL MainLoop | |
MainLoop | |
BL MainLoopForRightWall | |
BLINK_LED | |
LDR R10, =0xFFFFF; Durée de l'attente | |
MOV R9, #0x00 ; On fait clignoter les LEDs qu'on a activées | |
STR R9, [R5] ; Eteindre les LEDs | |
wait_loop_led | |
SUBS R10, #0x01 | |
BNE wait_loop_led | |
STR R2, [R5] ; Les rallumer | |
BX LR | |
WAIT | |
; Durée de l'attente pour un quart de tour avec une boucle sans detection d'appui sur le bouton | |
; LDR R9, =0x12FFFFF ; Durée de l'attente | |
LDR R9, =0x755554 ; Durée de l'attente | |
wait_loop | |
; Cette boucle est la partie la plus souvent appellée dans le programme | |
; On va donc rajouter le detection sur l'appuie du bouton dans cette partie | |
; Afin de quitter le programme | |
LDR R3, [R7] ; Load Switchs Entries Values | |
CMP R3, #0xC0 ; If one or more switches are pressed | |
BNE Last ; Terminate program | |
SUBS R9, #0x01 | |
BNE wait_loop | |
BX LR | |
SMALL_WAIT | |
LDR R9, =0x2FFFFF ; Durée de l'attente | |
wait_loop_small | |
SUBS R9, #0x01 | |
BNE wait_loop_small | |
BX LR | |
MEDIUM_WAIT | |
LDR R9, =0x4FFFFF ; Durée de l'attente | |
wait_loop_med | |
SUBS R9, #0x01 | |
BNE wait_loop_med | |
BX LR | |
Last | |
BL MOTEUR_GAUCHE_OFF | |
BL MOTEUR_DROIT_OFF | |
STR R9, [R5] ; Eteindre les LEDs | |
NOP | |
END | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; RK - Evalbot (Cortex M3 de Texas Instrument); | |
; programme - Pilotage 2 Moteurs Evalbot par PWM tout en ASM (configure les pwms + GPIO) | |
;Les pages se réfèrent au datasheet lm3s9b92.pdf | |
;Cablage : | |
;pin 10/PD0/PWM0 => input PWM du pont en H DRV8801RT | |
;pin 11/PD1/PWM1 => input Phase_R du pont en H DRV8801RT | |
;pin 12/PD2 => input SlowDecay commune aux 2 ponts en H | |
;pin 98/PD5 => input Enable 12v du conv DC/DC | |
;pin 86/PH0/PWM2 => input PWM du 2nd pont en H | |
;pin 85/PH1/PWM3 => input Phase du 2nd pont en H | |
;; Hexa corresponding values to pin numbers | |
GPIO_0 EQU 0x1 | |
GPIO_1 EQU 0x2 | |
GPIO_2 EQU 0x4 | |
GPIO_5 EQU 0x20 | |
;; pour enable clock 0x400FE000 | |
SYSCTL_RCGC0 EQU 0x400FE100 ;SYSCTL_RCGC0: offset 0x100 (p271 datasheet de lm3s9b92.pdf) | |
SYSCTL_RCGC2 EQU 0x400FE108 ;SYSCTL_RCGC2: offset 0x108 (p291 datasheet de lm3s9b92.pdf) | |
;; General-Purpose Input/Outputs (GPIO) configuration | |
PORTD_BASE EQU 0x40007000 | |
GPIODATA_D EQU PORTD_BASE | |
GPIODIR_D EQU PORTD_BASE+0x00000400 | |
GPIODR2R_D EQU PORTD_BASE+0x00000500 | |
GPIODEN_D EQU PORTD_BASE+0x0000051C | |
GPIOPCTL_D EQU PORTD_BASE+0x0000052C ; GPIO Port Control (GPIOPCTL), offset 0x52C; p444 | |
GPIOAFSEL_D EQU PORTD_BASE+0x00000420 ; GPIO Alternate Function Select (GPIOAFSEL), offset 0x420; p426 | |
PORTH_BASE EQU 0x40027000 | |
GPIODATA_H EQU PORTH_BASE | |
GPIODIR_H EQU PORTH_BASE+0x00000400 | |
GPIODR2R_H EQU PORTH_BASE+0x00000500 | |
GPIODEN_H EQU PORTH_BASE+0x0000051C | |
GPIOPCTL_H EQU PORTH_BASE+0x0000052C ; GPIO Port Control (GPIOPCTL), offset 0x52C; p444 | |
GPIOAFSEL_H EQU PORTH_BASE+0x00000420 ; GPIO Alternate Function Select (GPIOAFSEL), offset 0x420; p426 | |
;; Pulse Width Modulator (PWM) configuration | |
PWM_BASE EQU 0x040028000 ;BASE des Block PWM p.1138 | |
PWMENABLE EQU PWM_BASE+0x008 ; p1145 | |
;Block PWM0 pour sorties PWM0 et PWM1 (moteur 1) | |
PWM0CTL EQU PWM_BASE+0x040 ;p1167 | |
PWM0LOAD EQU PWM_BASE+0x050 | |
PWM0CMPA EQU PWM_BASE+0x058 | |
PWM0CMPB EQU PWM_BASE+0x05C | |
PWM0GENA EQU PWM_BASE+0x060 | |
PWM0GENB EQU PWM_BASE+0x064 | |
;Block PWM1 pour sorties PWM1 et PWM2 (moteur 2) | |
PWM1CTL EQU PWM_BASE+0x080 | |
PWM1LOAD EQU PWM_BASE+0x090 | |
PWM1CMPA EQU PWM_BASE+0x098 | |
PWM1CMPB EQU PWM_BASE+0x09C | |
PWM1GENA EQU PWM_BASE+0x0A0 | |
PWM1GENB EQU PWM_BASE+0x0A4 | |
VITESSE EQU 0x1A2 ; Valeures plus petites => Vitesse plus rapide exemple 0x192 | |
; Valeures plus grandes => Vitesse moins rapide exemple 0x1B2 | |
AREA |.text|, CODE, READONLY | |
ENTRY | |
;; The EXPORT command specifies that a symbol can be accessed by other shared objects or executables. | |
EXPORT MOTEUR_INIT | |
EXPORT MOTEUR_DROIT_ON | |
EXPORT MOTEUR_DROIT_OFF | |
EXPORT MOTEUR_DROIT_AVANT | |
EXPORT MOTEUR_DROIT_ARRIERE | |
EXPORT MOTEUR_DROIT_INVERSE | |
EXPORT MOTEUR_GAUCHE_ON | |
EXPORT MOTEUR_GAUCHE_OFF | |
EXPORT MOTEUR_GAUCHE_AVANT | |
EXPORT MOTEUR_GAUCHE_ARRIERE | |
EXPORT MOTEUR_GAUCHE_INVERSE | |
MOTEUR_INIT | |
ldr r6, = SYSCTL_RCGC0 | |
ldr r0, [R6] | |
ORR r0, r0, #0x00100000 ;;bit 20 = PWM recoit clock: ON (p271) | |
str r0, [r6] | |
;ROM_SysCtlPWMClockSet(SYSCTL_PWMDIV_1);PWM clock is processor clock /1 | |
;Je ne fais rien car par defaut = OK!! | |
;*(int *) (0x400FE060)= *(int *)(0x400FE060)...; | |
;RCGC2 : Enable port D GPIO(p291 ) car Moteur Droit sur port D | |
ldr r6, = SYSCTL_RCGC2 | |
ldr r0, [R6] | |
ORR r0, r0, #0x08 ;; Enable port D GPIO | |
str r0, [r6] | |
;MOT2 : RCGC2 : Enable port H GPIO (2eme moteurs) | |
ldr r6, = SYSCTL_RCGC2 | |
ldr r0, [R6] | |
ORR r0, r0, #0x80 ;; Enable port H GPIO | |
str r0, [r6] | |
nop | |
nop | |
nop | |
;;Pin muxing pour PWM, port D, reg. GPIOPCTL(p444), 4bits de PCM0=0001<=>PWM (voir p1261) | |
;;il faut mettre 1 pour avoir PD0=PWM0 et PD1=PWM1 | |
ldr r6, = GPIOPCTL_D | |
;ldr r0, [R6] ;; *(int *)(0x40007000+0x0000052C)=1; | |
;ORR r0, r0, #0x01 ;; Port D, pin 1 = PWM | |
mov r0, #0x01 | |
str r0, [r6] | |
;;MOT2 : Pin muxing pour PWM, port H, reg. GPIOPCTL(p444), 4bits de PCM0=0001<=>PWM (voir p1261) | |
;;il faut mettre mux = 2 pour avoir PH0=PWM2 et PH1=PWM3 | |
ldr r6, = GPIOPCTL_H | |
mov r0, #0x02 | |
str r0, [r6] | |
;;Alternate Function Select (p 426), PD0 utilise alernate fonction (PWM au dessus) | |
;;donc PD0 = 1 | |
ldr r6, = GPIOAFSEL_D | |
ldr r0, [R6] ;*(int *)(0x40007000+0x00000420)= *(int *)(0x40007000+0x00000420) | 0x00000001; | |
ORR r0, r0, #0x01 ; | |
str r0, [r6] | |
;;MOT2 : Alternate Function Select (p 426), PH0 utilise PWM donc Alternate funct | |
;;donc PH0 = 1 | |
ldr r6, = GPIOAFSEL_H | |
ldr r0, [R6] ;*(int *)(0x40007000+0x00000420)= *(int *)(0x40007000+0x00000420) | 0x00000001; | |
ORR r0, r0, #0x01 ; | |
str r0, [r6] | |
;;-----------PWM0 pour moteur 1 connecté à PD0 | |
;;PWM0 produit PWM0 et PWM1 output | |
;;Config Modes PWM0 + mode GenA + mode GenB | |
ldr r6, = PWM0CTL | |
mov r0, #2 ;Mode up-down-up-down, pas synchro | |
str r0, [r6] | |
ldr r6, =PWM0GENA ;en decomptage, qd comparateurA = compteur => sortie pwmA=0 | |
;en comptage croissant, qd comparateurA = compteur => sortie pwmA=1 | |
mov r0, #0x0B0 ;0B0=10110000 => ACTCMPBD=00 (B down:rien), ACTCMPBU=00(B up rien) | |
str r0, [r6] ;ACTCMPAD=10 (A down:pwmA low), ACTCMPAU=11 (A up:pwmA high) , ACTLOAD=00,ACTZERO=00 | |
ldr r6, =PWM0GENB;en comptage croissant, qd comparateurB = compteur => sortie pwmA=1 | |
mov r0, #0x0B00 ;en decomptage, qd comparateurB = compteur => sortie pwmB=0 | |
str r0, [r6] | |
;Config Compteur, comparateur A et comparateur B | |
;;#define PWM_PERIOD (ROM_SysCtlClockGet() / 16000), | |
;;en mesure : SysCtlClockGet=0F42400h, /16=0x3E8, | |
;;on divise par 2 car moteur 6v sur alim 12v | |
ldr r6, =PWM0LOAD ;PWM0LOAD=periode/2 =0x1F4 | |
mov r0, #0x1F4 | |
str r0,[r6] | |
ldr r6, =PWM0CMPA ;Valeur rapport cyclique : pour 10% => 1C2h si clock = 0F42400 | |
mov r0, #VITESSE | |
str r0, [r6] | |
ldr r6, =PWM0CMPB ;PWM0CMPB recoit meme valeur. (rapport cyclique depend de CMPA) | |
mov r0, #0x1F4 | |
str r0, [r6] | |
;Control PWM : active PWM Generator 0 (p1167): Enable+up/down + Enable counter debug mod | |
ldr r6, =PWM0CTL | |
ldr r0, [r6] | |
ORR r0, r0, #0x07 | |
str r0, [r6] | |
;;-----------PWM2 pour moteur 2 connecté à PH0 | |
;;PWM1block produit PWM2 et PWM3 output | |
;;Config Modes PWM2 + mode GenA + mode GenB | |
ldr r6, = PWM1CTL | |
mov r0, #2 ;Mode up-down-up-down, pas synchro | |
str r0, [r6] ;*(int *)(0x40028000+0x040)=2; | |
ldr r6, =PWM1GENA ;en decomptage, qd comparateurA = compteur => sortie pwmA=0 | |
;en comptage croissant, qd comparateurA = compteur => sortie pwmA=1 | |
mov r0, #0x0B0 ;0B0=10110000 => ACTCMPBD=00 (B down:rien), ACTCMPBU=00(B up rien) | |
str r0, [r6] ;ACTCMPAD=10 (A down:pwmA low), ACTCMPAU=11 (A up:pwmA high) , ACTLOAD=00,ACTZERO=00 | |
;*(int *)(0x40028000+0x060)=0x0B0; // | |
ldr r6, =PWM1GENB ;*(int *)(0x40028000+0x064)=0x0B00; | |
mov r0, #0x0B00 ;en decomptage, qd comparateurB = compteur => sortie pwmB=0 | |
str r0, [r6] ;en comptage croissant, qd comparateurB = compteur => sortie pwmA=1 | |
;Config Compteur, comparateur A et comparateur B | |
;;#define PWM_PERIOD (ROM_SysCtlClockGet() / 16000), | |
;;en mesure : SysCtlClockGet=0F42400h, /16=0x3E8, | |
;;on divise par 2 car moteur 6v sur alim 12v | |
;*(int *)(0x40028000+0x050)=0x1F4; //PWM0LOAD=periode/2 =0x1F4 | |
ldr r6, =PWM1LOAD | |
mov r0, #0x1F4 | |
str r0,[r6] | |
ldr r6, =PWM1CMPA ;Valeur rapport cyclique : pour 10% => 1C2h si clock = 0F42400 | |
mov r0, #VITESSE | |
str r0, [r6] ;*(int *)(0x40028000+0x058)=0x01C2; | |
ldr r6, =PWM1CMPB ;PWM0CMPB recoit meme valeur. (CMPA depend du rapport cyclique) | |
mov r0, #0x1F4 ; *(int *)(0x40028000+0x05C)=0x1F4; | |
str r0, [r6] | |
;Control PWM : active PWM Generator 0 (p1167): Enable+up/down + Enable counter debug mod | |
ldr r6, =PWM1CTL | |
ldr r0, [r6] ;*(int *) (0x40028000+0x40)= *(int *)(0x40028000+0x40) | 0x07; | |
ORR r0, r0, #0x07 | |
str r0, [r6] | |
;;-----Fin config des PWMs | |
;PORT D OUTPUT pin0 (pwm)=pin1(direction)=pin2(slow decay)=pin5(12v enable) | |
ldr r6, =GPIODIR_D | |
ldr r0, [r6] | |
ORR r0, #(GPIO_0+GPIO_1+GPIO_2+GPIO_5) | |
str r0,[r6] | |
;Port D, 2mA les meme | |
ldr r6, =GPIODR2R_D ; | |
ldr r0, [r6] | |
ORR r0, #(GPIO_0+GPIO_1+GPIO_2+GPIO_5) | |
str r0,[r6] | |
;Port D, Digital Enable | |
ldr r6, =GPIODEN_D ; | |
ldr r0, [r6] | |
ORR r0, #(GPIO_0+GPIO_1+GPIO_2+GPIO_5) | |
str r0,[r6] | |
;Port D : mise à 1 de slow Decay et 12V et mise à 0 pour dir et pwm | |
ldr r6, =(GPIODATA_D+((GPIO_0+GPIO_1+GPIO_2+GPIO_5)<<2)) | |
mov r0, #(GPIO_2+GPIO_5) ; #0x24 | |
str r0,[r6] | |
;MOT2, PH1 pour sens moteur ouput | |
ldr r6, =GPIODIR_H | |
mov r0, #0x03 ; | |
str r0,[r6] | |
;Port H, 2mA les meme | |
ldr r6, =GPIODR2R_H | |
mov r0, #0x03 | |
str r0,[r6] | |
;Port H, Digital Enable | |
ldr r6, =GPIODEN_H | |
mov r0, #0x03 | |
str r0,[r6] | |
;Port H : mise à 1 pour dir | |
ldr r6, =(GPIODATA_H +(GPIO_1<<2)) | |
mov r0, #0x02 | |
str r0,[r6] | |
BX LR ; FIN du sous programme d'init. | |
;Enable PWM0 (bit 0) et PWM2 (bit 2) p1145 | |
;Attention ici c'est les sorties PWM0 et PWM2 | |
;qu'on controle, pas les blocks PWM0 et PWM1!!! | |
MOTEUR_DROIT_ON | |
;Enable sortie PWM0 (bit 0), p1145 | |
ldr r6, =PWMENABLE | |
ldr r0, [r6] | |
orr r0, #0x01 ;bit 0 à 1 | |
str r0, [r6] | |
BX LR | |
MOTEUR_DROIT_OFF | |
ldr r6, =PWMENABLE | |
ldr r0, [r6] | |
and r0, #0x0E ;bit 0 à 0 | |
str r0, [r6] | |
BX LR | |
MOTEUR_GAUCHE_ON | |
ldr r6, =PWMENABLE | |
ldr r0, [r6] | |
orr r0, #0x04 ;bit 2 à 1 | |
str r0, [r6] | |
BX LR | |
MOTEUR_GAUCHE_OFF | |
ldr r6, =PWMENABLE | |
ldr r0, [r6] | |
and r0, #0x0B ;bit 2 à 0 | |
str r0, [r6] | |
BX LR | |
MOTEUR_DROIT_ARRIERE | |
;Inverse Direction (GPIO_D1) | |
ldr r6, =(GPIODATA_D+(GPIO_1<<2)) | |
mov r0, #0 | |
str r0,[r6] | |
BX LR | |
MOTEUR_DROIT_AVANT | |
;Inverse Direction (GPIO_D1) | |
ldr r6, =(GPIODATA_D+(GPIO_1<<2)) | |
mov r0, #2 | |
str r0,[r6] | |
BX LR | |
MOTEUR_GAUCHE_ARRIERE | |
;Inverse Direction (GPIO_D1) | |
ldr r6, =(GPIODATA_H+(GPIO_1<<2)) | |
mov r0, #2 ; contraire du moteur Droit | |
str r0,[r6] | |
BX LR | |
MOTEUR_GAUCHE_AVANT | |
;Inverse Direction (GPIO_D1) | |
ldr r6, =(GPIODATA_H+(GPIO_1<<2)) | |
mov r0, #0 | |
str r0,[r6] | |
BX LR | |
MOTEUR_DROIT_INVERSE | |
;Inverse Direction (GPIO_D1) | |
ldr r6, =(GPIODATA_D+(GPIO_1<<2)) | |
ldr r1, [r6] | |
EOR r0, r1, #GPIO_1 | |
str r0,[r6] | |
BX LR | |
MOTEUR_GAUCHE_INVERSE | |
;Inverse Direction (GPIO_D1) | |
ldr r6, =(GPIODATA_H+(GPIO_1<<2)) | |
ldr r1, [r6] | |
EOR r0, r1, #GPIO_1 | |
str r0,[r6] | |
BX LR | |
END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment