[Numérique] Créer sa boucle "delay" en assembleur
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Créer sa boucle "delay" en assembleur



  1. #1
    invite352bbdac

    Créer sa boucle "delay" en assembleur


    ------

    Bonsoir à tous,

    En ce moment je travail sur un picoblaze (kcpsm) et j'aimerais connaitre précisement les X coup d'horloge consommé pour chaque instruction.

    J'ai trouvé un code concernant une routine de delay à cette adresse http://www1.hs-bremerhaven.de/kmuell...ts/pblcode.psm

    Code:
    ; **************************************************************
    		; Software delay routines
    		; **************************************************************
    		;
    		;
    		;
    		;Delay of 1us.
    		;
    		;Constant value defines reflects the clock applied to KCPSM3. Every instruction
    		;executes in 2 clock cycles making the calculation highly predictable. The '6' in
    		;the following equation even allows for 'CALL delay_1us' instruction in the initiating code.
    		;
    		; delay_1us_constant =  (clock_rate - 6)/4       Where 'clock_rate' is in MHz
    		;
    		;Registers used s0
    		;
    delay_1us:	LOAD	s0, delay_1us_constant
    wait_1us:	SUB	s0, 01
    		JUMP	NZ, wait_1us
    		RETURN
    		;
    		;Delay of 40us.
    		;
    		;Registers used s0, s1
    		;
    delay_40us:	LOAD	s1, 28                         ;40 x 1us = 40us
    wait_40us:	CALL	delay_1us
    		SUB	s1, 01
    		JUMP	NZ, wait_40us
    		RETURN
    		;
    		;
    		;Delay of 1ms.
    		;
    		;Registers used s0, s1, s2
    		;
    delay_1ms:	LOAD	s2, 19                         ;25 x 40us = 1ms
    wait_1ms:	CALL	delay_40us
    		SUB	s2, 01
    		JUMP	NZ, wait_1ms
    		RETURN
    		;
    		;Delay of 20ms.
    		;
    		;Delay of 20ms used during initialisation.
    		;
    		;Registers used s0, s1, s2, s3
    		;
    delay_20ms:	LOAD	s3, 14                         ;20 x 1ms = 20ms
    wait_20ms:	CALL	delay_1ms
    		SUB	s3, 01
    		JUMP	NZ, wait_20ms
    		RETURN
    		;
    		;Delay of approximately 1 second.
    		;
    		;Registers used s0, s1, s2, s3, s4
    		;
    delay_1s:	LOAD	s4, 32                         ;50 x 20ms = 1000ms
    wait_1s:	CALL	delay_20ms
    		SUB	s4, 01
    		JUMP	NZ, wait_1s
    		RETURN
    		;
    		;
    		;
    Voici la datasheet de l'IP vhdl ci jointe http://www.xilinx.com/support/docume...tion/ug129.pdf

    A priori c'est un processeur déterministe à 2 coup d'horloge pour chaque instruction mais je me demande quand même ... également pour les appels de labels.

    Je ne saisi pas bien l'exemple donné avec le '6' et le '28' qui correspond en fait à 40 µs.

    Merci d'avance

    -----

  2. #2
    jiherve

    Re : Créer sa boucle "delay" en assembleur

    Bonsoir
    C'est bien 2 cycles pour toutes les instructions.
    En integrant le Call la routine delay_1us fait bien 1 µs pour une horloge à 10MHz,il suffit de compter les instructions!
    Le 28 n'est pas idiot y compris l'appel du retard 40µS on arrive à 39,6µs si je ne me suis pas trompé.
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    invite352bbdac

    Re : Créer sa boucle "delay" en assembleur

    Je comptes 396 cycles soit 39,6 us avec 10Mhz effectivement.

    On pourrait peut être aussi créer une routine pour 1ns? Vous me direz tout depend de ma clock !?

    Je cherche à obtenir une erreur la moins grande possible par rapport à 55µs.

  4. #4
    invite352bbdac

    Re : Créer sa boucle "delay" en assembleur

    Autrement, il y a une library qui s'appel opbasm-1.2.

    https://pypi.python.org/pypi/opbasm/1.2

    Le fichier picoblaze.m4 décrit une manière de coder un delay sur une ligne. Le dernier parameter pour moi déduit le nombre d'instruction que l'on souhaite pour régler le delay.

    J'utilise ceci ou alors quelque chose fait main comme au dessus? Je ne saurais avoir un avis plus expert.
    Fichiers attachés Fichiers attachés

  5. A voir en vidéo sur Futura

Discussions similaires

  1. aide au montage "relay electrical delay action"
    Par invite781f4306 dans le forum Électronique
    Réponses: 11
    Dernier message: 24/03/2015, 20h09
  2. Créer puits perdu dans une ""cour"" intérieure
    Par Sica dans le forum Bricolage et décoration
    Réponses: 72
    Dernier message: 01/10/2014, 23h47
  3. C# : Comment créer un "if" dépendant de "Console.ReadLine" ?
    Par invitedd654e81 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 10/10/2011, 15h19
  4. Scilab : fonction "delay" pour un retard pur ?
    Par invite1e8ad136 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 01/02/2009, 21h20
  5. Instruction "delay" CC11 pour 68HC11F1
    Par invitea88e6ae4 dans le forum Électronique
    Réponses: 12
    Dernier message: 05/06/2007, 17h35
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...