Outils pour utilisateurs

Outils du site

Traductions de cette page:

votre temps local: :: ()

heure officielle (en France) : ::(TZ:)

Heure UTC client: :: Offset client: s - delai: ms - - timeZone: Heure UTC: ::

Panneau latéral

  • Corrélateurs
  • Bruits inhérent au numérique : bruit de phase, gigue, stabilité temporelle des circuits numériques
  • Compteur à intervalle de temps
  • Détection synchrone
  • Choix ADC/DAC pour applications TF
  • Mesure Sphi(f) et sigma_y(tau)
  • Servo controls (Liens fibrés, …)
  • Manipulation d'objets et fréquences (atomes froids, spectral hole burning, ions ….)
  • Datations « officielles »
  • Compteurs, avec et sans temps morts.
  • Logiciel / Pilotes
  • IP cores (FPGA)
  • Chipscope
fr:programmes_pour_communiquer_avec_le_dds

Interface avec un microcontrôleur TI: le MSP430

Exemple de programme en C écrit dans le microcontrôleur MSP430F169

Ce microcontrôleur dispose de 2 ports SPI.

Mode SPI : Single-bit serial 2-wire mode (default mode)

initialisation et chargement des registres CSR et CFTW0:

  int  CSR_ADDRESS = 0x00;   AD9959 CSR adresss Byte
  int CSR_NUM_BYTE = 0x01;   CSR nombre d'octet du registre
  long CSR0 = 0x10;          AD9959 du channel 0 MSB first SPI par défaut
     
  int  FTW_ADDRESS = 0x04;   AD9959 FTW adresss Byte
  int FTW_NUM_BYTE = 0x04;   FTW nombre d'octet du registre
  long FTW0 = 0x28F5C28F;    frequence en hex fout x2^32/fclock
     

dans le main:

  P4OUT = 0x40;          AD9959 master reset bit de validation du MSP430
  P4OUT = 0x00;          AD9959 master set   bit de validation du MSP430
  
  write_serial_port(CSR_ADDRESS, CSR0, CSR_NUM_BYTE);
  P5OUT = 0x40;          I/O update du DDS bit de validation du MSP430 
  P5OUT = 0x00;          I/O update du DDS bit de validation du MSP430  
  
  write_serial_port(FTW_ADDRESS, FTW0, FTW_NUM_BYTE);
  P5OUT = 0x40;          I/O update du DDS bit de validation du MSP430 
  P5OUT = 0x00;          I/O update du DDS bit de validation du MSP430  
  
Commentaires sur le programme

Pour initialiser le DDS on applique cette procédure : RESET-DATA_SEND_to_BUFFER-IO_UPDATE.

RESET du DDS (pin 3), on charge les données de chaque registre au travers du port SPI write_serial_port… Puis on réalise un I/O UPDATE pin 46 du DDS pour la validation et le transfert des données. Ce bout de programme permet de charger le channel 0 avec une fréquence de 80MHz et une amplitude par défaut FULL DAC.

I/O_UPDATE is synchronous to the SYNC_CLK (Pin 54) = Master clock/4. Voir figure 40 du datasheet du DDS.

Ci-dessous le sous programme d'initialisation des ports du microcontrôleur et du SPI pour le MSP430F169 : TI fourni de nombreux exemples de codes de bases pour configurer les modes SPI, I2C et utiliser la mémoire Flash: slac015p.zip

  
  void_init_SPI(void)
  {
    BCSCTL1 |= XTS;               ACLK= LFXT1= HF XTAL 
    BCSCTL2 |= SELM_3;            MCLK = LFXT1 (safe) pin 8,9 du MSP430
    P1SEL = 0x00;                 P1 I/O select
    P2SEL = 0x00;                 P2 I/O select
    P3SEL = 0x00;                 P3 I/O select
    P4SEL = 0x00;                 P4 I/O select
    P5SEL = 0x0A;                 P5.1,3 SPI option select
    P6SEL = 0x00;                 P6 I/O select
    P1DIR = 0xFF;                 P1.output direction
    P2DIR = 0xFF;                 P2 output direction
    P3DIR = 0xFF;                 P3 output direction
    P4DIR = 0xFF;                 P4 output direction
    P5DIR = 0xFF;                 P5 output direction
    P6DIR = 0xFF;                 P6 output direction
    ME2 |= USPIE1;                Enable USART1 SPI
    UCTL1 |= CHAR + SYNC + MM;    8-bit SPI Master **SWRST**
    UTCTL1 = CKPH + SSEL1 + STC;  SMCLK delayed, 3-pin
    UBR01 = 0x2;                  ACLK/2 for baud rate
    UBR11 = 0x0;                  ACLK/2 for baud rate
    UMCTL1 = 0x0;                 Clear modulation
    UCTL1 &= ~SWRST;              Initialize USART state machine
  }

