All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] tool for external jitter measurement
@ 2006-11-29 12:35 Syed Amer Gilani
  2006-11-29 12:43 ` [Xenomai-help] " Syed Amer Gilani
  2006-11-29 13:50 ` [Xenomai-help] " Jan Kiszka
  0 siblings, 2 replies; 3+ messages in thread
From: Syed Amer Gilani @ 2006-11-29 12:35 UTC (permalink / raw)
  To: xenomai

I wrote with my little Xenomai experience a rtdm kernel module witch
generates an external signal to measure it on an Oscilloscope. The
Result is satisfying. With no other load there is nearly no jitter.
With "dd if=/dev/zero of=/dev/null" and "ping -f" from an external
machine the jitter is +-15µsec.
My Question now is if my approach is OK or is there a better way to
generate the signal with Xenomai which would result in better results.
Maybe by using hardware timer interrupt or something?

I would appreciate any comment on the following code.

/*
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 */

#include <rtdm/rtdm_driver.h>

MODULE_LICENSE("GPL");

#define MPC52xx_MBAR            0xf0000000      /* Phys address */

/* WakeUp GPIO Registers - MBAR + 0x0C00 */
#define GPIO_WKUP_ENA          MPC52xx_MBAR + 0x0C00
#define GPIO_WKUP_DIR          MPC52xx_MBAR + 0x0C08
#define GPIO_WKUP_OUT          MPC52xx_MBAR + 0x0C0C
#define GPIO_WKUP_IN           MPC52xx_MBAR + 0x0C20

/* Set / Get value for Register reg */
#define MPC52xx_REG(reg)               *((unsigned long *)reg / 4)

/* Set Register Bit */
#define SET_REG_BIT(reg,bit)   MPC52xx_REG(reg) |= (1<<(31-bit))

/* Reset Register Bit */
#define RES_REG_BIT(reg,bit)   MPC52xx_REG(reg) &= ~(1<<(31-bit))

/* Get Register Bit */
#define GET_REG_BIT(reg,bit)   MPC52xx_REG(reg) & (1<<(31-bit)) ? 1:0

rtdm_task_t signal_task;
int         end = 0;

#define SIGNAL_PERIOD    1000000   /* 1 ms */

void set_pin(int mask)
{
	if (mask == 1)
	{
		SET_REG_BIT(GPIO_SINT_OUT,7);
		SET_REG_BIT(GPIO_SINT_ENA,7);
		SET_REG_BIT(GPIO_SINT_DIR,7);
	}
	else
	{
		RES_REG_BIT(GPIO_SINT_OUT,7);
		SET_REG_BIT(GPIO_SINT_ENA,7);
		SET_REG_BIT(GPIO_SINT_DIR,7);
	}
}

void signal(void *cookie)
{
    int state = 0;

    while (!end) {
        rtdm_task_wait_period();
        if (state >= 1)
        {
        	set_pin(1);
            state = 0;
        }
        else
        {
        	set_pin(0);
        	state++;
        }
    }
}

int init_module(void)
{
	printk(KERN_INFO "pin_signal start\n");
    return rtdm_task_init(&signal_task, "signal", signal, NULL, 99,
SIGNAL_PERIOD);
}

void cleanup_module(void)
{
    end = 1;
    rtdm_task_join_nrt(&signal_task, 100);
    set_pin(0);
    printk(KERN_INFO "pin_signal stop\n");
}

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-11-29 13:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-29 12:35 [Xenomai-help] tool for external jitter measurement Syed Amer Gilani
2006-11-29 12:43 ` [Xenomai-help] " Syed Amer Gilani
2006-11-29 13:50 ` [Xenomai-help] " Jan Kiszka

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.