J'ai essayé d'obtenir une interruption SysTick pour travailler sur un TM4C123GH6PM7. C'est un microcontrôleur à base de cortex m4. Lorsque j'utilise le débogueur Keil, je peux voir que l'interruption Systick est en attente de NVIC mais elle n'exécutera pas le gestionnaire. Aucune autre exception n'est activée et j'ai effacé le registre PRIMASK. Le code ci-dessous comment je l'interruption INITIALISER:SysTick Interruption en attente mais ne s'exécutera pas, problème de masquage d'interruption de débogage?
systck_init LDR R0,=NVIC_ST_CTRL_R
LDR R1,=NVIC_ST_RELOAD_R
LDR R2,=NVIC_ST_CURRENT_R
MOV R3,#0
STR R3,[R0]
STR R3,[R2]
MOV R3,#0x000020
STR R3,[R1]
MOV R3,#7
STR R3,[R0]
LDR R3,=NVIC_EN0_R
LDR R4,[R3]
ORR R4,#0x00008000
STR R4,[R3]
CPSIE I
MOV R3,#0x3
MSR CONTROL,R3
Après beaucoup de recherches, je trouve qu'il peut être le débogueur masquer toutes les interruptions. Le bit pour contrôler ceci est dans un registre appelé le registre d'état et de contrôle d'arrêt de débogage. Bien que je ne peux pas sembler l'afficher dans le débogueur ni lire/écrire avec les commandes de débogage. J'ai utilisé les Startups fournis par Keil et, pour autant que je sache, les vecteurs/étiquettes sont corrects.
Et oui je sais. Pourquoi prendre la peine de tout faire en assemblée.
Toutes les idées seraient grandement appréciées. Première publication :)
Merci pour l'aide! Si systick n'est pas couplé via le NVIC, alors il s'agit d'une exception, donc il ne peut pas être préempté par des interruptions matérielles? Je suis désolé de ne pas afficher tout mon code mais il y en a beaucoup. Mais je configure la PSP ailleurs. J'ai utilisé 0x20 juste pour le faire sauter directement dans le gestionnaire Aujourd'hui, j'ai utilisé le simulateur de keil et le gestionnaire s'exécute correctement, mais je ne peux toujours pas le faire fonctionner avec le débogueur dans le circuit. – MHilton
Vous pouvez configurer la priorité pour Systick (et d'autres interruptions du système) en utilisant les registres 'SHP' dans' SCB'. –
J'ai seulement lu rapidement le code alors peut-être mal (commentez votre code!) Mais vous ne semblez pas effacer le compteur avant de le démarrer. Je pense que la valeur du compteur est indéfinie au démarrage (mais l'émulateur peut la réinitialiser). Si le compteur est 0x21 et que vous définissez le rechargement sur 0x20, vous devrez attendre qu'il se déclenche avant de déclencher. Cela dit, ce ne serait pas si long que le compteur SysTick est seulement 24 bits. –