Re: [Avr-list] Aversive sur dspic33

2009-07-13 Par sujet Simon Derr
Bonjour Olivier,

> Par contre, je t'avoue que j'hésite à l'intégrer tel quel :
>  - la séparation entre les deux architectures est un peu
>    trop floue. Dans mes rêves les plus fous, il y aurait
>    un repertoire arch/ et un nouveau framework qui saurait
>    gérer ça proprement. Même si j'ai commencé à faire un
>    proto l'an dernier (basé sur les Makefiles du kernel
>    linux-2.6), il reste beaucoup de travail pour finaliser
>    ce prototype.
En fait je n'ai pas envoyé le patch pour qu'il soit intégré tel quel.
C'est surtout, disons, un point de départ :)
C'est aussi pour montrer, comme tu l'as remarqué, que le patch est
finalement assez petit.

>  - tu dis qu'il manque dans le patch un système de build et
>    que tout est mis en dur dans MPLAB.
>    Si j'ai bien compris (corrige moi si je me trompe), il
>    n'est pas possible d'utiliser le compilateur dspic de
>    la même manière qu'une toolchain classique ? Est-ce qu'on
>    pourrait imaginer par exemple de compiler pour dspic en
>    remplaçant avr-gcc par "dspic-gcc" ?
Si si, il est tout à fait possible d'utiliser la toolchain mcc30 comme
toute autre toolchain, avec des Makefiles classiques et compagnie.
C'est juste que pour le moment ce travail n'a pas été fait de notre
côté.

Simon

___
Avr-list mailing list
Avr-list@droids-corp.org
CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive
WIKI : http://wiki.droids-corp.org/index.php/Aversive
DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/
BUGZILLA : http://bugzilla.droids-corp.org
COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog


Re: [Avr-list] Aversive sur dspic33

2009-07-03 Par sujet Simon Derr
2009/7/3 GMail :
> Salut,
> Juste une petite question : pourquoi avoir porté Aversive sur cette
> architecture ? Nous avions commencé a envisager cette possibilité pour la
> facilité que le module QEI fournissait, mais au final nous nous sommes
> rendus compte qu'une solution plus rapide est d'utiliser un compteur
> externe, cette solution a en plus l'avantage d'être extensible a volonté,
> simplement en ajoutant des puces au bus SPI.
> Donc quel est l'avantage de porter aversive ? C'est un défi technique ?

On a juste fait le cheminement inverse : on avait choisi le dspic (il
faut dire qu'à l'époque Microchip n'avait pas encore changé sa
politique de samples) et vu qu'au final on a dû réaliser notre carte
asservissement sur une plaque pastillée,  avoir tout intégré dans une
seule puce en PDIP est quand même bien confortable.

Là dessus on a recruté JLG qui nous a dit "Allez, aversive, en plus
c'est fait par des potes à moi" (libre à vous maintenant de démentir
;))

  Simon

___
Avr-list mailing list
Avr-list@droids-corp.org
CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive
WIKI : http://wiki.droids-corp.org/index.php/Aversive
DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/
BUGZILLA : http://bugzilla.droids-corp.org
COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog


Re: [Avr-list] Aversive sur dspic33

2009-07-03 Par sujet Simon Derr
Je disais donc...

> Bref, assez de blabla, voici le patch. (en fichier attaché).


   Simon
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/aversive/irq_lock.h 
aversive/include/aversive/irq_lock.h
--- ../../orig/aversive/include/aversive/irq_lock.h 2007-05-23 
19:18:09.0 +0200
+++ aversive/include/aversive/irq_lock.h2009-07-03 20:48:29.0 
+0200
@@ -40,6 +40,22 @@
 #ifndef _AVERSIVE_IRQ_LOCK_H_
 #define _AVERSIVE_IRQ_LOCK_H_
 
