Driver oc renamed to pwm.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
38
sys/include/pwm.h
Normal 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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
always
|
||||
file oc.o
|
||||
define OC_ENABLED YES
|
||||
end always
|
||||
4
sys/pic32/cfg/pwm.dev
Normal file
4
sys/pic32/cfg/pwm.dev
Normal file
@@ -0,0 +1,4 @@
|
||||
always
|
||||
file pwm.o
|
||||
define PWM_ENABLED YES
|
||||
end always
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -20,4 +20,4 @@ device sd0 port=3 cs=D5 power=B13
|
||||
device gpio
|
||||
device foreignbootloader
|
||||
device adc
|
||||
device oc
|
||||
device pwm
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -17,7 +17,7 @@ device uartusb
|
||||
device sd0 port=2 cs=SS
|
||||
|
||||
device gpio
|
||||
device oc
|
||||
device pwm
|
||||
device spi
|
||||
device adc
|
||||
device glcd
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -21,6 +21,7 @@ device sd0 port=2 cs=4 mhz=10
|
||||
device gpio
|
||||
device spi
|
||||
device adc
|
||||
device pwm
|
||||
#device skel
|
||||
|
||||
device foreignbootloader
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -18,7 +18,7 @@ device rdisk
|
||||
device sd0 port=2 cs=48
|
||||
|
||||
device gpio
|
||||
device oc
|
||||
device pwm
|
||||
device spi
|
||||
device adc
|
||||
device hxtft
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,5 +12,5 @@ device uartusb
|
||||
device sd0 port=2 cs=SS
|
||||
device adc
|
||||
device glcd
|
||||
device oc
|
||||
device pwm
|
||||
device gpio
|
||||
|
||||
Reference in New Issue
Block a user