[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

BOUNCE rtl@rtlinux.org: Approval required: (fwd)



>From owner-rtl Mon Jul  9 07:28:45 2001
Received: from ns.bourges.univ-orleans.fr (ns.bourges.univ-orleans.fr [193.49.93.2])
	by hq.fsmlabs.com (8.11.2/8.11.2) with ESMTP id f69DSiT05715
	for <rtl@fsmlabs.com>; Mon, 9 Jul 2001 07:28:44 -0600
Received: from bourges.univ-orleans.fr
          (Mozart.bourges.univ-orleans.fr [195.220.186.105])
          by ns.bourges.univ-orleans.fr (Netscape Messaging Server 3.62)
           with ESMTP id 354 for <rtl@fsmlabs.com>;
          Mon, 9 Jul 2001 15:15:46 +0200
Message-ID: <3B49AF62.983A8169@bourges.univ-orleans.fr>
Date: Mon, 09 Jul 2001 15:19:31 +0200
From: "Joseph Canou" <Joseph.Canou@bourges.univ-orleans.fr>
Organization: Laboratoire vision et robotique 
X-Mailer: Mozilla 4.07 [fr] (WinNT; I)
MIME-Version: 1.0
To: rtl@fsmlabs.com
Subject: Re: [rtl]
References: <5.0.2.1.0.20010804231619.009e6430@pop3.norton.antivirus> <5.0.2.1.0.20010807230102.00a1e550@pop3.norton.antivirus>
Content-Type: multipart/mixed; boundary="------------1586514AD41760420915BC0D"

Il s'agit d'un message multivolet au format MIME.
--------------1586514AD41760420915BC0D
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

hello
here is a part of code i use for read data from a laser sensor through a
serial port.
it is a rtmodule code
i just use inb and outb function to read and write on the serial port
init_laser_linux.c  is a code to read and write the serial port but not in a
rtmodule
i hope it can help you...


=?iso-8859-1?Q?Jo=E3o?= Coimbra a ecrit:

> Ola!
>
> Se for possivel disponibilizar o codigo exemplo, agradecia
>
>          Joao Coimbra
>
> At 14:57 06-07-2001 +0200, you wrote:
> >Ola!...
> >
> >Podes perfeitamente ler o sonnar pela porta serie se o sonnar
> >disponibilizar uma ligacao serie!... Tenho estado a trabalhar num sistema
> >GPS ligado a porta serie e que e lido em Linux, as informacoes sao depois
> >passadas para o modulo RTLinux atraves de uma fifo, se quiseres mais
> >informacoes ou o codigo exemplo diz!
> >
> >Sergio Rui Silva
> >
> >FEUP
> >
> >On Sat, 4 Aug 2001, [iso-8859-1] Joao Coimbra wrote:
> >
> > > Hi all how can I read a sonnar through a serial port (rs-232
> > > communication)? There is some example to help me?
> > > Thank you !!!
> > >
> > > -- [rtl] ---
> > > To unsubscribe:
> > > echo "unsubscribe rtl" | mail majordomo@rtlinux.org OR
> > > echo "unsubscribe rtl <Your_email>" | mail majordomo@rtlinux.org
> > > --
> > > For more information on Real-Time Linux see:
> > > http://www.rtlinux.org/
> > >
> >
> >-- [rtl] ---
> >To unsubscribe:
> >echo "unsubscribe rtl" | mail majordomo@rtlinux.org OR
> >echo "unsubscribe rtl <Your_email>" | mail majordomo@rtlinux.org
> >--
> >For more information on Real-Time Linux see:
> >http://www.rtlinux.org/
>
> ----- End of forwarded message from owner-rtl@fsmlabs.com -----
> -- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail majordomo@rtlinux.org OR
> echo "unsubscribe rtl <Your_email>" | mail majordomo@rtlinux.org
> --
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/

--------------1586514AD41760420915BC0D
Content-Type: application/x-unknown-content-type-h_auto_file; name="def_moxa.h"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="def_moxa.h"

DQoNCiNpZm5kZWYgXzE2YzU1Ml9oDQojZGVmaW5lIF8xNmM1NTJfaA0KDQoNCi8qIFRZUEVT
IERFIENBUlRFUyAqLw0KDQojZGVmaW5lIFJTMjMyCQkJCTANCiNkZWZpbmUgUlM0ODUgICAg
ICAgICAgIDENCg0KDQovKiBBRFJFU1NFUyBERSBCQVNFICovDQoNCiNkZWZpbmUgQ09NMSAw
eDAzRjgNCiNkZWZpbmUgQ09NMiAweDAyRjgNCiNkZWZpbmUgQ09NMyAweDAzRTgNCiNkZWZp
bmUgQ09NNCAweDAyRTgNCg0KI2RlZmluZSBSSFIgMA0KI2RlZmluZSBUSFIgMA0KI2RlZmlu
ZSBJRVIgMQ0KI2RlZmluZSBGQ1IgMg0KI2RlZmluZSBJU1IgMg0KI2RlZmluZSBMQ1IgMw0K
I2RlZmluZSBNQ1IgNA0KI2RlZmluZSBMU1IgNQ0KI2RlZmluZSBNU1IgNg0KI2RlZmluZSBT
UFIgNw0KI2RlZmluZSBETEwgMA0KI2RlZmluZSBETE0gMQ0KDQoNCi8qIExBUkdFVVIgREVT
IERPTk5FRVMgKi8NCg0KI2RlZmluZSBCSVRfNSAgICAgICAgICAgMA0KI2RlZmluZSBCSVRf
NiAgICAgICAgICAgMQ0KI2RlZmluZSBCSVRfNyAgICAgICAgICAgMg0KI2RlZmluZSBCSVRf
OCAgICAgICAgICAgMw0KDQovKiBDT05UUk9MRSBERSBQQVJJVEUgKi8NCg0KI2RlZmluZSBQ
X0FVQ1VORQkJCTANCiNkZWZpbmUgUF9JTVBBSVJFCQkJMQ0KI2RlZmluZSBQX1BBSVJFCQkJ
Mw0KI2RlZmluZSBQX0hBVVRFICAgICAgICAgNQ0KI2RlZmluZSBQX0JBU1NFICAgICAgICAg
Nw0KDQovKiBWSVRFU1NFIERFIFRSQU5TTUlTU0lPTiAqLw0KLyoNCiNkZWZpbmUgQjUwICAg
ICAgICAgICAgIDIzMDQgICAgICAgICAgIC8qcG9ydCBzZXJpZSBzdGFuZGFyZCAqLw0KI2Rl
ZmluZSBCNzUgICAgICAgICAgICAgMTUzNg0KI2RlZmluZSBCMTEwICAgICAgICAgICAgMTA0
Nw0KI2RlZmluZSBCMTMzXzUJCQkJODU3DQojZGVmaW5lIEIxNTAJCQkJNzY4DQojZGVmaW5l
IEIzMDAJCQkJMzg0DQojZGVmaW5lIEI2MDAJCQkJMTkyDQojZGVmaW5lIEIxMjAwICAgICAg
ICAgICA5Ng0KI2RlZmluZSBCMTgwMCAgICAgICAgICAgNjQNCiNkZWZpbmUgQjIwMDAJCQkJ
NTgNCiNkZWZpbmUgQjI0MDAgICAgICAgICAgIDQ4DQojZGVmaW5lIEIzNjAwCQkJCTMyDQoj
ZGVmaW5lIEI0ODAwICAgICAgICAgICAyNA0KI2RlZmluZSBCNzIwMAkJCQkxNg0KI2RlZmlu
ZSBCOTYwMCAgICAgICAgICAgMTINCiNkZWZpbmUgQjE5MjAwICAgICAgICAgIDYNCiNkZWZp
bmUgQjM4NDAwICAgICAgICAgIDMNCiNkZWZpbmUgQjU2MDAwCQkJCQkyDQojZGVmaW5lIEJt
YXgJCQkJCQkxDQoqLw0KI2RlZmluZSBCOTYwMHIgICAgICAgICAgNTIgCQkJLy8gciA9IGNh
cnRlUENNQ0lBIFEgNTAwSw0KI2RlZmluZSBCMTkyMDByICAgICAgICAgMjYNCiNkZWZpbmUg
QjI1MGtyICAgICAgICAgIDINCiNkZWZpbmUgQjUwMGtyCQkJCQkxDQoNCiNkZWZpbmUgQjk2
MDBhICAgICAgICAgMTA0IAkJCS8vIGEgPSBjYXJ0ZU1PWEEgUSAxNk1Ieg0KI2RlZmluZSBC
MTkyMDBhICAgICAgICAgNTINCiNkZWZpbmUgQjI1MGthICAgICAgICAgIDQNCiNkZWZpbmUg
QjUwMGthCQkJCQkyDQoNCg0KDQoNCg0KDQovL3ZvaWQgaW5pdF8xNjU1MihXT1JELFdPUkQp
Ow0KLy9pbnQgZW52b2llX2ZhaXQodm9pZCk7DQovL2ludCBkb25uZWVfcHJldGUodm9pZCk7
DQoNCi8qIGRlZmluaXRpb24gZGUgdHlwZXMgKi8NCg0KI2RlZmluZSBCWVRFCSAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhcg0KI2RlZmluZSBXT1JEICAgCSAgICAgICAgICAgICAg
dW5zaWduZWQgaW50DQojZGVmaW5lIExXT1JEICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcNCg0KDQojZW5kaWY=
--------------1586514AD41760420915BC0D
Content-Type: text/plain; charset=us-ascii; name="intr_robosense.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="intr_robosense.c"



/************************ acquisition donnees laesr sur com1 par interruption *************************/



#include <rtl_sync.h>
#include <rtl_core.h>
#include <rtl.h>
#include <asm/io.h>
#include <time.h>
#include <pthread.h>
#include <rtl_fifo.h>
#include <rtl_sched.h>

#include "def_moxa.h"

#define adresse_base_com1 COM1

WORD dll_com1 = adresse_base_com1 + DLL;
WORD dlm_com1 = adresse_base_com1 + DLM;
WORD ier_com1 = adresse_base_com1 + IER;
WORD lcr_com1 = adresse_base_com1 + LCR;	

hrtime_t debut_com1;
int i_com1=0, j_com1=0;
int passage_com1=0;
unsigned int somme_scan=0;
int resultat[4];
unsigned char crc_calcule,scan[12];



unsigned int handler_com1(void)
{ unsigned char temp;
  unsigned int nouveau_debut=1;
  int test_rtf;
  hrtime_t temps_com1, tampon_temps_com1;
  double temps;

  outb(0x00,ier_com1);        /* instruction necessaire avec la moxa */
  temp = inb(adresse_base_com1);




 if(temp==0x0D)
 {       somme_scan=somme_scan-scan[11];
         crc_calcule=256-(somme_scan%256);

         if ( crc_calcule==scan[11])
         {       resultat[0]=(scan[3]*256+scan[4])-(scan[2]*256);
                 resultat[1]=(scan[6]*256+scan[7])-(scan[5]*256);
                 resultat[2]=scan[8]*256+scan[9];
                 resultat[3]=scan[10];
                 i_com1=0;
                 somme_scan=0;
                 crc_calcule=0;

                 tampon_temps_com1=clock_gethrtime(CLOCK_REALTIME);
       		 temps_com1=tampon_temps_com1-debut_com1;
       		 temps=(double)(temps_com1/1000000);
       		 debut_com1=clock_gethrtime(CLOCK_REALTIME);
       		 rtl_printf("\n robosense %ld",(long int)temps);
       		
           //      rtl_printf("\n  position : X= %d Y= %d TETA= %d confiance= %d\n",resultat[0],resultat[1],resultat[2],resultat[3]);
          }
          else
          {       i_com1=0;
                  somme_scan=0;
                  crc_calcule=0;
          }
 }
 else
 {       if(temp==0xF2)
 	 {       if(scan[i_com1-1]==0x1B)
                 {       i_com1--;
                         scan[i_com1]=0x0D;
                         i_com1++;
                         somme_scan=somme_scan+scan[i_com1-1];
                 }
                 else
                 {
                         scan[i_com1]=temp;
                         i_com1++;
                         somme_scan=somme_scan+scan[i_com1-1];
                 }
         }
         else
         {        if( (temp==0xE4  && scan[i_com1-1]!=0x1B) || (temp!=0xE4) )
                  {
                         scan[i_com1]=temp;
                         i_com1++;
                         somme_scan=somme_scan+scan[i_com1-1];
                  }
         }
 }




  outb(0x01,ier_com1);	      /* instruction necessaire avec la moxa */
  rtl_hard_enable_irq(4);

  return 0;
}




int init_module(void)
{

	int  Erreur = 0;
	BYTE i,tampon;

	
        rtl_irqstate_t f_com1;
        int test_irq=0;
	
	/* Nettoyage du port */
	for (i=0;i<=6;i++)
		inb(adresse_base_com1);
	
	/*initialisation de la carte */
		
	outb(0x00,ier_com1);  			/* disable l'IT reception */
		/* Initialisation de la vitesse de communication */
	outb(0x80,lcr_com1);  /* LCR.7 = 1 */
	outb((0x02 & 255),dll_com1);  /* partie basse */         /*         0x02 =  56700 BPS             \ */
	outb((0x02 >> 8),dlm_com1);   /* partie haute */
		/* Initialisation de la largeur du caractere, du bit de stop
	et de la parite */
	outb((  BIT_8 | (0 << 2) | (P_AUCUNE << 3) ),lcr_com1 );
	
	outb(0x02,adresse_base_com1 +2); 	// Raz FIFO
	outb(0x01,adresse_base_com1 +2); 	// val. FIFO mode DMA
	outb(0x01,ier_com1);  			/* enable l'IT reception */
	inb(adresse_base_com1);   /* On vide RXD */
	inb(adresse_base_com1);

	
	 debut_com1=clock_gethrtime(CLOCK_REALTIME);

        rtl_no_interrupts(f_com1);


        rtl_request_irq(4,handler_com1);
        rtl_printf("\n test test_request_irq %d",test_irq);

        rtl_hard_enable_irq(4);


        rtl_restore_interrupts(f_com1);


        return 0;
}



void cleanup_module(void)
{
  rtl_free_irq(4);
}

--------------1586514AD41760420915BC0D
Content-Type: text/plain; charset=iso-8859-1; name="Makefile.txt"
Content-Transfer-Encoding: 8bit
Content-Disposition: inline; filename="Makefile.txt"

include ../../rtl.mk

intr_robosense.o: intr_robosense.c
	$(CC) ${INCLUDE} ${CFLAGS} -c intr_robosense.c -o intr_robosense.o

all: intr_robosense.o
	@echo "insertion des rtl_modules"
	(cd ../../; scripts/insrtl)
	@echo "lancage du real-time tasks  module"
	@insmod intr_robosense.o

robosense: intr_robosense.o
	@echo "lancage du real-time tasks  module"
	@insmod intr_robosense.o

	
clean:
	rmmod intr_robosense
	(cd ../../; scripts/rmrtl)	

clean_r:
	rmmod intr_robosense
	
--------------1586514AD41760420915BC0D
Content-Type: text/plain; charset=us-ascii; name="init_laser_linux.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="init_laser_linux.c"

#include <stdio.h>
#include <asm/io.h>
#include "init_carte_linux.h"


void init_16552(WORD adresse_base,WORD vitesse)
{
	int  Erreur = 0;
	BYTE i,tampon;

	WORD dll = adresse_base + DLL;
	WORD dlm = adresse_base + DLM;
	WORD ier = adresse_base + IER;
	WORD lcr = adresse_base + LCR;


	
		/* Nettoyage du port */
		for (i=0;i<=6;i++)
			inb(adresse_base);

		/* Initialisation de la vitesse de communication */
		outb(0x80,lcr);  /* LCR.7 = 1 */
		outb((vitesse & 255),dll);  /* partie basse */
		outb((vitesse >> 8),dlm);   /* partie haute */

		/* Initialisation de la largeur du caractere, du bit de stop
		et de la parite */
		outb((  BIT_8
									| (0 << 2)
									| (P_AUCUNE << 3)
								 ),lcr );

		outb(0X00,adresse_base+MCR);	/* pas de signaux de controle */


		outb(0x02,adresse_base +2); 	// Raz FIFO
		outb(0x01,adresse_base +2); 	// val. FIFO mode DMA
//		outb(adresse_base +2,0x09); 	// val. FIFO mode DMA
//		outb(adresse_base +2,0x49); 	// FIFO =16
		outb(0x00,ier);  			/* IT reception */

		inb(adresse_base);   /* On vide RXD */
		inb(adresse_base);


}


int envoie_fait(void)
{ unsigned char lecture;

	lecture=inb(COM3+LSR);
  if( (lecture&0x40)!=0 )
		return(1);
	else
		return(0);
}


int donnee_prete(void)
{	unsigned char lecture;
	
	lecture=inb(COM3+LSR);
	if( (lecture&0x01)==1)
		return(1);
	else
		return(0);
}

void lecture(unsigned char char_lu)
{	while(donnee_prete() !=1) ;
	char_lu=inb(COM3) ;
}

void ecriture(unsigned char char_envoi)
{	while(envoie_fait() !=1);
	outb(COM3,char_envoi);
}

--------------1586514AD41760420915BC0D--

----- End of forwarded message from owner-rtl@fsmlabs.com -----