Driver oc renamed to pwm.

This commit is contained in:
Serge Vakulenko
2015-05-29 20:41:26 -07:00
parent 33fbb51528
commit 4e8398cbc9
24 changed files with 144 additions and 165 deletions

View File

@@ -603,7 +603,7 @@ file /include/sys/mount.h
file /include/sys/msgbuf.h
file /include/sys/mtio.h
file /include/sys/namei.h
file /include/sys/oc.h
file /include/sys/pwm.h
file /include/sys/param.h
file /include/sys/picga.h
file /include/sys/proc.h

View File

@@ -4,7 +4,7 @@
TOPSRC = $(shell cd ../../..; pwd)
include $(TOPSRC)/target.mk
CFLAGS += -Werror -I../../../sys/include
CFLAGS += -Wall -Werror -I../../../sys/include
SRCS = pwm.c
OBJS = pwm.o

View File

@@ -6,67 +6,54 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <oc.h>
#include <pwm.h>
int oc;
int pwm;
void error(char *message)
{
fprintf(stderr,"Error: %s: %d\n",message,errno);
fprintf(stderr, "Error: %s: %d\n", message, errno);
}
int openDevice(int dev)
void open_device(int dev)
{
char temp[20];
int mode=OC_MODE_PWM;
int mode = PWM_MODE_PWM;
sprintf(temp,"/dev/oc%d",dev);
oc = open(temp,O_RDWR);
if(!oc)
{
sprintf(temp, "/dev/pwm%d", dev);
pwm = open(temp, O_RDWR);
if (! pwm) {
error("Could not open PWM device");
return 0;
exit(-1);
}
if(ioctl(oc,OC_SET_MODE,&mode)==-1)
{
if (ioctl(pwm, PWM_SET_MODE, &mode) < 0) {
error("Could not switch channel to PWM mode");
return 0;
exit(-1);
}
return 1;
}
int main(int argc, char *argv[])
{
int unit;
unsigned int duty;
long tduty;
unsigned duty;
if(argc!=3)
{
if (argc != 3) {
error("Specify a channel and a duty cycle");
exit(10);
exit(-1);
}
unit = atoi(argv[1]);
tduty = atol(argv[2]);
duty = (unsigned long)tduty;
duty = atol(argv[2]);
if((unit<0) || (unit>4))
{
if (unit < 0 || unit > 4) {
error("Invalid channel specified");
exit(10);
exit(-1);
}
open_device(unit);
if(openDevice(unit)==0)
exit(10);
if(ioctl(oc,OC_PWM_DUTY,&duty)==-1)
{
if (ioctl(pwm, PWM_DUTY, &duty) < 0) {
error("Could not set duty");
exit(10);
exit(-1);
}
return 0;
}

View File

@@ -1,38 +0,0 @@
#ifndef _OC_H
#define _OC_H
#include <sys/ioctl.h>
struct oc_state {
int mode;
int pwm_duty;
};
#define OC_MAX_DEV 5
#define OC_MODE_PWM 0x0001
#define OC_SET_MODE _IOW('i',1,int)
#define OC_PWM_DUTY _IOW('i',2,int)
#ifdef KERNEL
#include "conf.h"
extern const struct devspec ocdevs[];
extern int oc_open (dev_t dev, int flag, int mode);
extern int oc_close (dev_t dev, int flag, int mode);
extern int oc_read (dev_t dev, struct uio *uio, int flag);
extern int oc_write (dev_t dev, struct uio *uio, int flag);
extern int oc_ioctl (dev_t dev, u_int cmd, caddr_t addr, int flag);
#endif
#define OC2CON PIC32_R (0x03200)
#define OC3CON PIC32_R (0x03400)
#define OC5CON PIC32_R (0x03800)
#define OC2RS PIC32_R (0x03220)
#define OC3RS PIC32_R (0x03420)
#define OC5RS PIC32_R (0x03820)
#endif

38
sys/include/pwm.h Normal file
View File

@@ -0,0 +1,38 @@
#ifndef _PWM_H
#define _PWM_H
#include <sys/ioctl.h>
struct pwm_state {
int mode;
int pwm_duty;
};
#define PWM_MAX_DEV 5
#define PWM_MODE_PWM 0x0001
#define PWM_SET_MODE _IOW('i',1,int)
#define PWM_DUTY _IOW('i',2,int)
#ifdef KERNEL
#include "conf.h"
extern const struct devspec pwmdevs[];
extern int pwm_open (dev_t dev, int flag, int mode);
extern int pwm_close (dev_t dev, int flag, int mode);
extern int pwm_read (dev_t dev, struct uio *uio, int flag);
extern int pwm_write (dev_t dev, struct uio *uio, int flag);
extern int pwm_ioctl (dev_t dev, u_int cmd, caddr_t addr, int flag);
#endif
#define OC2CON PIC32_R (0x03200)
#define OC3CON PIC32_R (0x03400)
#define OC5CON PIC32_R (0x03800)
#define OC2RS PIC32_R (0x03220)
#define OC3RS PIC32_R (0x03420)
#define OC5RS PIC32_R (0x03820)
#endif

View File

@@ -22,7 +22,7 @@ device sd0 port=4 cs=F3 power=B13 mhz=13
# device sd1 port=4 cs=F8 power=D13
device adc
device oc
device pwm
device gpio
# use SDRAM driver for the external ramdisk
@@ -41,5 +41,3 @@ option crystal=12
option pllidiv=3
option pllmul=20
option upllidiv=3

View File

@@ -6,7 +6,7 @@ S = ../../../tools/configsys/../../sys/kernel
vpath %.c $(M):$(S)
vpath %.S $(M):$(S)
KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o oc.o rd_sd.o rd_sdramp.o rdisk.o sdram.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rd_sdramp.o rdisk.o sdram.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
EXTRA_TARGETS = bootloader
DEFS += -DADC_ENABLED=YES
@@ -72,9 +72,9 @@ DEFS += -DLED_TTY_PIN=14
DEFS += -DLED_TTY_PORT=TRISA
DEFS += -DNMOUNT=3
DEFS += -DNPROC=20
DEFS += -DOC_ENABLED=YES
DEFS += -DPARTITION="sdramp0:sa@2048,fs@14000"
DEFS += -DPIC32MX7
DEFS += -DPWM_ENABLED=YES
DEFS += -DSD0_CS_PIN=3
DEFS += -DSD0_CS_PORT=TRISF
DEFS += -DSD0_ENA_PIN=13

View File

@@ -1,4 +0,0 @@
always
file oc.o
define OC_ENABLED YES
end always

4
sys/pic32/cfg/pwm.dev Normal file
View File

@@ -0,0 +1,4 @@
always
file pwm.o
define PWM_ENABLED YES
end always

View File

@@ -42,8 +42,8 @@ extern int strcmp(char *s1, char *s2);
# include "glcd.h"
#endif
#ifdef OC_ENABLED
# include "oc.h"
#ifdef PWM_ENABLED
# include "pwm.h"
#endif
#ifdef PICGA_ENABLED
@@ -235,11 +235,11 @@ const struct cdevsw cdevsw[] = {
},
#endif
#ifdef OC_ENABLED
#ifdef PWM_ENABLED
{
oc_open, oc_close, oc_read, oc_write,
oc_ioctl, nulldev, 0, seltrue,
nostrategy, 0, 0, ocdevs
pwm_open, pwm_close, pwm_read, pwm_write,
pwm_ioctl, nulldev, 0, seltrue,
nostrategy, 0, 0, pwmdevs
},
#endif

View File

@@ -31,13 +31,13 @@ ifeq ($(DRIVER_GLCD),yes)
DEFS += -DGLCD_ENABLED
endif
ifeq ($(DRIVER_OC),yes)
KERNOBJ += oc.o
DEFS += -DOC_ENABLED
ifeq ($(DRIVER_PWM),yes)
KERNOBJ += pwm.o
DEFS += -DPWM_ENABLED
endif
ifeq ($(DRIVER_SDRAMP),yes)
NEEDS_FEATURE_KERNEL_EXECUTABLE_RAM = yes
KERNOBJ += sdram.o rd_sdramp.o
DEFS += -DSDRAMP_ENABLED
endif
endif

View File

@@ -20,4 +20,4 @@ device sd0 port=3 cs=D5 power=B13
device gpio
device foreignbootloader
device adc
device oc
device pwm

View File

@@ -6,7 +6,7 @@ S = ../../../tools/configsys/../../sys/kernel
vpath %.c $(M):$(S)
vpath %.S $(M):$(S)
KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o oc.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
EXTRA_TARGETS =
DEFS += -DADC_ENABLED=YES
@@ -51,8 +51,8 @@ DEFS += -DLED_DISK_PIN=12
DEFS += -DLED_DISK_PORT=TRISB
DEFS += -DLED_KERNEL_PIN=15
DEFS += -DLED_KERNEL_PORT=TRISB
DEFS += -DOC_ENABLED=YES
DEFS += -DPIC32MX7
DEFS += -DPWM_ENABLED=YES
DEFS += -DSD0_CS_PIN=5
DEFS += -DSD0_CS_PORT=TRISD
DEFS += -DSD0_ENA_PIN=13

View File

@@ -17,7 +17,7 @@ device uartusb
device sd0 port=2 cs=SS
device gpio
device oc
device pwm
device spi
device adc
device glcd

View File

@@ -1,6 +1,6 @@
# Fubarino SD with UART2 console, UART1 enabled and with SRAMC SWAPDISK
#
core pic32mx7
#
core pic32mx7
# ! pin numbers here are the pin Ns. printed out on Fubarino board (ie. 12, 23)
mapping fubarino
@@ -39,7 +39,7 @@ option nbuf=8
device adc
device spi
device oc
device pwm
device gpio
# Bootloader section:
@@ -52,19 +52,19 @@ device bootloader led=21 button=23 crystal=8 jump=0x9d000000
# option crystal=8
# option pllidiv=3
# option pllmul=15
# option upllidiv=2
# option upllidiv=2
# Bootloader: for 80MHz clock:
# option crystal=8
# option pllidiv=2
# option pllmul=20
# option upllidiv=2
# option upllidiv=2
# Bootloader: for 96MHz clock:
# option crystal=8
# option pllidiv=2
# option pllmul=24
# option upllidiv=2
# option upllidiv=2
# Bootloader: for 120MHz clock:
option crystal=8

View File

@@ -6,7 +6,7 @@ S = ../../../tools/configsys/../../sys/kernel
vpath %.c $(M):$(S)
vpath %.S $(M):$(S)
KERNOBJ += adc.o clock.o cons.o devcfg.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o glcd.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o oc.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
KERNOBJ += adc.o clock.o cons.o devcfg.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o glcd.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
EXTRA_TARGETS =
DEFS += -DADC_ENABLED=YES
@@ -50,8 +50,8 @@ DEFS += -DGPIO_ENABLED=YES
DEFS += -DKERNEL
DEFS += -DLED_KERNEL_PIN=5
DEFS += -DLED_KERNEL_PORT=TRISE
DEFS += -DOC_ENABLED=YES
DEFS += -DPIC32MX7
DEFS += -DPWM_ENABLED=YES
DEFS += -DSD0_CS_PIN=9
DEFS += -DSD0_CS_PORT=TRISG
DEFS += -DSD0_PORT=2

View File

@@ -21,6 +21,7 @@ device sd0 port=2 cs=4 mhz=10
device gpio
device spi
device adc
device pwm
#device skel
device foreignbootloader

View File

@@ -6,7 +6,7 @@ S = ../../../tools/configsys/../../sys/kernel
vpath %.c $(M):$(S)
vpath %.S $(M):$(S)
KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
EXTRA_TARGETS =
DEFS += -DADC_ENABLED=YES
@@ -50,6 +50,7 @@ DEFS += -DKERNEL
DEFS += -DLED_KERNEL_PIN=3
DEFS += -DLED_KERNEL_PORT=TRISA
DEFS += -DPIC32MX7
DEFS += -DPWM_ENABLED=YES
DEFS += -DSD0_CS_PIN=14
DEFS += -DSD0_CS_PORT=TRISC
DEFS += -DSD0_MHZ=10

View File

@@ -6,7 +6,7 @@ S = ../../../tools/configsys/../../sys/kernel
vpath %.c $(M):$(S)
vpath %.S $(M):$(S)
KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o hx8357.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o oc.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o hx8357.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
EXTRA_TARGETS =
DEFS += -DADC_ENABLED=YES
@@ -48,8 +48,8 @@ DEFS += -DEXEC_SCRIPT
DEFS += -DGPIO_ENABLED=YES
DEFS += -DHX8357_ENABLED
DEFS += -DKERNEL
DEFS += -DOC_ENABLED=YES
DEFS += -DPIC32MX7
DEFS += -DPWM_ENABLED=YES
DEFS += -DSD0_CS_PIN=9
DEFS += -DSD0_CS_PORT=TRISG
DEFS += -DSD0_PORT=2

View File

@@ -18,7 +18,7 @@ device rdisk
device sd0 port=2 cs=48
device gpio
device oc
device pwm
device spi
device adc
device hxtft

View File

@@ -1,5 +1,6 @@
/*
* Output Compare driver for PIC32.
* Pulse Width Modulation driver for PIC32.
* Using Output Compare peripherals.
*
* Copyright (C) 2012 Majenko Technologies <matt@majenko.co.uk>
*
@@ -27,45 +28,36 @@
#include "ioctl.h"
#include "systm.h"
#include "sys/uio.h"
#include "oc.h"
#include "pwm.h"
#include "debug.h"
const struct devspec ocdevs[] = {
{ 0, "oc1" },
{ 1, "oc2" },
{ 2, "oc3" },
{ 3, "oc4" },
{ 4, "oc5" },
/*
* Devices:
* /dev/pwmX
*/
const struct devspec pwmdevs[] = {
{ 0, "pwm1" },
{ 1, "pwm2" },
{ 2, "pwm3" },
{ 3, "pwm4" },
{ 4, "pwm5" },
{ 0, 0 }
};
#define _BC(R,B) (R &= ~(1<<B))
#define _BS(R,B) (R |= (1<<B))
struct oc_state state[OC_MAX_DEV];
struct pwm_state state[PWM_MAX_DEV];
/*
* Devices:
* /dev/ocX
*
* Write to the device outputs to LCD memory as data. Use ioctl() to send
* comands:
*
* ioctl(fd, LCD_RESET, 0) - reset the LCD
* ioctl(fd, LCD_SET_PAGE, page) - set the page address
* ioctl(fd, LCD_SET_Y, y) - set the page offset
*
*/
int oc_set_mode(int unit, int mode)
int pwm_set_mode(int unit, int mode)
{
switch(mode)
{
case OC_MODE_PWM:
case PWM_MODE_PWM:
_BS(T2CON,15); // ON
_BC(T2CON,6);
_BC(T2CON,6);
_BC(T2CON,5); // >- 1:1 prescale
_BC(T2CON,4);
_BC(T2CON,4);
_BC(T2CON,3); // 16 bit timer
_BC(T2CON,1); // Internal clock source
PR2 = 0xFFFF;
@@ -75,51 +67,51 @@ int oc_set_mode(int unit, int mode)
_BS(OC1CON,15); // ON
_BC(OC1CON,5); // 16 bit
_BC(OC1CON,3); // TMR2
_BS(OC1CON,2); //
_BS(OC1CON,2); //
_BS(OC1CON,1); // >- PWM Mode, no fault pin
_BC(OC1CON,0); //
state[0].mode = OC_MODE_PWM;
_BC(OC1CON,0); //
state[0].mode = PWM_MODE_PWM;
break;
case 1:
_BS(OC2CON,15); // ON
_BC(OC2CON,5); // 16 bit
_BC(OC2CON,3); // TMR2
_BS(OC2CON,2); //
_BS(OC2CON,2); //
_BS(OC2CON,1); // >- PWM Mode, no fault pin
_BC(OC2CON,0); //
state[1].mode = OC_MODE_PWM;
state[1].mode = PWM_MODE_PWM;
break;
case 2:
_BS(OC3CON,15); // ON
_BC(OC3CON,5); // 16 bit
_BC(OC3CON,3); // TMR2
_BS(OC3CON,2); //
_BS(OC3CON,2); //
_BS(OC3CON,1); // >- PWM Mode, no fault pin
_BC(OC3CON,0); //
state[2].mode = OC_MODE_PWM;
state[2].mode = PWM_MODE_PWM;
break;
case 3:
_BS(OC4CON,15); // ON
_BC(OC4CON,5); // 16 bit
_BC(OC4CON,3); // TMR2
_BS(OC4CON,2); //
_BS(OC4CON,2); //
_BS(OC4CON,1); // >- PWM Mode, no fault pin
_BC(OC4CON,0); //
state[3].mode = OC_MODE_PWM;
state[3].mode = PWM_MODE_PWM;
break;
case 4:
_BS(OC5CON,15); // ON
_BC(OC5CON,5); // 16 bit
_BC(OC5CON,3); // TMR2
_BS(OC5CON,2); //
_BS(OC5CON,2); //
_BS(OC5CON,1); // >- PWM Mode, no fault pin
_BC(OC5CON,0); //
state[4].mode = OC_MODE_PWM;
state[4].mode = PWM_MODE_PWM;
break;
default:
return EINVAL;
}
DEBUG("oc%d: Mode set to PWM\n",unit);
DEBUG("pwm%d: Mode set to PWM\n",unit);
break;
default:
return EINVAL;
@@ -127,9 +119,9 @@ int oc_set_mode(int unit, int mode)
return 0;
}
int oc_pwm_duty(int unit, unsigned int duty)
int pwm_duty(int unit, unsigned int duty)
{
if(state[unit].mode!=OC_MODE_PWM)
if(state[unit].mode!=PWM_MODE_PWM)
return EINVAL;
switch(unit)
@@ -152,33 +144,33 @@ int oc_pwm_duty(int unit, unsigned int duty)
default:
return EINVAL;
}
DEBUG("oc%d: Duty set to %d\n",unit,duty);
DEBUG("pwm%d: Duty set to %d\n",unit,duty);
return 0;
}
int
oc_open (dev, flag, mode)
pwm_open (dev, flag, mode)
dev_t dev;
{
int unit = minor(dev);
if (unit >= OC_MAX_DEV)
if (unit >= PWM_MAX_DEV)
return ENXIO;
if (u.u_uid != 0)
return EPERM;
DEBUG("oc%d: Opened\n",unit);
DEBUG("pwm%d: Opened\n",unit);
return 0;
}
int
oc_close (dev, flag, mode)
pwm_close (dev, flag, mode)
dev_t dev;
{
return 0;
}
int
oc_read (dev, uio, flag)
pwm_read (dev, uio, flag)
dev_t dev;
struct uio *uio;
int flag;
@@ -187,13 +179,13 @@ oc_read (dev, uio, flag)
return ENODEV;
}
int oc_write (dev_t dev, struct uio *uio, int flag)
int pwm_write (dev_t dev, struct uio *uio, int flag)
{
return ENODEV;
}
int
oc_ioctl (dev, cmd, addr, flag)
pwm_ioctl (dev, cmd, addr, flag)
dev_t dev;
register u_int cmd;
caddr_t addr;
@@ -204,15 +196,15 @@ oc_ioctl (dev, cmd, addr, flag)
unit = minor(dev);
if(unit >= OC_MAX_DEV)
if(unit >= PWM_MAX_DEV)
return ENODEV;
if (cmd == OC_SET_MODE) {
return oc_set_mode(unit, *val);
if (cmd == PWM_SET_MODE) {
return pwm_set_mode(unit, *val);
}
if (cmd == OC_PWM_DUTY) {
return oc_pwm_duty(unit, (unsigned int) *val);
if (cmd == PWM_DUTY) {
return pwm_duty(unit, (unsigned int) *val);
}
return 0;

View File

@@ -45,7 +45,7 @@ DRIVER_ADC = yes
DRIVER_POWER = no
DRIVER_GLCD = yes
DRIVER_OC = yes
DRIVER_PWM = yes
POWER_LED_PORT = TRISG
POWER_LED_PIN = 12

View File

@@ -6,7 +6,7 @@ S = ../../../tools/configsys/../../sys/kernel
vpath %.c $(M):$(S)
vpath %.S $(M):$(S)
KERNOBJ += adc.o clock.o cons.o devcfg.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o glcd.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o oc.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
KERNOBJ += adc.o clock.o cons.o devcfg.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o glcd.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
EXTRA_TARGETS =
DEFS += -DADC_ENABLED=YES
@@ -50,8 +50,8 @@ DEFS += -DGPIO_ENABLED=YES
DEFS += -DKERNEL
DEFS += -DLED_KERNEL_PIN=7
DEFS += -DLED_KERNEL_PORT=TRISE
DEFS += -DOC_ENABLED=YES
DEFS += -DPIC32MX7
DEFS += -DPWM_ENABLED=YES
DEFS += -DSD0_CS_PIN=9
DEFS += -DSD0_CS_PORT=TRISG
DEFS += -DSD0_PORT=2

View File

@@ -12,5 +12,5 @@ device uartusb
device sd0 port=2 cs=SS
device adc
device glcd
device oc
device pwm
device gpio