Disabled external gits
This commit is contained in:
		
							
								
								
									
										7286
									
								
								cs309-psoc/lab_1_0/hw/quartus/soc_system.sopcinfo
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7286
									
								
								cs309-psoc/lab_1_0/hw/quartus/soc_system.sopcinfo
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								cs309-psoc/lab_1_0/lab_1_0.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cs309-psoc/lab_1_0/lab_1_0.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										69
									
								
								cs309-psoc/lab_1_0/sw/nios/application/app.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								cs309-psoc/lab_1_0/sw/nios/application/app.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <io.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include "pantilt/pantilt.h"
 | 
			
		||||
#include "system.h"
 | 
			
		||||
 | 
			
		||||
#define SLEEP_DURATION_US (25000) //  25  ms
 | 
			
		||||
#define PANTILT_STEP_US   (25)    //  25  us
 | 
			
		||||
 | 
			
		||||
#define PANTILT_PWM_V_CENTER_DUTY_CYCLE_US ((PANTILT_PWM_V_MIN_DUTY_CYCLE_US + PANTILT_PWM_V_MAX_DUTY_CYCLE_US) / 2)
 | 
			
		||||
#define PANTILT_PWM_H_CENTER_DUTY_CYCLE_US ((PANTILT_PWM_H_MIN_DUTY_CYCLE_US + PANTILT_PWM_H_MAX_DUTY_CYCLE_US) / 2)
 | 
			
		||||
 | 
			
		||||
