DSP TMS320F240 projects : Vector control of Induction Motor


How to
Program Texas Instruments TMS 320 F240 DSP device

im3.asm for TMS 320F240 :

This program includes a vector control (IRFO) of an Induction Motor (speed and/or current control (Ids and Iqs), V/f control.
It measure the speed thanks to an incremental 4096 pts encoder and display it in decimal format on the LCD screen. Control information (like current references and measures) are displayed on an SPI-serial LCD screen. The program also sends data to a 4-outputs DAC so we can visualize signal on scopes while the DSP is running.

V/f control
Vector control Iqs*, Ids*
and measured current and speed


Download full sources.


   
  1. *********************************************************************************
  2. * Induction Motor Vector control                                                *
  3. *********************************************************************************
  4. * Preleminaire ver based on TI appl.             10/07/00
  5. * Special IMMC 240 / MSK243
  6. *
  7. * Interface RS232 pour communication IRDA -> DSP  ____18/03/04
  8. * IOPC1 et IOPC2 à 5V pour 9600 bds du 7001 RX    ____18/03/04
  9. * macro pour LCD / DAC
  10. *
  11. * version light minimum V et f constante mais qui communique avec le PC
  12. *               et qui sort les grandeur sur DAC via SPI
  13. *   VERSION en cours de developpement 15/11/00
  14. *  .CMD modifié now .data and .bss se trouvent ds le meme endroit B1_F page0
  15. *       table ds la memoire prog ;-)
  16. * version 4 DAC à sorties succecives        27/11/00
  17. *  .CMD remodifiée, no more .data à cause des pbs de Flashage 28/11/00
  18. * cntrl_n DP pbs fixed
  19. *  debug pour flashage en cours           09/01/01
  20. *  pb de lecture de la FLASH, recopie en RAM avant execution      09/07/01
  21. *  Version OK pour FLASH ou Run en RAM, voir 2 projets
  22. *
  23. * Vers Code Composer 2 (new prj)
  24. * controle vectoriel en cours de dev 19/03/2003 sur banc MAS ex 300 W
  25. * version V/f only lighted
  26. * fast SPI SANS INTERRUPTION et IR via SCI... 20/04/2004
  27. * et LCD avec affichage fs, I1, I2  23/04/2004
  28. * Flashable (recopie de table LCD)
  29. * conv hex to decimal (magic numbers)  27/05/2004
  30. * Ecran LCD contraste, nouvelle routine 02/02/2007
  31. *********************************************************************************
  32.  
  33. CS_DACon    .macro
  34.             LDP   #00E1h
  35.             LACC  PADATDIR
  36.             AND  #0FFFDh        ; IOPA1 mise à 0 ie DAC activé
  37.             SACL  PADATDIR
  38.           .endm
  39. CS_DACoff  .macro
  40.             LDP   #00E1h
  41.             LACC  PADATDIR
  42.             OR    #0002h        ; IOPA1 mise à 1 ie DAC desactivé
  43.             SACL  PADATDIR
  44.           .endm
  45.  
  46. CS_LCDon    .macro
  47.             LDP   #00E1h
  48.             LACC  PADATDIR
  49.             AND  #0FFFBh        ; IOPA2 mise à 0 ie LCD activé
  50.             SACL  PADATDIR
  51.           .endm
  52. CS_LCDoff  .macro
  53.             LDP   #00E1h
  54.             LACC  PADATDIR
  55.             OR    #0004h        ; IOPA2 mise à 1 ie LCD desactivé
  56.             SACL  PADATDIR
  57.           .endm
  58.  
  59. ;****************************************************************
  60. ; SPI Configuration       1 pour DAC      2 pour LCD
  61. ;****************************************************************
  62. SPI_Config .macro Conf
  63.               .if Conf=1      ; SPI initialization pour DSP-> DAC (clk pol 1, no clkphase, master, no INT)
  64.       LDP     #0E0h
  65.       SPLK  #00C7h,SPI_CNTL1       ; Reset SPI by writing 1 to SWRST !!!clk pol1
  66. ;   SPLK   #0087h,SPI_CNTL1    ; Reset SPI by writing 1 to SWRST !!!clk pol0
  67. ;   SPLK   #000Ch,SPI_CNTL2      ; Disable ints & TALK, normal clock, master mode clk phase 1
  68.       SPLK  #0004h,SPI_CNTL2   ; Disable ints & TALK, normal clock, master mode clk phase 0
  69.       SPLK  #0000h,SPI_PRI        ; Set SPI interrupt to high priority.
  70. ;   SPLK #0000h,SPI_BAUD      ; Baudrate = Fatest as possible ! SYSCLK/4 et ça marche !
  71.       SPLK  #0005h,SPI_BAUD   ; Baudrate = 2 MHz! SYSCLK/5
  72.       SPLK  #0000h,SPI_STATUS   ; Clear the SPI interrupt status bits
  73. ;   SPLK #000Eh,SPI_CNTL2   ; Enable TALK, CLK ph 1, master mode + disable SPI Int
  74.       SPLK  #0006h,SPI_CNTL2      ; Enable TALK, CLK ph 0, master mode + disable SPI Int
  75.       SPLK  #0052h,SPI_PORT_C1    ; Enable the SPICLK pin function. ; SPISTE as output pin et mise à 1 ie desactive
  76.       SPLK  #0022h,SPI_PORT_C2    ; Set SIMO & SOMI functions to serial I/O
  77.       SPLK  #0047h,SPI_CNTL1       ; Release SWRST, clock polarity 1, 8 bits
  78. ;   SPLK   #0007h,SPI_CNTL1    ; Release SWRST, clock polarity 0, 8 bits
  79.               .endif
  80.       .if Conf=2      ; SPI initialization pour DSP-> LCD
  81.       LDP   #0E0h
  82.       SPLK  #00C7h,SPI_CNTL1       ; Reset SPI by writing 1 to SWRST !!!clk pol1
  83.       SPLK  #000Ch,SPI_CNTL2   ; Disable ints & TALK, normal clock, master mode
  84.       SPLK  #0000h,SPI_PRI        ; Set SPI interrupt to high priority.
  85.       SPLK  #0000h,SPI_BAUD    ; Baudrate = SYSCLK/4  ; accepté ie 2.5 MHz, alors que le max du LCD est 2 MHz
  86.       SPLK  #0000h,SPI_STATUS   ; Clear the SPI interrupt status bits
  87.       SPLK  #0006h,SPI_CNTL2      ; Enable TALK, No CLK ph, master mode + DESABLE SPI Int
  88.       SPLK  #0052h,SPI_PORT_C1    ; Enable the SPICLK pin function. ; SPISTE as output pin et mise à 1 ie desactive
  89.       SPLK  #0022h,SPI_PORT_C2    ; Set SIMO & SOMI functions to serial I/O
  90.       SPLK  #0047h,SPI_CNTL1       ; Release SWRST, clock polarity 1, 8 bits
  91.       .endif
  92.     .endm
  93.  
  94. ;****************************************************************
  95. ; Routine trChar : transforme le char LCDChar en LCDChar_m (pour le LCD)
  96. ;****************************************************************
  97. trChar .macro
  98.         LDP  #LCDChar
  99.         SPLK  #08h,tmp
  100.         SPLK  #0000h,LCDChar_m
  101. loop?  LACC LCDChar
  102.         SFR  
  103.         SACL  LCDChar
  104.         LACC  LCDChar_m
  105.         ROL
  106.         SACL  LCDChar_m
  107.         LACC  tmp
  108.         SUB  #1
  109.         SACL  tmp
  110.         BNZ  loop?
  111.  
  112.         LACC  LCDChar_m
  113.         AND  #00F0h
  114.         SACL  LCDlo
  115.         LACC  LCDChar_m,4
  116.         AND  #00F0h
  117.         SACL  LCDhi
  118.         .endm
  119.  
  120. DispLCD .macro Order        ; 1=> ordre, 2 => Char, on utilise le LCDhi également pour les ordres ! 02/2007
  121.       CS_LCDon
  122.       LDP  #0E0h
  123.       LACC  SPI_BUF
  124.       .if Order=1   ; 1=> ordre, 2 => Char
  125.       SPLK  #0F8h, SPI_DAT    ; Transmit start Ordre
  126.       .endif
  127.       .if Order=2   
  128.       SPLK  #0FAh, SPI_DAT    ; Transmit start Order
  129.       .endif
  130. ;   LACC SPI_BUF
  131. lcd1? BIT  SPI_STATUS,BIT6
  132.       BCND  lcd1?, NTC
  133.       LACC  SPI_BUF
  134.          
  135.       LDP  #LCDlo
  136.       LACC  LCDlo    
  137.       LDP  #0E0h         
  138.       SACL  SPI_DAT    ; Transmit Low byte
  139. ;   LACC SPI_BUF
  140. lcd2? BIT  SPI_STATUS,BIT6
  141.       BCND  lcd2?, NTC
  142.       LACC  SPI_BUF
  143.  
  144.       LDP  #LCDhi
  145.       LACC  LCDhi    
  146.       LDP  #0E0h         
  147.       SACL  SPI_DAT     ; Transmit hi byte
  148.       LACC  SPI_BUF
  149. lcd3? BIT  SPI_STATUS,BIT6
  150.       BCND  lcd3?, NTC
  151.       LACC  SPI_BUF
  152.       CS_LCDoff
  153.       .endm
  154.  
  155. Attends .macro laps    ; attends un "laps" de temps
  156.         LDP   #i
  157.         SPLK  #0,i
  158. loopi?  LACC  i
  159.         ADD  #1
  160.         SACL  i
  161.         SUB #laps
  162.         BNZ loopi?
  163.       .endm
  164.  
  165. ; Convertit un "Word" hexa en "4 chars Hexadécimaux"
  166. ConvHexa .macro Var, offs    ; attends un "offs" de 4, 8, 12 ou 16
  167.       LACC  Var,offs
  168.       SACH  tmp
  169.       LACC  tmp
  170.       AND  #0Fh
  171.       SACL  tmp
  172.       SUB  #9
  173.       BCND  unHexa?, GT
  174.       LACC  tmp
  175.       ADD  #030h
  176.       B   eviteHexa?
  177. unHexa?
  178.       LACC  tmp
  179.       ADD  #037h
  180. eviteHexa?
  181.       SACL  *+
  182.       .endm
  183.  
  184. ; Convertit un "Word" hexa en "4 chars Décimaux + signe"
  185. ConvDec .macro Var 
  186.       SETC  SXM
  187.       LACC  Var
  188.       BCND  positif?, GEQ
  189.       ZAC
  190.       SUB  Var
  191.       SACL  Var
  192.       LACC  #02Dh
  193.       B  evitneg?
  194. positif?
  195.       LACC  #02Bh
  196. evitneg?     
  197.       SACL  signe
  198.       CLRC    SXM             ; pas de sign extension
  199.       SPM   0       ;PM=00, no shift after multiplication, qqun le modifie par ailleurs !
  200. ;   Magic=8389; s=7;  // d=1000
  201. ;   m=floor((Magic*ns>>W)>>s);
  202.       LT    M8389
  203.       MPY   Var
  204.       SPH  tmp
  205.       LACC  tmp,9  ;16-7=9
  206.       SACH  tmp   ;ie 7 LSR
  207. ;  ici on aurait du checker le dépassement de m>9!
  208. ;   ns-=1000*m;
  209.       LACC  Var
  210.       LT    tmp
  211.       MPY   #1000
  212.       SPAC          ;Subtract PREG from ACC
  213.       SACL  Var
  214.       LACC  tmp
  215.       ADD  #030h    ; table de charactères : chiffres
  216.       SACL  millier   ; ecrit char : millier
  217. ;    Magic=5243; s=3;            // d=100
  218. ;    c=floor((Magic*ns>>W)>>s);
  219.       LT    M5243
  220.       MPY   Var
  221.       SPH  tmp
  222.       LACC  tmp,13    ;16-3=13
  223.       SACH  tmp   ;ie 3 LSR
  224. ;   ns-=100*c;
  225.       LACC  Var
  226.       LT    tmp
  227.       MPY   #100
  228.       SPAC          ;Subtract PREG from ACC
  229.       SACL  Var
  230.       LACC  tmp
  231.       ADD  #030h    ; table de charactères : chiffres
  232.       SACL  centaine      ; ecrit char : centaine
  233. ;   Magic=52429; s=3;           // d=10
  234. ;    d=floor((Magic*ns>>W)>>s);
  235.       LT    M52429
  236.       MPYU   Var    ;MPY unsigned
  237.       SPH  tmp
  238.       LACC  tmp,13    ;16-3=13
  239.       SACH  tmp   ;ie 3 LSR
  240. ;   ns-=10*m = u
  241.       LACC  Var
  242.       LT    tmp
  243.       MPY   #10
  244.       SPAC          ;Subtract PREG from ACC
  245.       SACL  Var
  246.       LACC  tmp
  247.       ADD  #030h    ; table de charactères : chiffres
  248.       SACL  dizaine   ; ecrit char : dizaine
  249.       LACC  Var
  250.       ADD  #030h    ; table de charactères : chiffres
  251.       SACL  unite   ; ecrit char : unité
  252.       SETC    SXM             ; remet le sign extension
  253.       .endm
  254.  
  255.   ; Include the C240 MM Regs file
  256.   .include        "c240.h"
  257.   .include        "vects_a.h"
  258. ;- vector table specific à l'IMMC...
  259.  
  260.       .globl  _c_int0
  261.  
  262. ;-------------------------------------------------
  263. ;        Auxiliary Register used
  264. ;        ar6   est utilisé in the interruption ADCINT mais il est d'abord sauve puis restoré
  265. ;-------------------------------------------------
  266.  
  267. ; Numeric formats: all 4.12 fixed point format twos
  268. ; complement for negative values (4 integer & sign + 12 fractional) except otherwise specified
  269. ; Currents: 1000h (4.12)= 2.5 A = Ibase=1.41*In0=1.41*1.7
  270. ; Voltages: 1000h (4.12)= 325 V = Vbase=1.41*Vn0=1.41*230
  271. ; Angles  : [0;ffffh]  = [0;360] degrees
  272. ; Speed   : [0;1000h] (4.12) = [0;1500] rpm
  273.  
  274. ;-------------------------------------------------
  275. ; no Variables and constants initializations
  276. ;-------------------------------------------------
  277.  
  278. *** vSqref and VdSr limitations
  279. Vmin     .set  0F590h  ;4.12 format=-0.652 pu
  280. Vmax     .set  0A70h   ;4.12 format=0.652 pu
  281.  
  282. *** iSqref limitations
  283. Iqsrefmin      .set    -3277    ;4.12 format=-0.8 pu
  284. Iqsrefmax      .set    3277     ;4.12 format=0.8 pu
  285.  
  286. *** Speed calculation constants
  287. ;Kspeed  .set  0da7h    ;this constant is needed only with encoder it is used to
  288.                 ;convert encoder pulses to a speed value.
  289.                 ;8.8 format = 13.65
  290. Kspeed  .set  01ABh    ;8.8 format = 3.333/2 *2^8 voir cahier Rech. 09/03/2005 à cause des 200 us
  291. Kspeed_tr_mn  .set  09Dh  ; cste =1.22/2 *2^8 (ie en 8.8) coef pour avoir Vitesse en tr/mn
  292. Kspeed_tr_mn_pu .set  700  ; cste =4096/1500 *2^8 (ie en 8.8) coef pour Vitesse en tr/mn  -> pu
  293. SPEEDSTEP .set 30      ;speed samplig period =current sampling period * SPEEDSTEP
  294.  
  295. *** current sampling constants
  296.       .bss  Kcurrent,1  ;8.8 format (19.51) sampled currents normalization constant
  297. ;Kr       .set  0eh     ;Kr=T/Tr=3.3117*10-3 (4.12 f) !!! (T -> 200us)
  298. Kt       .set  1b0h    ;Kt=1/(Tr*wBase)=105.42*10-3 (f 4.12)
  299. ;K     .set  148h    ;K=65536/200, the K constant must take the rotor flux
  300. K     .set  28Fh    ;K=65536/100, the K constant must take the rotor flux
  301.                         ;position from 0 to 65535 in 200 sample times
  302.  
  303. *** axis transformation constants
  304. SQRT3inv .set  093dh    ;1/SQRT(3) 4.12 format
  305. SQRT32  .set    0ddbh    ;SQRT(3)/2 4.12 format
  306.       .bss  SR8BIT,1    ;used to shift bits 8 right
  307.  
  308. *** PWM modulation constant
  309. PWMPRD  .set  1000     ;PWM Period=2*1000 ->
  310.                 ;Tc=2*1000*50ns=100us (50ns resolution)
  311. *** PI current regulators parameters
  312.       .bss  Ki,1    ;4.12 format=0.0625
  313.       .bss  Kpi,1  ;4.12 format=1
  314.       .bss  Kcor,1  ;4.12 format=0.0625
  315.  
  316. *** PI speed regulators parameters
  317.       .bss  Kin,1    ;4.12 format=0.012939453
  318.       .bss  Kpin,1  ;4.12 format=4.510498047
  319.       .bss  Kcorn,1  ;4.12 format=0.002685546
  320.  
  321.       .bss  tmp,1   ;temporary variable (to use in ISR only !!!)
  322.       .bss  tmp1,1  ;temporary variable
  323. ;   .bss  n_ref8_8,1       ;8.8 format reference speed for Field Weakening behavior
  324.  
  325.       .bss  option,1        ;virtual menu option number
  326.       .bss  ControlModeOld,1    ;ancienne valeur
  327.       .bss  ControlMode,1  ;0 : V/f
  328.                             ;1 : Cntrl Vect. Cmde en courant
  329.                             ;2 : Cntrl Vect. Regul vitesse
  330.       .bss  Task,1   ;Task=0 : Affichage LCD/DAC, Task=1 : Ctrl Vect, Regul I, calc vitesse
  331.  
  332.       .bss  ia,1    ;phase current ia
  333.       .bss  ib,1    ;phase current ib
  334.       .bss  ic,1    ;phase current ic
  335.       .bss  Vref1,1 ;variable for sector calculation
  336.       .bss  Vref2,1 ;variable for sector calculation
  337.       .bss  Vref3,1 ;variable for sector calculation
  338.       .bss  VDC,1   ;DC Bus Voltage
  339.       .bss  taon,1  ;PWM commutation instant phase 1
  340.       .bss  tbon,1  ;PWM commutation instant phase 2
  341.       .bss  tcon,1  ;PWM commutation instant phase 3
  342.       .bss  Ialphas,1
  343.       .bss  Ibetas,1
  344.       .bss  Valphasref,1
  345.       .bss  Vbetasref,1
  346.       .bss  Vdsref,1
  347.       .bss  Vqsref,1
  348.       .bss  Idsref,1
  349.       .bss  Ids,1
  350.       .bss  Iqsref,1
  351.       .bss  Iqs,1
  352.       .bss  epiq,1  ;Q-Axis Current Regulator Error
  353.       .bss  epid,1  ;D-Axis Current Regulator Error
  354.       .bss  xiq,1   ;Q-Axis Current Regulator Integral Component
  355.       .bss  xid,1   ;D-Axis Current Regulator Integral Component
  356.       .bss  n,1     ;vitesse mécanique
  357.       .bss  n_tr_mn,1     ;vitesse mécanique en tr/mn
  358.       .bss  n_ref,1    ;speed reference
  359.       .bss  nref_tr_mn,1  ;speed reference en tr/mn
  360.       .bss  epin,1  ;speed error (used in speed regulator)
  361.       .bss  xin,1   ;speed regulator integral component
  362.       .bss  Teta_cm1,1       ;rotor flux position with current
  363.                 ;model used only in the
  364.                 ;communication program
  365.       .bss  sinTeta_cm,1     ;sine rotor flux position with current model, 4.12 f
  366.       .bss  cosTeta_cm,1     ;cosine rotor flux position with current model, 4.12 f
  367. ;   .bss  i_mr,1  ;magnetizing current (used only in the current model), 4.12 f
  368.       .bss  fs,1    ;rotor flux speed 4.12 f
  369.       .bss  K_V_fs,1    ; V/f factor in 4.12 f
  370.  
  371. ; ADC variables
  372.       .bss    _Imes1,1
  373.       .globl  _Imes1
  374.       .bss    _Imes2,1
  375.       .globl  _Imes2
  376.       .bss    _Ref1,1
  377.       .globl  _Ref1
  378.       .bss    _Ref2,1
  379.       .globl  _Ref2         
  380.  
  381. *** my DAC memory
  382.       .bss    WhichDAC,1      ; Quelle donnee a transmettre now (1, 2, 3 ou 4)
  383.       .bss    DAC_OR,1         ; OR value of numero DAC
  384.       .bss    DataDAC,1   ; donnee à envoyer sur le DAC pour le LOW 8bits
  385.       .bss  DAC1,1   ;DAC variable memory for DAC1
  386.       .bss  DAC2,1   ;DAC variable memory for DAC2
  387.       .bss  DAC3,1   ;DAC variable memory for DAC3
  388.       .bss  DAC4,1   ;DAC variable memory for DAC4
  389. ; inutile    .bss    NewData,1        ; flag de donnee à envoyer
  390. *** END my DAC memory
  391.       .bss  run,1   ;initialization flag
  392.       .bss  Teta_cm,1        ;real rotor flux position, output
  393.           ;of the current model
  394.       .bss  serialtmp,1      ;serial communication temporary
  395.           ;variable
  396.       .bss  VDCinvT,1        ;VDCinv*(T/2) (used in SVPWM)
  397.       .bss  tetaincr,1       ;variable used in current model
  398.       .bss  Index,1 ;pointer used to access sine look-up table
  399. * PI regulators variable
  400.       .bss  upi,1   ;PI regulators (current and speed) output
  401.       .bss  elpi,1  ;PI regulators (current and speed)
  402.                 ;limitation error
  403.       .bss  encincr,1        ;encoder pulses increment between
  404.                       ;two consecutive Sampling periods
  405.       .bss  speedtmp,1       ;used to accumulate encoder pulses
  406.                       ;increments (to calculate the
  407.                       ;speed each speed sampling period)
  408.       .bss  speedstep,1      ;sampling periods down counter
  409.                       ;used to define speed sampling
  410.                       ;period
  411.       .bss _SpeedRef,1
  412. ;   .bss SCItable,40h
  413.       .bss i,1
  414.       .bss j,1
  415.       .bss LCDRafj,1
  416.       .bss LCDlo,1
  417.       .bss LCDhi,1
  418.       .bss LCDupdate,1
  419.       .bss LCDline,1
  420.       .bss LCDcol,1
  421.       .bss LCDChar,1
  422.       .bss LCDChar_m,1
  423. LCDRafrate  .set 500      ; vitesse de rafraichissement de l'ecran : (500+32+1)*200 us
  424. ;   .bss LCDtable,32
  425.  
  426.       .data
  427.       .label LCDtable_src  ;LOAD addy of the table(FLASH)
  428. LCDtable        ;run addy of the table
  429. ;   .word      "Salam Lotfi     "
  430. ;   .word      "I1=    , I2=    "
  431. ;   .word      "SalamLB,fs=+00.0"
  432.       .word   "Vd=+000,fs=+00.0"
  433.       .word   "K=+0000,Wm=+0000"
  434. Vdsrefoffs  .set LCDtable+3
  435. fsoffs      .set LCDtable+11
  436. Koffs    .set LCDtable+18
  437. Wmoffs      .set LCDtable+27
  438.       .label LCDtable_srcI    ;LOAD addy of the table(FLASH) for current control
  439.       .word   "Iq*+0.0,Id*=+0.0"
  440.       .word   "Iq=+0.0,Wm=+0000"
  441. Iqsrefoffs  .set LCDtable+3
  442. Idsrefoffs  .set LCDtable+12
  443. Iqsoffs   .set LCDtable+19
  444.       .label LCDtable_srcWm  ;LOAD addy of the table(FLASH) for speed control
  445.       .word   "Id*+0.0,W*=+0000"
  446.       .word   "Iq=+0.0,Wm=+0000"
  447. WmIdsrefoffs  .set LCDtable+3
  448. Wmrefoffs   .set LCDtable+11
  449.  
  450.       .bss  Var,1
  451.       .bss  signe,1
  452.       .bss  millier,1
  453.       .bss  centaine,1
  454.       .bss  dizaine,1
  455.       .bss  unite,1
  456.       .bss  M8389,1
  457.       .bss  M5243,1
  458.       .bss  M52429,1
  459.       .bss  M5000,1
  460.       .bss  M300,1
  461.       .bss  M250,1
  462.  
  463.       .data
  464.       .label sintab  ;LOAD addy of the sinetable(FLASH)
  465. SinusRam        ;run addy of the table
  466.       .include       sinus.tab    ;sine wave look-up table for sine and cosinewaves generation
  467.                                   ;generated by Excel 4.12 format
  468. ;----- END look-up table .includes
  469. ;----- END Variables and constants
  470.  
  471.  
  472.       .text     ;link in "text section"
  473.                 ; Start the program code HERE for FLASH reasons (entry point 1000h)
  474. _c_int0:
  475. ;-------------------------------------------------
  476. ;        Board general settings
  477. ;-------------------------------------------------
  478. ;        SETC    CNF
  479.         CLRC    CNF  ; B0 for data memory
  480.         CLRC    OVM             ; Reset overflow mode
  481.       SETC    SXM             ; Reset sign extension mode
  482.       CLRC    XF
  483.       spm   0       ;no shift after multiplication
  484.       SETC    INTM            ; Set global interrupt mask (pas d'INT)
  485.  
  486. ; avant les interruptions, recopie de la table sinus de flash en RAM
  487.       LDP  #tmp
  488.       SAR  AR6, tmp
  489.       MAR  *,AR6
  490.       LAR  AR6, #SinusRam
  491.       RPT  #255            
  492.       BLPD  #sintab, *+
  493.  
  494. ; recopie aussi la LCDtable de la flash vers la ExtDM(.data en run)
  495.       LAR  AR6, #LCDtable
  496.       RPT  #31
  497.       BLPD  #LCDtable_src, *+
  498.  
  499.       LAR  AR6, tmp
  500.       MAR  *, AR1 ;restore
  501.       LDP #M8389
  502.       SPLK  #8389, M8389
  503.       SPLK  #5243, M5243
  504.       SPLK  #52429, M52429
  505.       SPLK  #5000, M5000
  506.       SPLK  #250, M250
  507.       SPLK  #300, M300
  508.  
  509. ;-------------------------------------------------
  510. ;        Variables initialization
  511. ;-------------------------------------------------
  512.       ldp   #run ;control variable page
  513.       ZAC
  514.       SACL  run
  515.       SACL  Task
  516.       SACL  Index
  517.       SACL  xid
  518.       SACL  xiq
  519.       SACL  xin
  520.       SACL  upi
  521.       SACL  elpi
  522.       SACL  Vref1
  523.       SACL  Vref2
  524.       SACL  Vref3
  525.       SACL  Iqsref
  526.       SACL  Ids
  527.       SACL  Iqs
  528.       SACL  nref_tr_mn
  529.       SACL  n_ref
  530.       SACL  i
  531.       SACL  j
  532.       SACL  ControlModeOld   
  533.       SACL  ControlMode ; 0 : V/f initialement
  534. ; attention au ZAC
  535.       SPLK    #1, ControlMode  ; 2 : Regul I en Ctrl Vect initialement
  536. ;    SPLK  #2,  ControlMode ; 2 : Regul Wm en Ctrl Vect initialement
  537.  
  538. ; current regul / field weakening : noFieldWeakening
  539.       splk  #0666h,Idsref  ;Idsref=0.4 pu ie 1A pour 2.5 A de Ibase;Idsref 4.12 f without Field Weakening
  540.       SPLK    #LCDRafrate, LCDRafj  ; rafraichissement de l'ecran
  541.  
  542.       splk  #0EC4h, VDC      ;The DC voltage is 300 V
  543.                       ;Vdc=0.923 in 4.12 with a Vbase=325 V
  544.       splk  #043Bh, VDCinvT   ;T/(Vdc*2) or PWMPRD/VDC=1083
  545.                       ;rescaled by 4.12
  546. ; special coeff / variable page
  547.       splk  #1000h, Kcurrent  ;8.8 format (64.00) sampled currents normalization constant
  548.                               ; 5A=512=200h, Ib=2.5A=64, =1 p.u.
  549. *** axis transformation constants
  550.       splk  #100h, SR8BIT   ;used to shift bits 8 right
  551. ; Fluxage nominal
  552.       splk  #1000h, K_V_fs
  553. *** PI current regulators parameters
  554.       splk  #0100h, Ki        ;4.12 format=0.0625
  555.       splk  #01000h, Kpi      ;4.12 format=1
  556.       splk  #0100h, Kcor      ;4.12 format=0.0625
  557.  
  558. *** PI speed regulators parameters
  559.       splk  #35h, Kin   ;4.12 format=0.012939453
  560.       splk  #482bh, Kpin      ;4.12 format=4.510498047
  561.       splk  #0bh, Kcorn       ;4.12 format=0.002685546
  562.  
  563. ;------- END Variables initialization ------------
  564.  
  565. ; load ISR addresses to Interrupt Vector in on-chip block B2
  566. ; en special pour toutes les cartes... wrap, old and new
  567.       LDP #0
  568.       LACC  #ADCINT
  569.       SACL  adcintvec
  570.  
  571. ;   LACC #Phantom
  572. ;   SACL xint1vec
  573. ;   LACC #Phantom2
  574. ;   SACL xint2vec
  575. ;   LACC #Phantom2
  576. ;   SACL xint3vec
  577.  
  578.     ; trap any phantom int !
  579.       LACC  #Phantom2
  580.       LDP #0
  581.       SACL  rxintvec
  582.       SACL  txintvec
  583.       SACL  xint1vec
  584.       SACL  xint2vec
  585.       SACL  xint3vec
  586.       SACL  spiintvec
  587.       SACL  wdtintvec
  588. ;   SACL adcintvec
  589.       SACL  cmp1intvec
  590.       SACL  cmp2intvec
  591.       SACL  cmp3intvec
  592.       SACL  scmp1intvec
  593.       SACL  scmp2intvec
  594.       SACL  scmp3intvec
  595.       SACL  tpint1vec
  596.       SACL  tcint1vec
  597.       SACL  tufint1vec
  598.       SACL  tofint1vec
  599.       SACL  tpint2vec
  600.       SACL  tcint2vec
  601.       SACL  tufint2vec
  602.       SACL  tofint2vec
  603.       SACL  tpint3vec
  604.       SACL  tcint3vec
  605.       SACL  tufint3vec
  606.       SACL  tofint3vec
  607.       SACL  capint1vec
  608.       SACL  capint2vec
  609.       SACL  capint3vec
  610.       SACL  capint4vec
  611.       SACL  pdpintvec
  612. **********************************************
  613. *        Function to disable the watchdog timer
  614. **********************************************
  615.       ldp   #DP_PF1
  616.       splk  #006Fh, WD_CNTL
  617.       splk  #05555h, WD_KEY
  618.       splk  #0AAAAh, WD_KEY
  619.       splk  #006Fh, WD_CNTL  ; clear WDFLAG, Disable WDT, set WDT
  620.                                 ; for 1 second overflow.
  621.                       ; ici pas de WD ! ie disabled
  622.  
  623. ***********************************************************
  624. *        Function to initialise the Event Manager
  625. *        GPTimer 1 => Full PWM
  626. *        Enable Timer 1==0 interrupt on INT2
  627. *        All other pins are IO
  628. ***********************************************************
  629. ;Set up SYSCLK and PLL for C24 EVM with 10MHz ;External Clk
  630. ; inutile car l'IMMC est déjà à 20 MHz
  631. ; Set up CLKOUT to be SYSCLK p6-6
  632. ;    ldp   #DP_PF1    ;deja mise pour le WD
  633. ;_____IRDA______
  634.       SPLK    #4000h,SYSCR   ; je veux le port IOPC1 dispo
  635.       LACC    SYSSR
  636.       AND     #069FFh
  637.       SACL    SYSSR           ; Clear reset variables :-)
  638.  
  639.       ;Set up zero wait states for external memory
  640.       ;inutile aussi
  641. ;   lacc  #0004h
  642. ;   sacl  *
  643. ;   out   *,WSGR
  644.  
  645.  
  646. ;ADC Unit setting : mesure de Imes1 et Imes2 sur ADC 6 et 14 d'abord
  647.       ldp     #0E0h
  648.       splk    #1B6Ch,ADCNTL1   ; cONFIGURATION DE L'adcntl1
  649.       splk    #0403h,ADCNTL2   ; cONFIGURATION DE L'adcntl2
  650.                             ; PREPARE TO CONV. adc 1&2
  651.       lacc    ADCFIFO1            ; CLEAR FIRST AND SECOND LEVEL adc fifo 1 & 2
  652.       lacc    ADCFIFO1
  653.       lacc    ADCFIFO2
  654.       lacc    ADCFIFO2
  655.  
  656.       ;Clear All EV Registers
  657.       zac
  658.       LDP   #DP_EV
  659. ;   sacl  GPTCON
  660.       sacl  T1CNT
  661.       sacl  T1CMP
  662.       sacl  T1PER
  663.       sacl  T1CON
  664.       sacl  T2CNT
  665.       sacl  T2CMP
  666.       sacl  T2PER
  667.       sacl  T2CON
  668.       sacl  T3CNT
  669.       sacl  T3CMP
  670.       sacl  T3PER
  671.       sacl  T3CON
  672.       sacl  COMCON
  673.       sacl  ACTR
  674.       sacl  SACTR
  675.       sacl  DBTCON
  676.       sacl  CMPR1
  677.       sacl  CMPR2
  678.       sacl  CMPR3
  679.       sacl  SCMPR1
  680.       sacl  SCMPR2
  681.       sacl  SCMPR3
  682.       sacl  CAPCON
  683.       sacl  CAPFIFO
  684.       LACC    FIFO1
  685.       LACC    FIFO2
  686.       LACC    FIFO3
  687. ;   sacl  FIFO1
  688. ;   sacl  FIFO2
  689. ;   sacl  FIFO3
  690. ;   sacl  FIFO4
  691.  
  692.       ;Initialise PWM         ; No software dead-band
  693.       splk  #666h,ACTR        ;Bits 15-12 not used, no space vector
  694.                 ;PWM compare actions
  695.                 ;PWM6/PWM5 -Active Low/Active High
  696.                 ;PWM4/PWM3 -Active Low/Active High
  697.                 ;PWM2/PWM1 -Active Low/Active High
  698.       SPLK  #002Ah,SACTR    ; active high pour les simple PWM
  699.       splk  #100,CMPR1
  700.       splk  #200,CMPR2
  701.       splk  #300,CMPR3
  702.       splk  #100,SCMPR1       ; pour la 2eme etoile initialisation
  703.       splk  #200,SCMPR2
  704.       splk  #300,SCMPR3
  705.       splk  #0307h,COMCON     ;FIRST enable PWM operation
  706.                 ;Reload Full Compare when T1CNT=0
  707.                 ;Disable Space Vector
  708.                 ;Reload Full Compare Action when T1CNT=0
  709.                 ;Enable Full Compare Outputs
  710.                 ; Enable Simple Compare Outputs
  711.                 ; GPTimer 1 for simple PWM
  712.                 ; Reload SIMPLE Compare Action when T1CNT=0
  713.                 ;Full Compare Units in PWM Mode
  714.       splk  #8307h,COMCON     ;THEN enable Compare operation
  715. ; configuration du timer 1     
  716.       splk  #0100h,GPTCON   ; GP Timer Control Register : lance ADC sur Timer1 period match !
  717.       splk  #PWMPRD,T1PER     ;Set T1 period
  718.       splk  #0,T1CNT
  719.  
  720.       splk  #02800h,T1CON    ;STOP TIMER on Emulation suspend
  721. ;   splk  #0A800h,T1CON    ;Ignore Emulation suspend POUR EVITER LES PBS aux IGBT et à la MAS
  722.                 ;Cont Up/Down Mode
  723.                 ;x/1 prescalar
  724.                 ;Use own TENABLE
  725.                 ;Disable Timer,enable later
  726.                 ;Internal Clock Source
  727.                 ;Reload Compare Register when T1CNT=0
  728.                 ;Disable Timer Compare operation
  729.  
  730. ; I/O setting p11-11
  731. ; PWM enable sur les 2 etoiles 1-6 et 7-9 ainsi que les CAP... et des IOP A0 et A3 non utilisés ici
  732.       LDP     #00E1h
  733.       SPLK    #00700h, OPCRA          ; pas de ADCIN 0,1, 9, 8 et ni IOPB0 à IOPB2 mais :
  734.                            ; IOPA0 ààà  IOPA3 et PWM 7-9 sur I/O Port
  735. ; refait plus loin pour SCI / IRDA
  736. ;_____IRDA______
  737. ; --->SPLK    #0030h, OPCRB           ; mettre les CAP1 et 2 /QEP... sur I/O Port
  738.       SPLK    #00F00h, PADATDIR       ;IOPA0, 1, 2 et 3 as output
  739.       LACC    PADATDIR
  740.  
  741. ***********************************************************
  742. *        Incremental encoder initialization
  743. *        Capture for Incremental encoder correction with Xint2
  744. ***********************************************************
  745.       ldp   #DP_EV
  746.       splk  #0000h,T3CNT     ;configure counter register
  747.       splk  #00FFh,T3PER     ;configure period register
  748.       splk  #0E2F0h,CAPCON   ;T3 is selected as Time base for QEP
  749.       splk  #9870h,T3CON     ;configure for QEP and enable Timer T3
  750. *** END encoder/capture initialization
  751.  
  752.  
  753.  
  754. ****************************************************************
  755. * Serial communication initialization pour échange  IRDA -> HSDL 1001 -> HSDL 7001->DSP (directement sur le SCI RX)
  756. ****************************************************************
  757.       LDP     #0E0h
  758.       SPLK    #00010111b,SCI_CCNTL    ;one stop bit, no parity, 8bits
  759. ;_____IRDA______
  760.       SPLK    #0011h,SCI_CNTL1        ;SCI SW RESET=0 + configure : enable RX only, pas de TX, clk
  761. ;    SPLK    #0013h,SCI_CNTL1        ;SCI SW RESET=0 + configure : enable RX et TX , clk
  762.       SPLK    #0000h,SCI_CNTL2        ;disable SCI interrupts
  763.       SPLK    #0000h,SCI_HBAUD        ;MSB |
  764.       SPLK    #0082h,SCI_LBAUD        ;LSB |9600 Baud for sysclk 10MHz
  765.       SPLK    #0022h,SCI_PORT_C2      ;I/O setting, SCI RX et TX pins disponibles
  766. ;    SPLK    #0052h,SCI_PORT_C2      ;I/O setting, SCI RX pin disponible, TX en I/O Output 5V pour HDSL7001
  767. ;    SPLK    #0012h,SCI_PORT_C2      ;I/O setting, SCI RX pin disponible, TX en I/O Output 0V (marche pas)
  768.       SPLK    #0031h,SCI_CNTL1        ;end initialization et l'active : SW RESET=1
  769. ****************************************************************
  770. * IOPC1 et 2 en output 5V pour config HSDL 7001 en 9600 bds
  771. ****************************************************************
  772.       LDP     #00E1h
  773. ;_____IRDA______
  774.       SPLK    #0034h, OPCRB           ; mettre les CAP1 et 2 /QEP et IOPC2 ... sur I/O Port
  775.       SPLK    #00606h, PCDATDIR       ;IOPC1 et 2  as output et 5V
  776.       LACC    PCDATDIR
  777.  
  778.    ; XINTj en input ... pas d'interruptions... car pattes en l'air
  779.       LDP     #0E0h
  780.       LACC    XINT1_CNTL
  781.       AND     #0FFFEh
  782.       SACL    XINT1_CNTL
  783.       LACC    XINT2_CNTL
  784.       AND     #0FFFEh
  785.       SACL    XINT2_CNTL
  786.       LACC    XINT3_CNTL
  787.       AND     #0FFFEh
  788.       SACL    XINT3_CNTL
  789.  
  790. ; determine config ControlMode en fonction de Ref1 : <200h mode 0 V/f
  791. ;                          entre 200h et 300h  mode 1 Cntr Vect I
  792. ;                          >300h  mode 2 Cntr Vect Wm
  793.       LDP   #00E0h                 ; DP=224 pour la configuration de l'ADC
  794.       splk    #195Bh,ADCNTL1   ; 5 et 13 en Immediate SOC
  795.       RPT #3
  796.      NOP
  797. Cnvf  BIT     ADCNTL1,BIT7
  798.       BCND    Cnvf,TC
  799. ; Lecture de la référence _Ref1 sur la broche 5
  800.       LACC    ADCFIFO1,10
  801.       LDP   #_Ref1
  802.       SACH    _Ref1
  803.       LACC    _Ref1
  804.       AND     #03FFh                ; on ajoute le masque
  805.       SACL    _Ref1
  806.       SUB      #200h
  807.       BCND     TestCM1,GEQ
  808.       SPLK     #0,ControlMode
  809.       B fintestCM
  810. TestCM1
  811.       LACC  _Ref1
  812.       SUB #300h
  813.       BCND     SetCM2,GEQ
  814.       SPLK     #1,ControlMode
  815.       B fintestCM
  816. SetCM2
  817.       SPLK     #2,ControlMode
  818. fintestCM
  819. ; on remet la config ADC start par EV sur 6 et 14
  820.       ldp     #0E0h
  821.       splk    #1B6Ch,ADCNTL1   ; cONFIGURATION DE L'adcntl1
  822.       splk    #0403h,ADCNTL2   ; cONFIGURATION DE L'adcntl2
  823.                             ; PREPARE TO CONV. adc 1&2
  824.       lacc    ADCFIFO1            ; CLEAR FIRST AND SECOND LEVEL adc fifo 1 & 2
  825.       lacc    ADCFIFO1
  826.       lacc    ADCFIFO2
  827.       lacc    ADCFIFO2
  828.  
  829. *********************************************************
  830. * SPI COnfig et DAC variable init
  831. *********************************************************
  832.       LDP     #WhichDAC
  833.       SPLK    #0001h,WhichDAC
  834.  
  835.       CS_LCDoff
  836.       CS_DACoff
  837.       SPI_Config 1    ; SPI pour DAC et LCD idem :-)
  838.       LACC  SPI_BUF     ; clear le SPI_STATUS,BIT6 : donnée_envoyé
  839. ;----------------------------------------------------------------
  840. ; initialisation de l'écran LCD
  841. ;----------------------------------------------------------------
  842. ;   SPI_Config 2  ; SPI pour LCD  config identique
  843.  
  844.       LDP  #LCDlo
  845.       SPLK  #000h, LCDlo
  846.       SPLK  #0C0h, LCDhi
  847.       DispLCD 1          ;  foncé
  848.       ; observers
  849.       LDP     #00E1h
  850.       LACC    PADATDIR
  851.       OR      #1                  ; A0= +5V
  852.       SACL    PADATDIR
  853.  
  854.       Attends 2000
  855.  
  856.       LDP  #LCDlo
  857.       SPLK  #080h, LCDlo
  858.       SPLK  #000h, LCDhi
  859.       DispLCD 1         ; clear LCD, 1.53 ms
  860.  
  861.       Attends 2000
  862.  
  863.         ; observers
  864.       LDP     #00E1h
  865.       LACC    PADATDIR
  866.       AND     #0FFFEh             ; A0= 0V
  867.       SACL    PADATDIR
  868.  
  869. ;   LDP    #LCDlo
  870. ;   SPLK #050h, LCDlo    ; display off, cursor On
  871. ;   SPLK #000h, LCDhi
  872. ;   DispLCD 1
  873. ;   Attends  2000
  874.  
  875.       LDP  #LCDlo
  876.       SPLK  #060h, LCDlo        ; increment, 1.53 ms
  877.       SPLK  #000h, LCDhi
  878.       DispLCD 1
  879.       Attends 2000
  880.  
  881.       LDP  #LCDlo
  882.       SPLK  #030h, LCDlo        ; display on, cursor Off
  883.       SPLK  #000h, LCDhi
  884.       DispLCD 1
  885.       Attends 2000
  886.  
  887. ;   LDP    #LCDlo
  888. ;   SPLK #080h, LCDlo
  889. ;   SPLK #020h, LCDhi
  890. ;   DispLCD 2            ; Char "A"
  891. ;   Attends  500
  892.  
  893. ;   LDP    #LCDlo
  894. ;   SPLK #040h, LCDlo
  895. ;   SPLK #020h, LCDhi
  896. ;   DispLCD 2            ; Char "B"
  897. ;   Attends  500
  898.  
  899.       LDP #LCDupdate
  900.       SPLK  #1, LCDupdate  ; doit MAJ la table sur l'Ecran LCD
  901.       SPLK  #0, LCDline  ; REW au début de la table
  902.       SPLK  #0, LCDcol
  903.  
  904. ****************************
  905. *        Enable Interrupts
  906. ****************************
  907.                 ;Clear EV IFR and IMR regs
  908.       LDP   #DP_EV
  909.       SPLK  #07FFh,IFRA
  910.       SPLK  #00FFh,IFRB
  911.       SPLK  #000Fh,IFRC
  912.                 ;NO Timer Int ! only ADCINT voir plus bas
  913.       SPLK  #0000h,IMRA      ;PDPINT is disabled, with 0201h is enabled
  914.       SPLK  #0000h,IMRB
  915.       SPLK  #0000h,IMRC
  916.       LACC    IVRA
  917.       LACC    IVRB
  918.       LACC    IVRC
  919.           ;Set IMR and clear any Flags
  920.       LDP   #0h
  921.       LACC  #0FFh
  922.       SACL  IFR
  923.       LACC  #0100000b         ; INT6 ADC int
  924.       SACL  IMR
  925.           
  926.       LDP   #DP_EV
  927.       LACC  T1CON
  928.       OR    #40h      ;Enable Timer 1 qu'à la fin !!!
  929.       SACL  T1CON
  930.       SPM 00 ;?? ça stabilise
  931.           
  932.       CLRC  INTM    ;enable all interrupts, now we may
  933.                 ;serve interrupts
  934. ****************************
  935. *        END Enable Interrupts
  936. ****************************
  937.  
  938.  
  939. ***************
  940. *        Virtual Menu
  941. ***************
  942. ;routine de lecture du port serie SCI pour les infos PC->DSP
  943. MENU
  944. ;    clrc  xf                  ; TI
  945.       LDP     #0E0h
  946.       BIT     SCI_RX_STAT,BIT6    ;is there any character available ?
  947.       BCND    MENU,ntc        ;if not repeat the cycle (polling)
  948.       LACC    SCI_RX_BUF
  949.       AND     #0ffh           ;only 8 bits !!!
  950.       LDP     #option         ;if yes, get it and store it in option
  951.       SACL    option          ;now in option we have the option number
  952.                       ;of the virtual menu
  953.  
  954.       SUB     #031h           ;is it option 1 ?
  955.         BCND    notone,neq      ;if not branch to notone
  956. *****************************
  957. * Option 1): Speed Ref
  958. *****************************
  959. navail11
  960.       ldp #0E0h
  961.       BIT     SCI_RX_STAT,BIT6    ;is there any character available ?
  962.       BCND    navail11,ntc        ;if not repeat the cycle (polling)
  963.       LACC    SCI_RX_BUF
  964.       AND     #07Fh               ;prend les 7 LSB
  965.       LDP     #serialtmp
  966.       SACL    serialtmp
  967. navail12
  968.       ldp #0E0h
  969.       BIT     SCI_RX_STAT,BIT6    ;is there any character available ?
  970.       BCND    navail12,ntc        ;if not repeat the cycle (polling)
  971.       LACC    SCI_RX_BUF,7        ;prend les 8 MSB
  972.       LDP     #serialtmp
  973.       AND     #03F80h               ;prend les 7 MSB du High
  974.       ADD     serialtmp
  975.       SACL    _SpeedRef
  976. ;--debugg
  977.       ; /Wmbase -> SALC n_ref
  978.       B       MENU            ; back to the main loop
  979. *** END Option 1): Speed Ref
  980.  
  981. notone
  982.         B       MENU            ; back to the main loop
  983. **********************************************************
  984. * fin main part
  985. **********************************************************
  986.  
  987. ***********************************************************
  988. * ADCint ISR                                              *
  989. * synchronization of the control algorithm with the PWM   *
  990. * EOC interrupt au milieur du motif MLI          *
  991. ***********************************************************
  992. ADCINT
  993. ************************
  994. * Context Saving
  995. ************************
  996. ; deja sauvé par le moniteur
  997. ; sauf le AR6 !!!
  998.       LARP  AR1
  999.       SAR AR6,*+      ;context save
  1000.       CLRC    CNF  ; B0 for data memory, car le monitor le touche !!!
  1001.       SPM   0                ;PM=00, no shift after multiplication
  1002.       LDP   #Task
  1003.       LACC  Task
  1004.       BZ  TaskAffichage
  1005. ;-------------------------------------------------------
  1006. ;-- else: Task=1 : Cmde Vect , Regul I, Calc Vitesse ---
  1007. ;-------------------------------------------------------
  1008.       SPLK  #0, Task  ; prochaine Task 0
  1009. ; observers
  1010.       LDP     #00E1h
  1011.       LACC    PADATDIR
  1012.       OR      #1                  ; debut Task 1 => A0= +5V
  1013.       SACL    PADATDIR
  1014.  
  1015.  
  1016. ;  ****************************
  1017. ;  *  ACQUISITION DE MESURES  *
  1018. ;  ****************************
  1019.  
  1020. ; Lecture de la mesure sur la broche 6
  1021.      LDP     #00E0h     ; DP=224
  1022.       LACC    ADCFIFO1,10
  1023.       LDP   #_Imes1
  1024.       SACH    _Imes1
  1025.       LACC    _Imes1 
  1026.       AND     #03FFh                ; on ajoute le masque
  1027.       SACL    _Imes1
  1028.      
  1029. ; Lecture de la mesure sur la broche 14
  1030.       LDP     #00E0h          ; DP=224
  1031.       LACC    ADCFIFO1,10
  1032.       LACC    ADCFIFO2,10
  1033.       LDP   #_Imes2
  1034.       SACH    _Imes2             
  1035.       LACC    _Imes2 
  1036.       AND     #03FFh                ; on ajoute le masque
  1037.       SACL    _Imes2
  1038.  
  1039. ; Configuration de ADCNTL1 : on va l'obliger à lire les références en broche 5 et 13
  1040. ; Suite à cette opération on va reconfigurer l'ADC comme précédemmen
  1041.       LDP   #00E0h                 ; DP=224 pour la configuration de l'ADC
  1042.       LACC    ADCFIFO2,10        ; pour effacer
  1043.       SPLK    #195Bh,ADCNTL1        ; Configuration de l'ADCNTL1 : broche 5 et conversion immédiate
  1044. ;   RPT  #3
  1045. ;     NOP  attente introduite par du calcul de Kcurrent*Imes
  1046.  
  1047. ; mise en forme des courants (2.5V offset, Koefficien et LEM DC)
  1048.       LDP  #_Imes1
  1049.       LACC  _Imes1 
  1050.       AND   #03FFh                ; on ajoute le masque
  1051.       SUB  #0200h  ; on enlève l'offset de 2.5 V (courant pos ou negatif..)
  1052.       SACL  _Imes1
  1053.       SPM   3       ;PM=11, 6 right shift after multiplication
  1054.       LT    _Imes1
  1055.       MPY   Kcurrent
  1056.       PAC
  1057.       SFR
  1058.       SFR
  1059.       SACL  ia      ;PM=11, +2 sfr= 8 right shift
  1060. ;      SPM   0 tjrs en 3
  1061. ;      SUB   #112    ;then we subtract a DC offset (that should be zero, but it isn't)
  1062. ;   SACL  ia      ;sampled current ia, 4.12 format
  1063.  
  1064.       LACC  _Imes2
  1065.       AND   #03FFh                ; on ajoute le masque
  1066.       SUB  #0200h  ; on enlève l'offset de 2.5 V (courant pos ou negatif..)
  1067.       SACL  _Imes2
  1068. ;   SPM   3       ;PM=11, 6 right shift after multiplication
  1069.       LT    _Imes2
  1070.       MPY   Kcurrent
  1071.       PAC
  1072.       SFR
  1073.       SFR
  1074.       SACL  ib      ;PM=11, +2 sfr= 8 right shift
  1075.       SPM   0
  1076. ;      ADD   #-80    ;then we subtract a DC offset (that should be zero, but it isn't)
  1077. ;   SACL  ib      ;sampled current ia, 4.12 format
  1078.  
  1079. ; Attente de la fin de la conversion         
  1080.       LDP   #00E0h                 ; DP=224 pour la configuration de l'ADC
  1081. Conv_End  BIT     ADCNTL1,BIT7
  1082.       BCND    Conv_End,TC
  1083. ; Lecture de la référence _Ref1 sur la broche 5
  1084.       LACC    ADCFIFO1,10
  1085.       LDP   #_Ref1
  1086.       SACH    _Ref1
  1087.       LACC    _Ref1
  1088.       AND     #03FFh                ; on ajoute le masque
  1089.       SACL    _Ref1
  1090. ; Lecture de la référence _Ref2 sur la broche 13
  1091.      LDP     #00E0h     ; DP=224
  1092.       LACC    ADCFIFO1,10
  1093.       LACC    ADCFIFO2,10
  1094.       LDP   #_Ref2
  1095.       SACH    _Ref2
  1096.       LACC    _Ref2
  1097.       AND     #03FFh                  ; on ajoute le masque
  1098.       SACL    _Ref2
  1099.       LDP     #00E0h            ; DP=224
  1100.       LACC    ADCFIFO2,10 
  1101. ; Réinitialisation de l'ADC : on repasse sur les broches 6 et 14
  1102.       LDP   #00E0h
  1103.       SPLK    #1B6Ch,ADCNTL1          ; Configuration initiale de l'ADCNTL1
  1104. ;-----  FIN DE L'ACQUISITION  --------------------
  1105.  
  1106. ;----- END Current sampling - AD conversions -----
  1107.  
  1108. ;-------------------------------------------------
  1109. ;        Clarke transformation
  1110. ;        (a,b) -> (alpha,beta)
  1111. ;     calcule aussi ic...
  1112. ;        Ialphas = ia
  1113. ;        Ibetas = (2 * ib + ia) / sqrt(3)
  1114. ;-------------------------------------------------
  1115.       LDP   #ia
  1116.          lacc  ia
  1117.          sacl  Ialphas  ;iSalfa 4.12 format
  1118.          add   ib
  1119.          neg
  1120.          sacl  ic
  1121.          lacc  ib,1    ;iSbeta = (2 * ib + ia) / sqrt(3)
  1122.          add   ia
  1123.          sacl  tmp
  1124.          lt    tmp
  1125.          mpy   #SQRT3inv        ;SQRT3inv = (1 / sqrt(3)) = 093dh
  1126.                                 ;4.12 format = 0.577350269
  1127.          pac
  1128.          sach  Ibetas,4;iSbeta 4.12 format
  1129. ;------- END Clarke transformation ---------------
  1130.  
  1131. ;-------------------------------------------------
  1132. ; Measured speed and control
  1133. ;-------------------------------------------------
  1134. ;--- encoder pulses reading
  1135.       LDP   #DP_EV
  1136.       LACC  T3CNT   ;we read the encoder pulses
  1137.       SPLK  #0000h,T3CNT
  1138.       LDP   #encincr
  1139.       SACL encincr
  1140. ;--- END Encoder pulses reading
  1141.  
  1142. ;-------------------------------------------------
  1143. ; Calculate speed and update reference speed variables
  1144. ;-------------------------------------------------
  1145.       LACC  speedstep        ;are we in speed control loop
  1146.                       ;(SPEEDSTEP times current control loop)
  1147.       SUB   #1
  1148.       SACL  speedstep
  1149.       BCND  nocalc,GT        ;if we aren't, skip speed calculation
  1150. ;-------------------------------------------------
  1151. ; Speed calculation from encoder pulses
  1152. ;-------------------------------------------------
  1153.       SPM   3       ;PM=11, 6 right shift after multiplication
  1154.       LT    speedtmp;multiply encoder pulses by Kspeed
  1155.                    ;(8.8 format constant)
  1156.                    ;to have the value of speed
  1157.       MPY   #Kspeed
  1158.       PAC
  1159.       SFR
  1160.       SFR           ;PM=11, +2 sfr= 8 right shift
  1161.       SACL  n   ; vitesse en pu ie 1000h=1.0=1500 tr/mn
  1162. ; calcule la vitesse en tr/mn pour l'affichage LCD
  1163.       LT    speedtmp
  1164.       MPY   #Kspeed_tr_mn
  1165.       PAC
  1166.       SFR
  1167.       SFR           ;PM=11, +2 sfr= 8 right shift
  1168.       SACL  n_tr_mn
  1169.  
  1170.       LACC  #0      ;zero speedtmp for next calculation
  1171.       SACL  speedtmp
  1172.       LACC  #SPEEDSTEP       ;restore speedstep to the value
  1173.                             ;SPEEDSTEP
  1174.       SACL  speedstep        ;for next speed control loop
  1175.       SPM   0                ;PM=00, no shift after multiplication
  1176. ;---  END Speed calculation from encoder pulses --
  1177.  
  1178. ;-------------------------------------------------
  1179. ; Speed regulator with integral component correction
  1180. ;-------------------------------------------------
  1181.       LACC  ControlMode
  1182.       SUB  #2  ;  Speed regul ON
  1183.       BNZ  nocalc ; evite
  1184.       ; convertit nref_tr_mn en nref
  1185.       SPM   3       ;PM=11, 6 right shift after multiplication
  1186.       LT    nref_tr_mn
  1187.       MPY   #Kspeed_tr_mn_pu
  1188.       PAC
  1189.       SFR
  1190.       SFR           ;PM=11, +2 sfr= 8 right shift
  1191.       SACL  n_ref
  1192.       SPM   0                ;PM=00, no shift after multiplication
  1193. ;   LACC  n_ref
  1194.       ;Regulateur de Vitesse : (n_ref-n) -> Iqsref
  1195.       LACC  n_ref
  1196.       SUB   n
  1197.       SACL  epin    ;epin=n_ref-n, 4.12 format
  1198.       LACC  xin,12
  1199.       LT    epin
  1200.       MPY   Kpin
  1201.       APAC
  1202.       SACH  upi,4   ;upi=xin+epin*Kpin, 4.12 format
  1203.                 ;here we start to saturate
  1204.       BIT   upi,0
  1205.       BCND  upimagzeros,NTC   ;If value >0 we branch
  1206.       LACC  #Iqsrefmin       ;negative saturation
  1207.       SUB   upi
  1208.       BCND  neg_sat,GT       ;if upi<ISqrefmin then branch to saturate
  1209.       LACC  upi     ;value of upi is valid
  1210.       B     limiters
  1211. neg_sat
  1212.       LACC  #Iqsrefmin       ;set acc to -ve saturated value
  1213.       B     limiters
  1214.           
  1215. upimagzeros    ;Value is positive
  1216.       LACC  #Iqsrefmax       ;positive saturation
  1217.       SUB   upi
  1218.       BCND  pos_sat,LT       ;if upi>ISqrefmax then branch to saturate
  1219.       LACC  upi              ;value of upi valid
  1220.       B     limiters
  1221. pos_sat
  1222.       LACC  #Iqsrefmax       ;set acc to +ve saturated value
  1223.  
  1224. limiters
  1225.       SACL  Iqsref           ;Store the acc as reference value
  1226.       SUB   upi
  1227.       SACL  elpi    ;elpi=iSqref-upi, 4.12 format
  1228.           
  1229.       LT    elpi    ;if there is no saturation elpi=0
  1230.       MPY   Kcorn
  1231.       PAC 
  1232.       LT    epin
  1233.       MPY   Kin
  1234.       APAC
  1235.       ADD   xin,12
  1236.       SACH  xin,4   ;xin=xin+epin*Kin+elpi*Kcorn, 4.12 format
  1237. ;--- END Speed regulator with integral component correction --
  1238.  
  1239. nocalc                 ;branch here if we don't have to calculate the speed
  1240.       LACC  speedtmp;use the actual encoder increment to ;update the
  1241.                 ;increments accumulator used to calculate the speed
  1242.       ADD   encincr
  1243.       SACL  speedtmp
  1244. ;----- END Measured speed -----------------
  1245.  
  1246. ;-------------------------------------------------
  1247. ; sinTeta_cm, cosTeta_cm calculation
  1248. ;-------------------------------------------------
  1249.  
  1250.       LDP     #Teta_cm
  1251. ; j'essaie l'AR6 mais je le sauve d'abord...
  1252.       LARP  AR6
  1253.       LT    Teta_cm     ;current model rotor flux position
  1254.       MPYU  SR8BIT    ; OK now plus de .data
  1255.       PAC   
  1256.       SACH  Index
  1257.       LACC  Index
  1258.       AND   #0ffh
  1259.       ADD   #SinusRam
  1260.       SACL  tmp
  1261.       LAR   AR6,tmp
  1262.       LACC  *
  1263.       SACL  sinTeta_cm       ;sine Teta_cm value, 4.12 format
  1264.       LACC  Index            ;The same for Cos ...
  1265.                       ;cos(teta)=sin(teta+90ø)
  1266.       ADD   #40h             ;90ø = 40h elements of the table
  1267.       AND   #0ffh
  1268.       ADD   #SinusRam
  1269.       SACL  tmp
  1270.       LAR   AR6,tmp
  1271.       LACC  *
  1272.       SACL  cosTeta_cm       ;cosine Teta_cm value, 4.12 format
  1273. ;-- END sinTeta_cm, cosTeta_cm calculation -------
  1274. ;-------------------------------------------------
  1275. ;        Park transformation
  1276. ;        (alpha,beta)->(d,q)
  1277. ;        Ids=Ialphas*cos(Teta_cm)+Ibetas*sin(Teta_cm)
  1278. ;        Iqs=-Ialphas*sin(Teta_cm)+Ibetas*cos(Teta_cm)
  1279. ;-------------------------------------------------
  1280.          lt    Ibetas
  1281.          mpy   sinTeta_cm
  1282.          lta   Ialphas
  1283.          mpy   cosTeta_cm
  1284.          mpya  sinTeta_cm
  1285.          sach  Ids,4            ;Ids 4.12 format
  1286.          lacc  #0
  1287.          lt    Ibetas
  1288.          mpys  cosTeta_cm
  1289.          apac
  1290.          sach  Iqs,4            ;Iqs 4.12 format
  1291. ;-------- END Park transformation ----------------
  1292.  
  1293. ;-------------------------------------------------
  1294. ;        Current Model
  1295. ;-------------------------------------------------
  1296.   ;-------------------------------------------------
  1297.   ; V/f open loop control ou Vector
  1298.   ;-------------------------------------------------
  1299. ; attribure les Ref potar en fonction du ControlMode
  1300.       LACC  ControlMode
  1301.       BNZ  tstRefContrlVect_I_Wm
  1302.       ; ICI V/f open loop control
  1303.       ; fs et K_V_fs en entrée sur les _Refx
  1304. ;   LACC _Ref2,2  ; multiplie par 4
  1305. ;    SACL    fs              ; variation de la frequence
  1306.       LACC  _Ref2,3  ; multiplie par 8
  1307.       SUB  #0FF8h  ; (1000h-8) pour avoir -49.9 Hz -> +50Hz
  1308.       SACL  fs
  1309.       ; multiplie par 4 puis par VDC pour avoir le K
  1310.       ; ou Vdsref si l'on veut une commande indépendante
  1311.       ; cmde indépendante
  1312.       SPM 00 ;?? ça stabilise
  1313.       LT    VDC
  1314.       MPY   _Ref1
  1315.       PAC
  1316.       SACH  K_V_fs,6  ; decal 4 bits et *2 pour qu'au maximum, il ne vale que 0.923 pu =VDC :-)
  1317.       ; cmde dépendante
  1318.       ;   lt    VDC
  1319.       ;   mpy   _Ref1
  1320.       ;   pac
  1321.       ;   sach  vSdref,6 ; decal 4 bits et *2
  1322.       ; V/f : calcule Vsdref=K_V_fs*fs en p.u.
  1323.       LT    fs
  1324.       MPY   K_V_fs
  1325.       PAC
  1326.       SACH  Vdsref,4
  1327.       SPLK  #0, Vqsref
  1328.       B  FinControlMode 
  1329.       ; !!! saute la partie controle vect (I et Wm)
  1330. tstRefContrlVect_I_Wm
  1331. ; attribure les Ref potar en fonction du ControlMode
  1332.       LACC  ControlMode
  1333.       SUB  #2
  1334.       BNZ  tstRefControlModeI
  1335.       ; ControlMode *Wm*
  1336.       LACC  _Ref1
  1337. ;-- debug positif only + echelle Wmref
  1338.       SACL  nref_tr_mn
  1339.       LACC  _Ref2
  1340.       SACL  Idsref
  1341.       B  ContrlVect
  1342. tstRefControlModeI
  1343.       LACC  ControlMode
  1344.       SUB  #1
  1345.       BNZ  ContrlVect
  1346.       ; ControlMode *I*
  1347.       LACC  _Ref1
  1348.       SFL
  1349.       SUB #400h
  1350. ;-- debug positif only
  1351.       SACL  Iqsref
  1352.       LACC  _Ref2
  1353.       SACL  Idsref
  1354.  
  1355. ContrlVect
  1356.   ; ICI  Vector control : regul I (et meme Wm)
  1357.   ;    calculde fs=p*Wm+Wsl ou plutot : fs=n+Kt*(iSq/i_mr)
  1358. ;--debug
  1359. ;--debug
  1360. ;     LACC  iSd
  1361. ;         SUB   i_mr
  1362. ;         SACL  tmp
  1363. ;         LT    tmp
  1364. ;         MPY   #Kr
  1365. ;         PAC
  1366. ;         SACH  tmp,4
  1367. ;         LACC  tmp
  1368. ;         ADD   i_mr
  1369. ;         SACL  i_mr             ;i_mr=i_mr+Kr*(iSd-i_mr), 4.12 f
  1370. ;         BCND  i_mrnotzero,NEQ
  1371. ;         LACC  #0
  1372. ;         SACL  tmp              ;if i_mr=0 then tmp=iSq/i_mr=0
  1373. ;         B     i_mrzero
  1374. i_mrnotzero
  1375.       ;--- division (iSq/i_mr)
  1376. ;         LACC  i_mr
  1377.          LACC  Ids
  1378.          BCND  i_mrzero,EQ
  1379.          SACL  tmp1
  1380.          LACC  Iqs
  1381.          ABS 
  1382.          SACL  tmp
  1383.          LACC  tmp,12
  1384.          RPT   #15
  1385.          SUBC  tmp1
  1386.          SACL  tmp              ;tmp=Iqs/i_mr ou plutot Iqs/Ids
  1387.          LACC  Iqs
  1388.          BCND  Iqspositif,GT
  1389.          LACC  tmp
  1390.          NEG 
  1391.          SACL  tmp              ;tmp=Iqs/i_mr, 4.12 format
  1392. Iqspositif
  1393. i_mrzero
  1394.       ;--- END division
  1395.          LT    tmp
  1396.          MPY   #Kt
  1397.          PAC 
  1398.          SACH  tmp,4            ;slip frequency, 4.12 format
  1399.          LACC  tmp              ;load tmp in low ACC
  1400.          ADD   n
  1401.          SACL  fs               ;rotor flux speed, 4.12 format,
  1402.                                 ;fs=n+Kt*(iSq/i_mr)
  1403.  
  1404. ;; current regul / field weakening
  1405. ;noFieldWeakening
  1406. ;         lacc  #0666h   ;Idsref=0.4 pu ie 1A pour 2.5 A de Ibase
  1407. ;         sacl  Idsref    ;Idsref 4.12 f without Field Weakening
  1408. ;
  1409.  
  1410. ;-------------------------------------------------------
  1411. ;        q-axis current regulator with integral component *     correction
  1412. ;        (Iqsref-Iqs)->(Vqsref)
  1413. ;-------------------------------------------------------
  1414.          lacc  Iqsref
  1415.          sub   Iqs
  1416.          sacl  epiq    ;epiq=Iqsref-Iqs, 4.12 format
  1417.          lacc  xiq,12
  1418.          lt    epiq
  1419.          mpy   Kpi
  1420.          apac
  1421.  
  1422.          sach  upi,4   ;upi=xiq+epiq*Kpi, 4.12 format
  1423.  
  1424.          bit   upi,0
  1425.          bcnd  upimagzeroq,NTC
  1426.          lacc  #Vmin
  1427.          sub   upi
  1428.          bcnd  neg_satq,GT      ;if upi<Vmin branch to saturate
  1429.          lacc  upi     ;value of upi is valid
  1430.          b     limiterq
  1431. neg_satq
  1432.          lacc  #Vmin   ;set ACC to neg saturation
  1433.          b     limiterq
  1434. upimagzeroq            ;Value was positive
  1435.          lacc  #Vmax
  1436.          sub   upi
  1437.          bcnd  pos_satq,LT      ;if upi>Vmax branch to saturate
  1438.          lacc  upi              ;value of upi is valid
  1439.          b     limiterq
  1440. pos_satq
  1441.          lacc  #Vmax   ;set ACC to pos saturation
  1442. limiterq
  1443.          sacl  Vqsref  ;Save ACC as reference value
  1444.          sub   upi
  1445.          sacl  elpi    ;elpi=vSqref-upi, 4.12 format
  1446.          lt    elpi
  1447.          mpy   Kcor    ;change to dma
  1448.          pac
  1449.          lt    epiq
  1450.          mpy   Ki      ;change to dma
  1451.          apac
  1452.          add   xiq,12
  1453.          sach  xiq,4   ;xiq=xiq+epiq*Ki+elpi*Kcor, 4.12 f
  1454. ;------- END q-axis regulator with integral component correction
  1455.  
  1456. ;-------------------------------------------------------
  1457. ;        d-axis current regulator with integral component
  1458. ;        correction
  1459. ;        (Idsref-Ids)->(Vdsref)
  1460. ;-------------------------------------------------------
  1461.          lacc  Idsref
  1462.          sub   Ids
  1463.          sacl  epid    ;epid=Idsref-Ids, 4.12 format
  1464.          lacc  xid,12
  1465.          lt    epid
  1466.          mpy   Kpi
  1467.          apac
  1468.          sach  upi,4   ;upi=xid+epid*Kpi, 4.12 format
  1469.  
  1470.          bit   upi,0
  1471.          bcnd  upimagzerod,NTC
  1472.          lacc  #Vmin
  1473.          sub   upi
  1474.          bcnd  neg_satd,GT      ;if upi<Vmin branch to saturate
  1475.          lacc  upi              ;upi value valid
  1476.          b     limiterd
  1477. neg_satd
  1478.          lacc  #Vmin   ;set acc to neg saturation
  1479.          b     limiterd
  1480.  
  1481. upimagzerod    ;value was positive
  1482.          lacc  #Vmax
  1483.          sub   upi
  1484.          bcnd  pos_satd,LT      ;if upi>Vmax branch to saturate
  1485.          lacc  upi              ;upi value valid
  1486.          b     limiterd
  1487.  
  1488. pos_satd
  1489.          lacc  #Vmax   ;set acc to pos saturation
  1490. limiterd
  1491.          sacl  Vdsref  ;store ACC as reference value
  1492.          sub   upi
  1493.          sacl  elpi    ;elpi=vSdref-upi, 4.12 format
  1494.          lt    elpi
  1495.          mpy   Kcor
  1496.          pac
  1497.          lt    epid
  1498.          mpy   Ki
  1499.          apac
  1500.          add   xid,12
  1501.          sach  xid,4   ;xid=xid+epid*Ki+elpi*Kcor, 4.12 f
  1502. ;------- END d-axis regulator with integral component correction
  1503.  
  1504. ;--debug
  1505. ;--debug
  1506. FinControlMode
  1507.  
  1508.  
  1509.       LDP #fs
  1510. ;--- rotor flux position calculation ---
  1511.       LACC  fs
  1512.       ABS
  1513.       SACL  tmp
  1514.       LT    tmp
  1515.       MPY   #K
  1516.       PAC
  1517.       SACH  tetaincr,4
  1518.       BIT   fs,0
  1519.       BCND  fs_neg,TC
  1520.       LACC  tetaincr
  1521.       ADDS  Teta_cm
  1522.       SACL  Teta_cm
  1523.       B     fs_pos
  1524. fs_neg   
  1525.       LACC  Teta_cm
  1526.       SUBS  tetaincr
  1527.       SACL  Teta_cm
  1528.           
  1529.           ;Teta_cm=Teta_cm+K*fs=Teta_cm+tetaincr
  1530.           ;(0;360)<->(0;65535)
  1531. fs_pos   
  1532. ;   RPT   #3
  1533.       RPT   #4    ; (5 shifts to the right =>0 et 800h pour toute l'echelle)
  1534.       SFR
  1535.       SACL  Teta_cm1;(0;360)<->(0;2048), ds notre cas
  1536.                 ;used only for the visualization
  1537. ;-------- END Current Model ----------------------
  1538.  
  1539. ;-------- Inverse Park transformation ------------------
  1540. ;        (d,q) -> (alpha,beta)
  1541. ;        Vbetasref = Vqsref * cos(Teta_cm)+ Vdsref * sin(Teta_cm)
  1542. ;        Valphasref =-Vqsref * sin(Teta_cm) + Vdsref * cos(Teta_cm)
  1543. ;-------------------------------------------------------
  1544.       LACC  #0
  1545.       LT    Vdsref
  1546.       MPY   sinTeta_cm
  1547.       LTA   Vqsref
  1548.       MPY   cosTeta_cm
  1549.       MPYA  sinTeta_cm
  1550.       SACH  Vbetasref,4
  1551.  
  1552.       LACC  #0
  1553.       LT    Vdsref
  1554.       MPYS  cosTeta_cm
  1555.       APAC
  1556.       SACH  Valphasref,4
  1557. ;-------- END Inverse Park transformation ------------------
  1558.  
  1559. ;        MLI calculée Lotfi
  1560. ;-------------------------------------------------------
  1561.  
  1562. ;-------- Clarke ---------------------------------------
  1563. ;        Vref1 = Valphasref
  1564. ;        Vref2 = (-Valphasref + sqrt(3) * Vbetasref) / 2
  1565. ;        Vref3 = (-Valphasref - sqrt(3) * Vbetasref) / 2
  1566. ;-------------------------------------------------------
  1567.       LDP   #Valphasref
  1568.       LT    Vbetasref
  1569.       MPY   #SQRT32
  1570.       PAC
  1571.       SUB   Valphasref,11
  1572.       SACH  Vref2,4 ;4.12 format
  1573.       PAC
  1574.       NEG
  1575.       SUB   Valphasref,11
  1576.       SACH  Vref3,4 ;4.12 format
  1577.       LACC  Valphasref
  1578.       SACL  Vref1   ;4.12 format
  1579. ;-------- END reference voltage (Clarke inverse)------------
  1580. ; bras phase a
  1581.       LT    VDCinvT
  1582.       MPY   Vref1
  1583.       PAC
  1584.       SACH  tmp,4   ;tmp=VDCinvT*Vref1, 4.12 format
  1585.       LACC  #PWMPRD       
  1586.       SUB   tmp
  1587.       SFR
  1588.       SACL  taon      ;taon=0.5*(PWMPRD-tmp) =0.5*(PWMPRD-VDCinvT*Vref1)
  1589. ; bras phase b
  1590.       LT    VDCinvT
  1591.       MPY   Vref2
  1592.       PAC
  1593.       SACH  tmp,4   ;tmp=VDCinvT*Vref2, 4.12 format
  1594.       LACC  #PWMPRD       
  1595.       SUB   tmp
  1596.       SFR
  1597.       SACL  tbon      ;tbon=0.5*(PWMPRD-tmp) =0.5*(PWMPRD-VDCinvT*Vref2)
  1598. ; bras phase c
  1599.       LT    VDCinvT
  1600.       MPY   Vref3
  1601.       PAC
  1602.       SACH  tmp,4   ;tmp=VDCinvT*Vref3, 4.12 format
  1603.       LACC  #PWMPRD       
  1604.       SUB   tmp
  1605.       SFR
  1606.       SACL  tcon      ;tcon=0.5*(PWMPRD-tmp) =0.5*(PWMPRD-VDCinvT*Vref3)
  1607. ***      END taon,tbon and tcon calculation
  1608. ; recopie des taon ds les cmp registers
  1609.       BLDD  taon,#CMPR1     
  1610.       BLDD  taon,#SCMPR1
  1611.       BLDD  tbon,#CMPR2
  1612.       BLDD  tbon,#SCMPR2
  1613.       BLDD  tcon,#CMPR3
  1614.       BLDD  tcon,#SCMPR3
  1615. ***********************************************
  1616. *        END Pulse Width Modulation
  1617. ***********************************************
  1618.         ; observers
  1619.       LDP     #00E1h
  1620.       LACC    PADATDIR
  1621.       AND     #0FFFEh             ; fin Task 1 =>  => A0= 0V
  1622.       SACL    PADATDIR
  1623.  
  1624.       B  FinISR_ADCINT
  1625. ;--- END Task=1 : Cmde Vect , Regul I, Calc Vitesse --
  1626.  
  1627. ;-------------------------------------------
  1628. ;-------- Task=0 : Affichage LCD/DAC -------
  1629. ;-------------------------------------------
  1630. TaskAffichage
  1631.       LDP     #Task
  1632.       SPLK  #1, Task  ; prochaine Task 1
  1633.  
  1634.         ; observers
  1635.       LDP     #00E1h
  1636.       LACC    PADATDIR
  1637.       OR      #8          ; debut Task 0 => A3= +5V
  1638.       SACL    PADATDIR
  1639.  
  1640. ; essai pour voir l'update du dac
  1641.       LDP   #i
  1642.       LACC  j
  1643. ;   ADD    #1000
  1644.       ADD  #200
  1645.       SACL  j
  1646.       SUB #1000h
  1647.       BCND pasdeRAZj,LT
  1648.       splk #0, j
  1649. pasdeRAZj
  1650.  
  1651.       CALL    DACout        ; toutes les 200us , sort sur le DAC 1 voie, puis mux...
  1652. ;debug C/C le LCD
  1653. ;   B      finLCD
  1654.  
  1655. ; comme elle prend du temps c'est soit afficher 1 char,soit un ordre à l'LCD
  1656. ; affiche la LCD table si besoin
  1657.       LDP   #LCDupdate
  1658.       LACC  LCDupdate
  1659.       SUB  #1
  1660.       BNZ  testhome
  1661.       ; if (LCDupdate==1) => Affiche 1 char
  1662.       CALL    AfficheLCDTable
  1663.       B   finLCD
  1664. testhome
  1665.       LACC  LCDupdate
  1666.       SUB  #2
  1667.       BNZ  testMAJ
  1668.       ; if (LCDupdate==2) => remise à la 1er ligne du curseur
  1669.       LDP  #LCDupdate
  1670.       SPLK  #0h, LCDupdate        ; Cursor homed start
  1671.       SPLK  #040h, LCDlo        ; Cursor home
  1672.       SPLK  #000h, LCDhi
  1673.       DispLCD 1
  1674.       B   finLCD
  1675. ; si zero alors demande la MAJ des I1 et I2
  1676. testMAJ
  1677.       LACC  LCDupdate
  1678.       BNZ  finLCD
  1679.       ; if (LCDupdate==0 ou autre) => le home s'est effectué
  1680.  
  1681.       LDP #LCDRafj
  1682.       LACC  LCDRafj
  1683.       SUB #1
  1684.       SACL  LCDRafj
  1685.       BNZ  finLCD
  1686.       ; demande le rafraichissement toutes les (500+32+1)*200 us
  1687.       SPLK  #LCDRafrate, LCDRafj
  1688.       SPLK  #1h, LCDupdate        ; Cursor must go home
  1689.       ; test si le type de contrôle a changé, auquel cas, change l'affichage
  1690.       LACC  ControlMode
  1691.       SUB  ControlModeOld
  1692.       BZ    finrecopieMaskLCD
  1693.  
  1694.       MAR  *,AR6
  1695.       LACC  ControlMode
  1696.       SACL  ControlModeOld
  1697.       SUB  #2
  1698.       BNZ  testControlModeI
  1699.       ; recopie la LCDtable *Wm* de la flash vers la la ExtDM(.data en run)
  1700.       LAR  AR6, #LCDtable
  1701.       RPT  #31
  1702.       BLPD  #LCDtable_srcWm, *+
  1703.       B  finrecopieMaskLCD
  1704. testControlModeI
  1705.       LACC  ControlMode
  1706.       SUB  #1
  1707.       BNZ  testControlModeV_f
  1708.       ; recopie la LCDtable *I* de la flash vers la la ExtDM(.data en run)
  1709.       LAR  AR6, #LCDtable
  1710.       RPT  #31
  1711.       BLPD  #LCDtable_srcI, *+
  1712.       B  finrecopieMaskLCD
  1713. testControlModeV_f
  1714.       ; qqesoit ControlMode !=2 et !=1 alors V_f
  1715.       ; recopie la LCDtable *V/f*  de la flash vers la la ExtDM(.data en run)
  1716.       LAR  AR6, #LCDtable
  1717.       RPT  #31
  1718.       BLPD  #LCDtable_src, *+
  1719. finrecopieMaskLCD
  1720.  
  1721. ;--debug C/C rafraichissement memoire vidéo : LCDTable
  1722. ;   B    finLCD
  1723.  
  1724.       MAR *,AR6 ; AR6 déjà sauvé sur la pile pointée par AR1
  1725.       LACC  ControlMode
  1726.       SUB  #2
  1727.       BNZ  InfotestCtrl_I
  1728.       ; rafraichissement memoire vidéo pour Controle Wm
  1729.  
  1730.       ; courant Idsref
  1731.             LAR   AR6, #WmIdsrefoffs
  1732.             LT    Idsref
  1733.             MPY   M250
  1734.             PAC
  1735.             SACH  Var,4
  1736.             ConvDec Var
  1737.             ; afficher +2.5 ie "+c.d"
  1738.             LACC  signe
  1739.             SACL  *+
  1740.             LACC  centaine
  1741.             SACL  *+
  1742.             LACC  #02Eh  ;    "."
  1743.             SACL  *+
  1744.             LACC  dizaine
  1745.             SACL  *+
  1746.  
  1747.       ; vitesse mecanique Wmref
  1748.             LAR   AR6, #Wmrefoffs
  1749.             LACC  nref_tr_mn
  1750.             SACL  Var
  1751.             ConvDec Var
  1752.             ; afficher "+mcdu"
  1753.             LACC  signe
  1754.             SACL  *+
  1755.             LACC  millier
  1756.             SACL  *+
  1757.             LACC  centaine
  1758.             SACL  *+
  1759.             LACC  dizaine
  1760.             SACL  *+
  1761.             LACC  unite
  1762.             SACL  *+
  1763.  
  1764.       ; courant Iqs
  1765.             LAR   AR6, #Iqsoffs
  1766.             LT    Iqs
  1767.             MPY   M250
  1768.             PAC
  1769.             SACH  Var,4
  1770.             ConvDec Var
  1771.             ; afficher +2.5 ie "+c.d"
  1772.             LACC  signe
  1773.             SACL  *+
  1774.             LACC  centaine
  1775.             SACL  *+
  1776.             LACC  #02Eh  ;    "."
  1777.             SACL  *+
  1778.             LACC  dizaine
  1779.             SACL  *+
  1780.  
  1781.       ; vitesse mecanique Wm
  1782.             LAR   AR6, #Wmoffs
  1783.             LACC  n_tr_mn
  1784.             SACL  Var
  1785.             ConvDec Var
  1786.             ; afficher "+mcdu"
  1787.             LACC  signe
  1788.             SACL  *+
  1789.             LACC  millier
  1790.             SACL  *+
  1791.             LACC  centaine
  1792.             SACL  *+
  1793.             LACC  dizaine
  1794.             SACL  *+
  1795.             LACC  unite
  1796.             SACL  *+
  1797.       B  finInfotestCtrl
  1798. InfotestCtrl_I
  1799.       LACC  ControlMode
  1800.       SUB  #1
  1801.       BNZ  InfotestCtrl_V_f
  1802.       ; rafraichissement memoire vidéo pour Controle I
  1803.  
  1804.       ; courant Iqsref
  1805.             LAR   AR6, #Iqsrefoffs
  1806.             LT    Iqsref
  1807.             MPY   M250
  1808.             PAC
  1809.             SACH  Var,4
  1810.             ConvDec Var
  1811.             ; afficher +2.5 ie "+c.d"
  1812.             LACC  signe
  1813.             SACL  *+
  1814.             LACC  centaine
  1815.             SACL  *+
  1816.             LACC  #02Eh  ;    "."
  1817.             SACL  *+
  1818.             LACC  dizaine
  1819.             SACL  *+
  1820.  
  1821.       ; courant Idsref
  1822.             LAR   AR6, #Idsrefoffs
  1823.             LT    Idsref
  1824.             MPY   M250
  1825.             PAC
  1826.             SACH  Var,4
  1827.             ConvDec Var
  1828.             ; afficher +2.5 ie "+c.d"
  1829.             LACC  signe
  1830.             SACL  *+
  1831.             LACC  centaine
  1832.             SACL  *+
  1833.             LACC  #02Eh  ;    "."
  1834.             SACL  *+
  1835.             LACC  dizaine
  1836.             SACL  *+
  1837.  
  1838.       ; courant Iqs
  1839.             LAR   AR6, #Iqsoffs
  1840.             LT    Iqs
  1841.             MPY   M250
  1842.             PAC
  1843.             SACH  Var,4
  1844.             ConvDec Var
  1845.             ; afficher +2.5 ie "+c.d"
  1846.             LACC  signe
  1847.             SACL  *+
  1848.             LACC  centaine
  1849.             SACL  *+
  1850.             LACC  #02Eh  ;    "."
  1851.             SACL  *+
  1852.             LACC  dizaine
  1853.             SACL  *+
  1854.  
  1855.       ; vitesse mecanique Wm
  1856.             LAR   AR6, #Wmoffs
  1857.             LACC  n_tr_mn
  1858.             SACL  Var
  1859.             ConvDec Var
  1860.             ; afficher "+mcdu"
  1861.             LACC  signe
  1862.             SACL  *+
  1863.             LACC  millier
  1864.             SACL  *+
  1865.             LACC  centaine
  1866.             SACL  *+
  1867.             LACC  dizaine
  1868.             SACL  *+
  1869.             LACC  unite
  1870.             SACL  *+
  1871.  
  1872.       B  finInfotestCtrl
  1873. InfotestCtrl_V_f
  1874.       ; qqesoit ControlMode !=2 et !=1 alors V_f
  1875.       ; rafraichissement memoire vidéo pour Controle V_f
  1876.  
  1877.       ; Vdsref
  1878.             LAR   AR6, #Vdsrefoffs
  1879.             LT    Vdsref
  1880.             MPY   M300
  1881.             PAC
  1882.             SACH  Var,4
  1883.             ConvDec Var
  1884.             ; afficher +300 ie "+cdu"
  1885.             LACC  signe
  1886.             SACL  *+
  1887.             LACC  centaine
  1888.             SACL  *+
  1889.             LACC  dizaine
  1890.             SACL  *+
  1891.             LACC  unite
  1892.             SACL  *+
  1893.  
  1894.       ; frequence fs
  1895.             LAR   AR6, #fsoffs
  1896.       ;   ConvHexa fs, 4
  1897.       ;   ConvHexa fs, 8
  1898.       ;   ConvHexa fs, 12
  1899.       ;   ConvHexa fs, 16
  1900.       ; ----- afiche en 4 char decimaux :
  1901.             LT    fs
  1902.             MPY   M5000 ;neg ou positif
  1903.             PAC
  1904.             SACH  Var,4
  1905.             ConvDec Var
  1906.             ; afficher +50.0 ie "+mc.d"
  1907.             LACC  signe
  1908.             SACL  *+
  1909.             LACC  millier
  1910.             SACL  *+
  1911.             LACC  centaine
  1912.             SACL  *+
  1913.             LACC  #02Eh  ;    "."
  1914.             SACL  *+
  1915.             LACC  dizaine
  1916.             SACL  *+
  1917.  
  1918.       ; Constante K_V_f
  1919.             LAR   AR6, #Koffs
  1920.             LACC  K_V_fs
  1921.             SACL  Var
  1922.             ConvDec Var
  1923.             ; afficher "+mcdu"
  1924.             MAR *+    ; evite le signe +
  1925.             LACC  millier
  1926.             SACL  *+
  1927.             LACC  centaine
  1928.             SACL  *+
  1929.             LACC  dizaine
  1930.             SACL  *+
  1931.             LACC  unite
  1932.             SACL  *+
  1933.  
  1934.       ; vitesse mecanique Wm
  1935.             LAR   AR6, #Wmoffs
  1936.             LACC  n_tr_mn
  1937.             SACL  Var
  1938.             ConvDec Var
  1939.             ; afficher "+mcdu"
  1940.             LACC  signe
  1941.             SACL  *+
  1942.             LACC  millier
  1943.             SACL  *+
  1944.             LACC  centaine
  1945.             SACL  *+
  1946.             LACC  dizaine
  1947.             SACL  *+
  1948.             LACC  unite
  1949.             SACL  *+
  1950. finInfotestCtrl
  1951.  
  1952. finLCD
  1953.         ; observers
  1954.       LDP     #00E1h
  1955.       LACC    PADATDIR
  1956.       AND     #0FFF7h             ; fin Task 0 => A3= 0V
  1957.       SACL    PADATDIR
  1958. ;--- END Task=0 : Affichage LCD/DAC -------
  1959.  
  1960. FinISR_ADCINT
  1961. *-- rajouté (ou modifié) par lotfi 06/03-----------
  1962.       LDP     #0E0h
  1963.       LACC    SYSIVR
  1964.       ldp     #0h    ;
  1965.       LACC    IFR    ;
  1966.       sacl    IFR    ; clear interrupt flags (int1 par ADCint)
  1967. ;---- fin rajout
  1968. ;-------------------------------------------
  1969. ; restore status registers à la manière IMMC monitor :-(
  1970. ;-------------------------------------------
  1971.       LARP    AR1             ; ARP=1
  1972.       MAR     *-              ; AR1--
  1973.       LAR   AR6,*-      ;restore the one used for sin table access
  1974.       ZALS    *-              ; restore ACCL
  1975.       ADDH    *-              ; restore ACCH
  1976.       LST     #0, *-          ; load ST0
  1977.       LST     #1, *-          ; load ST1
  1978.       CLRC    INTM
  1979.       RET
  1980. ;----  END Context Restore and Return ------
  1981.  
  1982. ;-------------------------------------------
  1983. ;- routine d'envoi de donnees sur SPI pour DAC (elle envoie HI et lo)
  1984. ;-------------------------------------------
  1985. DACout
  1986. ; sort les references sur le SPI
  1987. ; NewData : inutile car l'envoi est controlé uniquement ici
  1988. ;   LDP   #Vdsref
  1989. ;   LACC  Vref1
  1990. ;   ADD  #01000h
  1991. ;   SFR
  1992. ;   SFR
  1993. ; spyDAC
  1994. ;   LDP   #Idsref
  1995. ;   LACC  Idsref
  1996. ;   ADD  #00800h
  1997. ;   SACL DAC1
  1998.       LDP   #n_ref
  1999.       LACC  n_ref
  2000.       ADD #01000h
  2001.       SFR
  2002.       SACL  DAC1
  2003.  
  2004. ;   LDP   #n
  2005. ;  LACC  n
  2006. ;   ADD  #01000h
  2007. ;   SFR
  2008. ;   SFR
  2009. ;   SFR
  2010. ;   SFR
  2011. ; spyDAC
  2012. ; spyDAC
  2013. ;   LACC  j
  2014. ;     LDP   #ids
  2015.       LACC  n
  2016.       ADD #01000h
  2017.       SFR
  2018.       SACL  DAC2
  2019.  
  2020. ;   LDP   #fs
  2021. ;   LACC  fs
  2022. ;   ADD  #01000h
  2023. ;   SFR
  2024. ;   SFR
  2025. ;   SACL DAC2
  2026.  
  2027.  
  2028. ;   LDP   #sinTeta_cm
  2029. ;   LACC  sinTeta_cm
  2030. ;   ADD    #01000h
  2031. ;   SFR
  2032. ;   SACL DAC3
  2033. ;   SUB    #01000h
  2034. ;   BCND neSatpas, LT
  2035. ;   SPLK #00FFFh, DAC3  ;à cause de 1000h (qd ça depasse d'un bit)
  2036. ;neSatpas 
  2037. ;
  2038. ;   LDP   #Teta_cm1
  2039. ;   LACC  Teta_cm1
  2040. ;   SACL DAC4
  2041.       ;LDP   #iqs
  2042.       LACC  Iqsref
  2043.       ADD #00800h
  2044.       SACL  DAC3
  2045.       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2046.       ;LDP   #iqs
  2047.       LACC  Iqs
  2048.       ADD #00800h
  2049.       SACL  DAC4
  2050. ; roulement de tambour ehhh de DAC
  2051.       LACC  WhichDAC
  2052.       ADD     #1                 ; la prochaine fois, sort le suivant
  2053.       SACL  WhichDAC
  2054.       SUB  #5
  2055.       BCND  NoRaz, LT
  2056.       SPLK  #1, WhichDAC
  2057. NoRaz
  2058. ; debug
  2059. ;   SPLK #1,  WhichDAC
  2060.  
  2061. ; ici on arrive avec DAC1..4
  2062.       LDP #WhichDAC
  2063.       LACC  WhichDAC
  2064.       SUB   #1
  2065.       BNZ   test2
  2066.       SPLK  #0010h, DAC_OR
  2067.       LACC  DAC1                 ; Load data du DAC 1 into the ACC
  2068.       SACL  DataDAC
  2069.       B  fintest
  2070.  
  2071. test2 LACC WhichDAC
  2072.       SUB   #2
  2073.       BNZ   test3
  2074.       SPLK  #0050h, DAC_OR
  2075.       LACC  DAC2                 ; Load data du DAC 2 into the ACC
  2076.       SACL  DataDAC
  2077.       B  fintest
  2078.  
  2079. test3 LACC WhichDAC
  2080.       SUB   #3
  2081.       BNZ   test4
  2082.       SPLK  #0090h, DAC_OR
  2083.       LACC  DAC3                 ; Load data du DAC 3 into the ACC
  2084.       SACL  DataDAC
  2085.       B  fintest
  2086.  
  2087. test4 ;inutile de tester c'est un 4 !
  2088.       SPLK  #00D0h, DAC_OR
  2089.       LACC  DAC4                 ; Load data du DAC 4 into the ACC
  2090.       SACL  DataDAC
  2091.  
  2092. fintest
  2093. ;   SPI_Config 1  ; SPI pour DAC inutile car la même
  2094.       CS_DACon        ; Active le DAC
  2095. ; sort sur DAC numero DAC_OR
  2096.       LDP #0E0h
  2097.       LACC  SPI_BUF     ; clear le SPI_STATUS,BIT6 : donnée_envoyé
  2098.       LACC  SPI_PORT_C1        ; SPISTE à 0 to start the transfer
  2099.       AND   #0BFh
  2100.       SACL  SPI_PORT_C1
  2101.  
  2102.       LDP   #DataDAC
  2103. ;   version plus rapide
  2104.       LACC  DataDAC,8       ; Load data du DataDAC into the Hi ACC
  2105.       SACH  tmp
  2106.       LACC  tmp
  2107.       AND   #000Fh     ; Set the DAC control bits (4-7) ou plutot D12-D15
  2108.       OR    DAC_OR        ; DAC voie "DAC_OR", SPD=fast mode
  2109.       LDP  #0E0h
  2110.       SACL  SPI_DAT     ; Transmit HI byte
  2111. att1  BIT   SPI_STATUS,BIT6
  2112.       BCND  att1,NTC
  2113.       LACC  SPI_BUF     ; clear le SPI_STATUS,BIT6 : donnée_envoyé
  2114. ;low_byte
  2115.       LDP   #DataDAC
  2116.       LACC  DataDAC           ; Read the current value of
  2117.       AND  #00FFh      ; data, mask off the lower
  2118.       LDP  #0E0h
  2119.       SACL  SPI_DAT     ; Transmit the LOW byte
  2120.  
  2121. ; transfert fini ?
  2122. att2  BIT   SPI_STATUS,BIT6
  2123.       BCND  att2,NTC
  2124.       LACC  SPI_BUF     ; clear le SPI_STATUS,BIT6 : donnée_envoyé
  2125.  
  2126.       LACC  SPI_PORT_C1        ; en fait : set SPIPC1.6 à 1 => SPISTE pin à 1 ie latch the Data !
  2127.       OR    #040h     
  2128.       SACL  SPI_PORT_C1        ; latch the data into the DAC
  2129.       CS_DACoff    ; Desactive le DAC
  2130.  
  2131.       RET
  2132. ;-- fin de la routine d'envoi de donnees sur SPI (pour DAC)
  2133.  
  2134. ;-------------------------------------------
  2135. ; Routine d'envoi de donnees sur SPI (pour LCD)
  2136. ; met à jour la LCDtable sur l'écran
  2137. ;-------------------------------------------
  2138. AfficheLCDTable
  2139. ;   SPI_Config 2  ; SPI pour LCD inutile car la même
  2140.  
  2141.       LARP  AR6  ; déjà sauvé sur la pile pointée par AR1
  2142.       LDP  #LCDcol
  2143.       LACC  LCDline,4 ; LCDline*16
  2144.       AND   #010h
  2145.       ADD  LCDcol
  2146.       ADD   #LCDtable
  2147.       SACL  tmp
  2148.       LAR   AR6,tmp
  2149.       LACC  *
  2150.       SACL  LCDChar
  2151.       trChar
  2152.       DispLCD 2      ; sortir le Char actuel
  2153. ;   Attends  500  inutile car routine ttes les 200 us !
  2154.  
  2155.       LDP  #LCDupdate
  2156.       LACC  LCDcol    ; col suivante
  2157.       ADD  #1
  2158.       SACL  LCDcol   
  2159.       SUB  #16
  2160.       RETC  LT
  2161.       ZAC
  2162.       SACL  LCDcol   
  2163.       LACC  LCDline  ; ligne suivante
  2164.       ADD  #1
  2165.       SACL  LCDline  
  2166.       SUB  #2
  2167.       RETC  LT
  2168.       ZAC       ; fini d'updater et RAZ au début du tableau
  2169.       SACL  LCDline
  2170.       SACL  LCDcol 
  2171.       LACC  #2        ; demande de remise à la 1er ligne du curseur
  2172.       SACL  LCDupdate  
  2173.       RET
  2174. ;--- fin de la routine d'envoi de donnees sur SPI (pour LCD)
  2175.  
  2176. ;-------------------------------------------
  2177. ; trap some phantom interrupt
  2178. Phantom2
  2179.       B   Phantom2
  2180. ;-------------------------------------------
  2181.  




Download :
f240_im.zip   Sources in asm of im3 for TMS 320 F240.

Back to homepage

Last update : 6 February 2007