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_en_c_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:

on fait un 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_en_c_pour_communiquer_avec_le_dds.txt · Dernière modification: 2016/03/02 11:22 par fwiotte