diff --git a/rootfs.manifest b/rootfs.manifest index 96e9c73..920fe51 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -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 diff --git a/src/cmd/pwm/Makefile b/src/cmd/pwm/Makefile index 28b4fd2..9a306e6 100644 --- a/src/cmd/pwm/Makefile +++ b/src/cmd/pwm/Makefile @@ -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 diff --git a/src/cmd/pwm/pwm.c b/src/cmd/pwm/pwm.c index b39e882..029700b 100644 --- a/src/cmd/pwm/pwm.c +++ b/src/cmd/pwm/pwm.c @@ -6,67 +6,54 @@ #include #include #include -#include +#include -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; } diff --git a/sys/include/oc.h b/sys/include/oc.h deleted file mode 100644 index 38b748b..0000000 --- a/sys/include/oc.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef _OC_H -#define _OC_H - -#include - -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 diff --git a/sys/include/pwm.h b/sys/include/pwm.h new file mode 100644 index 0000000..4c07de5 --- /dev/null +++ b/sys/include/pwm.h @@ -0,0 +1,38 @@ +#ifndef _PWM_H +#define _PWM_H + +#include + +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 diff --git a/sys/pic32/32mxsdram-uart/32MXSDRAM-UART b/sys/pic32/32mxsdram-uart/32MXSDRAM-UART index 17051bf..29ec2f6 100644 --- a/sys/pic32/32mxsdram-uart/32MXSDRAM-UART +++ b/sys/pic32/32mxsdram-uart/32MXSDRAM-UART @@ -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 - - diff --git a/sys/pic32/32mxsdram-uart/Makefile b/sys/pic32/32mxsdram-uart/Makefile index 1a220e5..9f0f8f6 100644 --- a/sys/pic32/32mxsdram-uart/Makefile +++ b/sys/pic32/32mxsdram-uart/Makefile @@ -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 diff --git a/sys/pic32/cfg/oc.dev b/sys/pic32/cfg/oc.dev deleted file mode 100644 index e6f408e..0000000 --- a/sys/pic32/cfg/oc.dev +++ /dev/null @@ -1,4 +0,0 @@ -always - file oc.o - define OC_ENABLED YES -end always diff --git a/sys/pic32/cfg/pwm.dev b/sys/pic32/cfg/pwm.dev new file mode 100644 index 0000000..4838ad5 --- /dev/null +++ b/sys/pic32/cfg/pwm.dev @@ -0,0 +1,4 @@ +always + file pwm.o + define PWM_ENABLED YES +end always diff --git a/sys/pic32/devsw.c b/sys/pic32/devsw.c index 10d360b..c4f5928 100644 --- a/sys/pic32/devsw.c +++ b/sys/pic32/devsw.c @@ -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 diff --git a/sys/pic32/drivers.mk b/sys/pic32/drivers.mk index 26a24f1..7729900 100644 --- a/sys/pic32/drivers.mk +++ b/sys/pic32/drivers.mk @@ -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 \ No newline at end of file +endif diff --git a/sys/pic32/duinomite/DUINOMITE b/sys/pic32/duinomite/DUINOMITE index b5b49da..131fc8b 100644 --- a/sys/pic32/duinomite/DUINOMITE +++ b/sys/pic32/duinomite/DUINOMITE @@ -20,4 +20,4 @@ device sd0 port=3 cs=D5 power=B13 device gpio device foreignbootloader device adc -device oc +device pwm diff --git a/sys/pic32/duinomite/Makefile b/sys/pic32/duinomite/Makefile index 0336247..99b09c0 100644 --- a/sys/pic32/duinomite/Makefile +++ b/sys/pic32/duinomite/Makefile @@ -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 diff --git a/sys/pic32/fubarino/FUBARINO b/sys/pic32/fubarino/FUBARINO index ede7b45..6b8fd6a 100644 --- a/sys/pic32/fubarino/FUBARINO +++ b/sys/pic32/fubarino/FUBARINO @@ -17,7 +17,7 @@ device uartusb device sd0 port=2 cs=SS device gpio -device oc +device pwm device spi device adc device glcd diff --git a/sys/pic32/fubarino/FUBARINO-UART2CONS-UART1-SRAMC b/sys/pic32/fubarino/FUBARINO-UART2CONS-UART1-SRAMC index 3c2eb11..ddd2358 100644 --- a/sys/pic32/fubarino/FUBARINO-UART2CONS-UART1-SRAMC +++ b/sys/pic32/fubarino/FUBARINO-UART2CONS-UART1-SRAMC @@ -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 diff --git a/sys/pic32/fubarino/Makefile b/sys/pic32/fubarino/Makefile index 5dbb9fb..2a9aada 100644 --- a/sys/pic32/fubarino/Makefile +++ b/sys/pic32/fubarino/Makefile @@ -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 diff --git a/sys/pic32/max32/MAX32 b/sys/pic32/max32/MAX32 index f665956..2ca6e0b 100644 --- a/sys/pic32/max32/MAX32 +++ b/sys/pic32/max32/MAX32 @@ -21,6 +21,7 @@ device sd0 port=2 cs=4 mhz=10 device gpio device spi device adc +device pwm #device skel device foreignbootloader diff --git a/sys/pic32/max32/Makefile b/sys/pic32/max32/Makefile index 8e91f41..03fef07 100644 --- a/sys/pic32/max32/Makefile +++ b/sys/pic32/max32/Makefile @@ -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 diff --git a/sys/pic32/picadillo/Makefile b/sys/pic32/picadillo/Makefile index 7cf7cbd..20914a3 100644 --- a/sys/pic32/picadillo/Makefile +++ b/sys/pic32/picadillo/Makefile @@ -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 diff --git a/sys/pic32/picadillo/PICADILLO b/sys/pic32/picadillo/PICADILLO index 2414a23..5fd32a7 100644 --- a/sys/pic32/picadillo/PICADILLO +++ b/sys/pic32/picadillo/PICADILLO @@ -18,7 +18,7 @@ device rdisk device sd0 port=2 cs=48 device gpio -device oc +device pwm device spi device adc device hxtft diff --git a/sys/pic32/oc.c b/sys/pic32/pwm.c similarity index 70% rename from sys/pic32/oc.c rename to sys/pic32/pwm.c index 4b1406f..50d5698 100644 --- a/sys/pic32/oc.c +++ b/sys/pic32/pwm.c @@ -1,5 +1,6 @@ /* - * Output Compare driver for PIC32. + * Pulse Width Modulation driver for PIC32. + * Using Output Compare peripherals. * * Copyright (C) 2012 Majenko Technologies * @@ -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<- 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; diff --git a/sys/pic32/retroone/Makefile b/sys/pic32/retroone/Makefile index ddf13e9..6933f26 100644 --- a/sys/pic32/retroone/Makefile +++ b/sys/pic32/retroone/Makefile @@ -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 diff --git a/sys/pic32/sdxl/Makefile b/sys/pic32/sdxl/Makefile index d71fc79..78b4c49 100644 --- a/sys/pic32/sdxl/Makefile +++ b/sys/pic32/sdxl/Makefile @@ -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 diff --git a/sys/pic32/sdxl/SDXL b/sys/pic32/sdxl/SDXL index 4fb9070..8bc7a58 100644 --- a/sys/pic32/sdxl/SDXL +++ b/sys/pic32/sdxl/SDXL @@ -12,5 +12,5 @@ device uartusb device sd0 port=2 cs=SS device adc device glcd -device oc +device pwm device gpio