BCSCTL1 |= XTS; et BCSCTL2 |= SELM_3; permet d'être en mode HF XTAL le MSP430 fonctionnera à 8MHz au lieu de 32KHz par défaut.

           MSP430F169
         -----------------
     /|\|              XIN|-
      | |                 | HF XTAL (455k - 8Mhz)
      --|RST          XOUT|-
        |                 |
        |             P5.4|-->MCLK = XTAL

D'après : M. Buccini Texas Instruments Inc. Feb 2005 Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A

la routine pour le chargement des données en mode SPI du MSP430F169 :

    void write_serial_port(int instruction, long data, int num_byte)
    {
     int i=0;
     TXBUF1 = instruction;
      do
     {
     TXBUF1 = data >>(num_byte-1-i)*8;
     i++;
     }
      while (i < num_byte);
    }

Interface avec un microcontrôleur ARM TI: le TM4C123GH6PM

Exemple de programme en C écrit dans le microcontrôleur ARM TM4C123GH6PM

Ce microcontrôleur dispose de 4 ports SPI. Horloge par défaut = 80MHz

Mode SPI : Single-bit serial 3-wire mode

la routine pour le chargement des données en mode SPI de l'ARM TM4C123GH6PM :

int i=0;
SSI0_DR_R =  instruction; 
while( num_byte )
 {
      while(!(SSI0_SR_R & SSI_SR_TNF)) {} // SPI0 du TM4C123GH6PM
      SSI0_DR_R =  data >>(num_byte-1-i)*8;
      num_byte--;           
 }

while( !( SSI0_SR_R & SSI_SR_TNF ) )
      {
        ;
      }
      

La routine init (SPI) pour l'ARM TM4C123GH6PM:

// Enable Peripheral SSI0
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //Enable GPIO port A SSI0.
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
GPIOPinConfigure(GPIO_PA2_SSI0CLK); 
GPIOPinConfigure(GPIO_PA3_SSI0FSS);
GPIOPinConfigure(GPIO_PA5_SSI0TX);
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_3 | GPIO_PIN_2);
//GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_2);
SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, 10000000, 8);    
SSIEnable(SSI0_BASE); // Enable the SSI 

Exemple d'initialisation d'un PORT sur l'ARM TM4C123GH6PM:

 //void PortB_Init(void)
 volatile unsigned long delay;
 SYSCTL_RCGC2_R |= 0x00000002;     // 1) activate clock for Port B
 delay = SYSCTL_RCGC2_R;           // allow time for clock to start
 GPIO_PORTB_AMSEL_R = 0x00;        // 3) disable analog on PB
 GPIO_PORTB_PCTL_R = 0x00000000;   // 4) PCTL GPIO on PB0
 GPIO_PORTB_DIR_R |= 0xFF;         // 5) PB0-PB7 is out
 //GPIO_PORTB_AFSEL_R &= ~0x01;      // 6) disable alt funct on PB0
 GPIO_PORTB_AFSEL_R &= ~0xFF;      // 6) disable alt funct on PB0-PB7
 GPIO_PORTB_DEN_R |= 0xFF;         // 7) enable digital I/O on PB0-PB7
 
 

Exemple d'initialisation d'un PORT pour la communication série USB-UART0 sur l'ARM TM4C123GH6PM:

 //void init_UART0(void)
 SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
 GPIOPinConfigure(GPIO_PA0_U0RX);
 GPIOPinConfigure(GPIO_PA1_U0TX);
 GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
 UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 9600,                      
 (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
 
    

Exemple de déclaration et d'initialisation des registres mot de fréquences:

 //AD9852//
 int  FTW0_ADRESS = 0x02; 
 //unsigned long long FTW0 = 0x17E4B17E4B1; //1.75MHz@300MHz clk
 unsigned long long FTW0;
 //float FTW0 = 0x17E4B17E4B1; //1.75MHz@300MHz clk
 int  FTW0_NUM_BYTE = 0x06;
 //AD9858//
 int  FTW1_ADRESS = 0x03; 
 unsigned  long FTW1 = 0x418937; //1MHz@1000MHz clk
 int  FTW1_NUM_BYTE = 0x04;
 //AD9858//
 int  CFR_ADRESS = 0x00; 
 unsigned  long CFR = 0x79; // MSB first
 int  CFR_NUM_BYTE = 0x04;
fr/programmes_pour_communiquer_avec_le_dds.txt · Dernière modification: 2016/03/04 10:46 par fwiotte