+#ifdef DSPIC
+#include "p33f.h"
+#define GLOBAL_IRQ_ARE_MASKED() (!(SRbits.IPL==7))
+
+#define IRQ_LOCK(flags) do { \
+  flags = SRbits.IPL ;   \
+  cli(); \
+  } while(0)
+
+#define IRQ_UNLOCK(flags) do {   \
+  SRbits.IPL = flags;\
+  } while ( 0 )
+
+#else
+
+
 #ifdef HOST_VERSION
 
 /* we must use 'flags' to avoid a warning */
@@ -62,4 +78,5 @@
 
 #endif /* ! HOST_VERSION */
 
+#endif /* ! DSPIC */
 #endif /* _AVERSIVE_IRQ_LOCK_H_ */
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/aversive/parts.h 
aversive/include/aversive/parts.h
--- ../../orig/aversive/include/aversive/parts.h2009-01-23 
23:53:08.0 +0100
+++ aversive/include/aversive/parts.h   2009-07-03 20:48:29.0 +0200
@@ -269,7 +269,9 @@
 #elif defined (__AVR_ATxmega64A3__)
 #include 
 #else
+#ifndef DSPIC
 #error "This arch is not implemented yet"
 #endif
+#endif
 
 #endif /* _AVERSIVE_PARTS_H_ */
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/aversive.h 
aversive/include/aversive.h
--- ../../orig/aversive/include/aversive.h  2009-05-18 14:19:51.0 
+0200
+++ aversive/include/aversive.h 2009-07-03 20:48:29.0 +0200
@@ -29,10 +29,14 @@
 #define _AVERSIVE_H_
 
 #include 
+#include 
 
 #ifndef HOST_VERSION
-#include 
-#include 
+#  ifndef DSPIC
+#define AVR
+#include 
+#include 
+#  endif
 #endif
 
 #include 
@@ -44,19 +48,27 @@
 #define __AVR_LIBC_VERSION__ 0UL 
 #endif
 
-#ifndef HOST_VERSION
+#ifdef AVR
 #if __AVR_LIBC_VERSION__ < 10403UL
 #include 
 #endif
 #endif
 
-#define F_CPU ((unsigned long)CONFIG_QUARTZ)
+#ifdef DSPIC
+#  define F_CPU ((CONFIG_QUARTZ)/2) /* Do NOT make it unsigned, it breaks 
S_MAX(). */
+#  define FCY F_CPU
+#else
+#  define F_CPU ((unsigned long)CONFIG_QUARTZ)
+#endif
 
 #define Hz  1l
 #define KHz 1000l
 #define MHz 100l
 
 
+#ifndef M_PI
+#  define M_PI 3.141592653589
+#endif
 
 /*
  *  a few "mathematical" macros : maximums and minimums
@@ -193,7 +205,7 @@
 
 /* a few asm utilities */
 
-#ifndef HOST_VERSION
+#ifdef AVR
 #ifndef nop
 #define nop() __asm__ __volatile__ ("NOP\n") /** nop instruction, 1 CPU cycle 
consumed */
 #endif
@@ -215,14 +227,21 @@
   __asm__ __volatile__ ("ijmp\n");  \
 } while(0)
 #endif
+#endif /* AVR */
 
-#else /* HOST_VERSION */
+#ifdef HOST_VERSION
 #define nop() do {} while(0)
 #define nothing() do {} while(0)
 #define cli() do {} while(0)
 #define sei() do {} while(0)
 #endif /* HOST_VERSION */
 