int main(void) {
 | 
			
		||||
    // Hardware control structures
 | 
			
		||||
    pantilt_dev pantilt = pantilt_inst((void *) PWM_0_BASE, (void *) PWM_1_BASE);
 | 
			
		||||
 | 
			
		||||
    // Initialize hardware
 | 
			
		||||
    pantilt_init(&pantilt);
 | 
			
		||||
 | 
			
		||||
    // Center servos.
 | 
			
		||||
    pantilt_configure_vertical(&pantilt, PANTILT_PWM_V_MIN_DUTY_CYCLE_US);
 | 
			
		||||
    pantilt_configure_horizontal(&pantilt, PANTILT_PWM_H_MIN_DUTY_CYCLE_US);
 | 
			
		||||
    pantilt_start_vertical(&pantilt);
 | 
			
		||||
    pantilt_start_horizontal(&pantilt);
 | 
			
		||||
 | 
			
		||||
    // Rotate servos in "square" motion
 | 
			
		||||
    while (true) {
 | 
			
		||||
        uint32_t v_duty_us = 0;
 | 
			
		||||
        uint32_t h_duty_us = 0;
 | 
			
		||||
 | 
			
		||||
        // bottom to top
 | 
			
		||||
        v_duty_us = PANTILT_PWM_V_MIN_DUTY_CYCLE_US;
 | 
			
		||||
        do {
 | 
			
		||||
            pantilt_configure_vertical(&pantilt, v_duty_us);
 | 
			
		||||
            v_duty_us += PANTILT_STEP_US;
 | 
			
		||||
            usleep(SLEEP_DURATION_US);
 | 
			
		||||
        } while (v_duty_us <= PANTILT_PWM_V_MAX_DUTY_CYCLE_US);
 | 
			
		||||
 | 
			
		||||
        // left to right
 | 
			
		||||
        h_duty_us = PANTILT_PWM_H_MIN_DUTY_CYCLE_US;
 | 
			
		||||
        do {
 | 
			
		||||
            pantilt_configure_horizontal(&pantilt, h_duty_us);
 | 
			
		||||
            h_duty_us += PANTILT_STEP_US;
 | 
			
		||||
            usleep(SLEEP_DURATION_US);
 | 
			
		||||
        } while (h_duty_us <= PANTILT_PWM_H_MAX_DUTY_CYCLE_US);
 | 
			
		||||
 | 
			
		||||
        // top to bottom
 | 
			
		||||
        v_duty_us = PANTILT_PWM_V_MAX_DUTY_CYCLE_US;
 | 
			
		||||
        do {
 | 
			
		||||
            pantilt_configure_vertical(&pantilt, v_duty_us);
 | 
			
		||||
            v_duty_us -= PANTILT_STEP_US;
 | 
			
		||||
            usleep(SLEEP_DURATION_US);
 | 
			
		||||
        } while (PANTILT_PWM_V_MIN_DUTY_CYCLE_US <= v_duty_us);
 | 
			
		||||
 | 
			
		||||
        // left to right
 | 
			
		||||
        h_duty_us = PANTILT_PWM_H_MAX_DUTY_CYCLE_US;
 | 
			
		||||
        do {
 | 
			
		||||
            pantilt_configure_horizontal(&pantilt, h_duty_us);
 | 
			
		||||
            h_duty_us -= PANTILT_STEP_US;
 | 
			
		||||
            usleep(SLEEP_DURATION_US);
 | 
			
		||||
        } while (PANTILT_PWM_H_MIN_DUTY_CYCLE_US <= h_duty_us);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return EXIT_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										109
									
								
								cs309-psoc/lab_1_0/sw/nios/application/pantilt/pantilt.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								cs309-psoc/lab_1_0/sw/nios/application/pantilt/pantilt.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
			
		||||
#include "pantilt.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pantilt_inst
 | 
			
		||||
 *
 | 
			
		||||
 * Instantiate a pantilt device structure.
 | 
			
		||||
 *
 | 
			
		||||
 * @param pwm_v_base Base address of the vertical PWM component.
 | 
			
		||||
 * @param pwm_h_base Base address of the horizontal PWM component.
 | 
			
		||||
 */
 | 
			
		||||
pantilt_dev pantilt_inst(void *pwm_v_base, void *pwm_h_base) {
 | 
			
		||||
    pantilt_dev dev;
 | 
			
		||||
    dev.pwm_v = pwm_inst(pwm_v_base);
 | 
			
		||||
    dev.pwm_h = pwm_inst(pwm_h_base);
 | 
			
		||||
 | 
			
		||||
    return dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pantilt_init
 | 
			
		||||
 *
 | 
			
		||||
 * Initializes the pantilt device.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pantilt device structure.
 | 
			
		||||
 */
 | 
			
		||||
void pantilt_init(pantilt_dev *dev) {
 | 
			
		||||
    pwm_init(&(dev->pwm_v));
 | 
			
		||||
    pwm_init(&(dev->pwm_h));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pantilt_configure_vertical
 | 
			
		||||
 *
 | 
			
		||||
 * Configure the vertical PWM component.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pantilt device structure.
 | 
			
		||||
 * @param duty_cycle pwm duty cycle in us.
 | 
			
		||||
 */
 | 
			
		||||
void pantilt_configure_vertical(pantilt_dev *dev, uint32_t duty_cycle) {
 | 
			
		||||
    // Need to compensate for inverted servo rotation.
 | 
			
		||||
    duty_cycle = PANTILT_PWM_V_MAX_DUTY_CYCLE_US - duty_cycle + PANTILT_PWM_V_MIN_DUTY_CYCLE_US;
 | 
			
		||||
 | 
			
		||||
    pwm_configure(&(dev->pwm_v),
 | 
			
		||||
                  duty_cycle,
 | 
			
		||||
                  PANTILT_PWM_PERIOD_US,
 | 
			
		||||
                  PANTILT_PWM_CLOCK_FREQ_HZ);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pantilt_configure_horizontal
 | 
			
		||||
 *
 | 
			
		||||
 * Configure the horizontal PWM component.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pantilt device structure.
 | 
			
		||||
 * @param duty_cycle pwm duty cycle in us.
 | 
			
		||||
 */
 | 
			
		||||
void pantilt_configure_horizontal(pantilt_dev *dev, uint32_t duty_cycle) {
 | 
			
		||||
    // Need to compensate for inverted servo rotation.
 | 
			
		||||
    duty_cycle = PANTILT_PWM_H_MAX_DUTY_CYCLE_US - duty_cycle + PANTILT_PWM_H_MIN_DUTY_CYCLE_US;
 | 
			
		||||
 | 
			
		||||
    pwm_configure(&(dev->pwm_h),
 | 
			
		||||
                  duty_cycle,
 | 
			
		||||
                  PANTILT_PWM_PERIOD_US,
 | 
			
		||||
                  PANTILT_PWM_CLOCK_FREQ_HZ);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pantilt_start_vertical
 | 
			
		||||
 *
 | 
			
		||||
 * Starts the vertical pwm controller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pantilt device structure.
 | 
			
		||||
 */
 | 
			
		||||
void pantilt_start_vertical(pantilt_dev *dev) {
 | 
			
		||||
    pwm_start(&(dev->pwm_v));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pantilt_start_horizontal
 | 
			
		||||
 *
 | 
			
		||||
 * Starts the horizontal pwm controller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pantilt device structure.
 | 
			
		||||
 */
 | 
			
		||||
void pantilt_start_horizontal(pantilt_dev *dev) {
 | 
			
		||||
    pwm_start(&(dev->pwm_h));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pantilt_stop_vertical
 | 
			
		||||
 *
 | 
			
		||||
 * Stops the vertical pwm controller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pantilt device structure.
 | 
			
		||||
 */
 | 
			
		||||
void pantilt_stop_vertical(pantilt_dev *dev) {
 | 
			
		||||
    pwm_stop(&(dev->pwm_v));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pantilt_stop_horizontal
 | 
			
		||||
 *
 | 
			
		||||
 * Stops the horizontal pwm controller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pantilt device structure.
 | 
			
		||||
 */
 | 
			
		||||
void pantilt_stop_horizontal(pantilt_dev *dev) {
 | 
			
		||||
    pwm_stop(&(dev->pwm_h));
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								cs309-psoc/lab_1_0/sw/nios/application/pantilt/pantilt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								cs309-psoc/lab_1_0/sw/nios/application/pantilt/pantilt.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
#ifndef __PANTILT_H__
 | 
			
		||||
#define __PANTILT_H__
 | 
			
		||||
 | 
			
		||||
#include "pwm/pwm.h"
 | 
			
		||||
 | 
			
		||||
/* joysticks device structure */
 | 
			
		||||
typedef struct pantilt_dev {
 | 
			
		||||
    pwm_dev pwm_v; /* Vertical PWM device handle */
 | 
			
		||||
    pwm_dev pwm_h; /* Horizontal PWM device handle */
 | 
			
		||||
} pantilt_dev;
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *  Public API
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
 | 
			
		||||
#define PANTILT_PWM_CLOCK_FREQ_HZ       (50000000) // 50.00 MHz
 | 
			
		||||
 | 
			
		||||
#define PANTILT_PWM_PERIOD_US           (25000)    // 25.00 ms
 | 
			
		||||
 | 
			
		||||
/* Vertical servo */
 | 
			
		||||
#define PANTILT_PWM_V_MIN_DUTY_CYCLE_US (950)      //  0.95 ms
 | 
			
		||||
#define PANTILT_PWM_V_MAX_DUTY_CYCLE_US (2150)     //  2.15 ms
 | 
			
		||||
 | 
			
		||||
/* Horizontal servo */
 | 
			
		||||
#define PANTILT_PWM_H_MIN_DUTY_CYCLE_US (1000)     //  1.00 ms
 | 
			
		||||
#define PANTILT_PWM_H_MAX_DUTY_CYCLE_US (2000)     //  2.00 ms
 | 
			
		||||
 | 
			
		||||
pantilt_dev pantilt_inst(void *pwm_v_base, void *pwm_h_base);
 | 
			
		||||
 | 
			
		||||
void pantilt_init(pantilt_dev *dev);
 | 
			
		||||
 | 
			
		||||
void pantilt_configure_vertical(pantilt_dev *dev, uint32_t duty_cycle);
 | 
			
		||||
void pantilt_configure_horizontal(pantilt_dev *dev, uint32_t duty_cycle);
 | 
			
		||||
void pantilt_start_vertical(pantilt_dev *dev);
 | 
			
		||||
void pantilt_start_horizontal(pantilt_dev *dev);
 | 
			
		||||
void pantilt_stop_vertical(pantilt_dev *dev);
 | 
			
		||||
void pantilt_stop_horizontal(pantilt_dev *dev);
 | 
			
		||||
 | 
			
		||||
#endif /* __PANTILT_H__ */
 | 
			
		||||
							
								
								
									
										71
									
								
								cs309-psoc/lab_1_0/sw/nios/application/pantilt/pwm/pwm.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								cs309-psoc/lab_1_0/sw/nios/application/pantilt/pwm/pwm.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
#include <io.h>
 | 
			
		||||
 | 
			
		||||
#include "pwm.h"
 | 
			
		||||
#include "pwm_regs.h"
 | 
			
		||||
 | 
			
		||||
#define MICROSEC_TO_CLK(time, freq) ((time)*((freq)/1000000))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pwm_inst
 | 
			
		||||
 *
 | 
			
		||||
 * Instantiate a pwm device structure.
 | 
			
		||||
 *
 | 
			
		||||
 * @param base Base address of the component.
 | 
			
		||||
 */
 | 
			
		||||
pwm_dev pwm_inst(void *base) {
 | 
			
		||||
    pwm_dev dev;
 | 
			
		||||
 | 
			
		||||
    dev.base = base;
 | 
			
		||||
 | 
			
		||||
    return dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pwm_init
 | 
			
		||||
 *
 | 
			
		||||
 * Initializes the pwm device. This function stops the controller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pwm device structure.
 | 
			
		||||
 */
 | 
			
		||||
void pwm_init(pwm_dev *dev) {
 | 
			
		||||
    pwm_stop(dev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pwm_configure
 | 
			
		||||
 *
 | 
			
		||||
 * Configure pwm component.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pwm device structure.
 | 
			
		||||
 * @param duty_cycle pwm duty cycle in us.
 | 
			
		||||
 * @param period pwm period in us.
 | 
			
		||||
 * @param module_frequency frequency at which the component is clocked.
 | 
			
		||||
 */
 | 
			
		||||
void pwm_configure(pwm_dev *dev, uint32_t duty_cycle, uint32_t period, uint32_t module_frequency) {
 | 
			
		||||
 | 
			
		||||
	IOWR_32DIRECT(dev->base, PWM_PERIOD_OFST, MICROSEC_TO_CLK(period, module_frequency));
 | 
			
		||||
	IOWR_32DIRECT(dev->base, PWM_DUTY_CYCLE_OFST, MICROSEC_TO_CLK(duty_cycle, module_frequency));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pwm_start
 | 
			
		||||
 *
 | 
			
		||||
 * Starts the pwm controller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pwm device structure.
 | 
			
		||||
 */
 | 
			
		||||
void pwm_start(pwm_dev *dev) {
 | 
			
		||||
	IOWR_32DIRECT(dev->base, PWM_CTRL_OFST, PWM_CTRL_START_MASK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pwm_stop
 | 
			
		||||
 *
 | 
			
		||||
 * Stops the pwm controller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param dev pwm device structure.
 | 
			
		||||
 */
 | 
			
		||||
void pwm_stop(pwm_dev *dev) {
 | 
			
		||||
	IOWR_32DIRECT(dev->base, PWM_CTRL_OFST, PWM_CTRL_STOP_MASK);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								cs309-psoc/lab_1_0/sw/nios/application/pantilt/pwm/pwm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								cs309-psoc/lab_1_0/sw/nios/application/pantilt/pwm/pwm.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
#ifndef __PWM_H__
 | 
			
		||||
#define __PWM_H__
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
/* pwm device structure */
 | 
			
		||||
typedef struct pwm_dev {
 | 
			
		||||
    void *base; /* Base address of component */
 | 
			
		||||
} pwm_dev;
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *  Public API
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
pwm_dev pwm_inst(void *base);
 | 
			
		||||
 | 
			
		||||
void pwm_init(pwm_dev *dev);
 | 
			
		||||
void pwm_configure(pwm_dev *dev, uint32_t duty_cycle, uint32_t period, uint32_t module_frequency);
 | 
			
		||||
void pwm_start(pwm_dev *dev);
 | 
			
		||||
void pwm_stop(pwm_dev *dev);
 | 
			
		||||
 | 
			
		||||
#endif /* __PWM_H__ */
 | 
			
		||||
@@ -0,0 +1,11 @@
 | 
			
		||||
#ifndef __PWM_REGS_H__
 | 
			
		||||
#define __PWM_REGS_H__
 | 
			
		||||
 | 
			
		||||
#define PWM_PERIOD_OFST     (0 * 4) /* RW */
 | 
			
		||||
#define PWM_DUTY_CYCLE_OFST (1 * 4) /* RW */
 | 
			
		||||
#define PWM_CTRL_OFST       (2 * 4) /* WO */
 | 
			
		||||
 | 
			
		||||
#define PWM_CTRL_STOP_MASK  (0)
 | 
			
		||||
#define PWM_CTRL_START_MASK (1)
 | 
			
		||||
 | 
			
		||||
#endif /* __PWM_REGS_H__ */
 | 
			
		||||
		Reference in New Issue
	
	Block a user