+#ifdef DSPIC
+#  define nop() do {__asm__ volatile ("nop");} while(0)
+#  define nothing() do {} while(0)
+#  define cli() do {SRbits.IPL=7;} while(0)
+#  define sei() do {SRbits.IPL=0;} while(0)
+#endif /* DSPIC */
 /**
  *   little bit toggeling macro 
  *  
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/dspic/inttypes.h 
aversive/include/dspic/inttypes.h
--- ../../orig/aversive/include/dspic/inttypes.h1970-01-01 
01:00:00.0 +0100
+++ aversive/include/dspic/inttypes.h   2009-07-02 18:52:14.0 +0200
@@ -0,0 +1,13 @@
+#ifndef DSPIC_INTTYPES_H
+#define DSPIC_INTTYPES_H
+
+typedef signed char int8_t;
+typedef unsigned char uint8_t;
+typedef signed int int16_t;
+typedef unsigned int uint16_t;
+typedef signed long int int32_t;
+typedef unsigned long int uint32_t;
+typedef signed long long int64_t;
+typedef unsigned long long uint64_t;
+
+#endif
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/dspic/stdint.h 
aversive/include/dspic/stdint.h
--- ../../orig/aversive/include/dspic/stdint.h  1970-01-01 01:00:00.0 
+0100
+++ aversive/include/dspic/stdint.h 2009-07-03 20:48:29.0 +0200
@@ -0,0 +1,4 @@
+#ifndef DSPIC_STDINT_H
+#define DSPIC_STDINT_H
+
+#endif
diff -uNr -x .svn -x '*.o' 
../../orig/aversive/modules/base/scheduler/scheduler.c 
aversive/modules/base/scheduler/scheduler.c
--- ../../orig/aversive/modules/base/scheduler/scheduler.c  2009-01-29 
00:26:01.0 +0100
+++ aversive/modules/base/scheduler/scheduler.c 2009-07-03 20:48:30.0 
+0200
@@ -21,15 +21,15 @@
 
 #include 
 
-#include 
 #include 
+#include 
 
 #include 
 #include 
 #include 
 
 
-/* this file is compiled for AVR version only */
+/* this file is compiled for AVR/DSPIC versions only */
 
 /** declared in scheduler_host.c in case of host version */
 struct event_t g_tab_event[SCHEDULER_NB_MAX_EVENT];
@@ -39,6 +39,18 @@
 {
memset(g_tab_event, 0, sizeof(g_tab_event));
 
+
+#ifdef DSPIC
+   /* Scheduler uses timer1 on dspic33 */
+   T1CON = 0;   

[Avr-list] Aversive sur dspic33

2009-07-03 Par sujet Simon Derr
Salut la jeunesse,

Comme certains d'entre vous le savent déjà, mon équipe (I-Grebot) a
effectué un portage d'aversive sur dspic33 pour la coupe cette année.
(dspic33fj128mc802)

L'idée étant que ça puisse servir à d'autres, nous espérons que ce
travail pourrait à terme être intégré dans aversive.

Dans cette optique j'ai tenté de réduire au maximum l'écart entre
notre code et ce qui m'a semblé être la version la plus récente des
sources officielles (snapshot de la branche b_zer0 du 30 juin).

Le code fonctionne en l'état mais il manque dans le patch certaines
choses, à savoir surtout un système de build (nous avons pour le
moment tout mis en dur dans MPLAB...) et de configuration.

Bref, assez de blabla, voici le patch. (en fichier attaché).

   Simon

 include/aversive.h
 |   31 +-
 include/aversive/irq_lock.h
 |   17 +
 include/aversive/parts.h
 |2
 include/dspic/inttypes.h
 |   13
 include/dspic/stdint.h
 |4
 modules/base/scheduler/scheduler.c
 |   30 ++
 modules/devices/encoders/encoders_igrebot/config/encoders_igrebot_config.h
|   33 ++
 modules/devices/encoders/encoders_igrebot/encoders_igrebot.c
 |  115 
 modules/devices/encoders/encoders_igrebot/encoders_igrebot.h
 |   47 +++
 modules/devices/robot/position_manager/position_manager.c
 |2
 modules/devices/robot/trajectory_manager/trajectory_manager.c
 |   10
 modules/devices/robot/trajectory_manager/trajectory_manager.h
 |3
 modules/hardware/pwm_igrebot/config/pwm_config.h
 |   52 +++
 modules/hardware/pwm_igrebot/pwm_igrebot.c
 |  136 ++
 modules/hardware/pwm_igrebot/pwm_igrebot.h
 |   54 +++
 15 files changed, 540 insertions(+), 9 deletions(-)

___
Avr-list mailing list
Avr-list@droids-corp.org
CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive
WIKI : http://wiki.droids-corp.org/index.php/Aversive
DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/
BUGZILLA : http://bugzilla.droids-corp.org
COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog