mirror of https://github.com/ArduPilot/ardupilot
73 lines
1.6 KiB
C
73 lines
1.6 KiB
C
/*
|
|
* prucomm.h - structure definitions for communication
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#include "pru_defs.h"
|
|
|
|
struct pwm_config {
|
|
u32 hi_cycles;
|
|
u32 hi_err;
|
|
u32 lo_cycles;
|
|
u32 lo_err;
|
|
};
|
|
|
|
/* maximum (PRU0 + PRU1) */
|
|
#define MAX_PWMS 12
|
|
|
|
/* mask of the possibly enabled PWMs (due to h/w) */
|
|
/* 14, 15 are not routed out for PRU1 */
|
|
#define PWM_EN_MASK ( \
|
|
BIT( 0)|BIT( 1)|BIT( 2)|BIT( 3)|BIT( 4)|BIT( 5)|BIT( 6)|BIT( 7)| \
|
|
BIT( 8)|BIT( 9)|BIT(10)|BIT(11)|BIT(12) \
|
|
)
|
|
|
|
#define MIN_PWM_PULSE PRU_us(4)
|
|
|
|
struct pwm_multi_config {
|
|
u32 enmask; /* enable mask */
|
|
u32 offmsk; /* state when pwm is off */
|
|
u32 hilo[MAX_PWMS][2];
|
|
};
|
|
|
|
#define PWM_CMD_MAGIC 0xf00fbaaf
|
|
#define PWM_REPLY_MAGIC 0xbaaff00f
|
|
#define PWM_CMD_CONFIG 0 /* full configuration in one go */
|
|
#define PWM_CMD_ENABLE 1 /* enable a pwm */
|
|
#define PWM_CMD_DISABLE 2 /* disable a pwm */
|
|
#define PWM_CMD_MODIFY 3 /* modify a pwm */
|
|
#define PWM_CMD_SET 4 /* set a pwm output explicitly */
|
|
#define PWM_CMD_CLR 5 /* clr a pwm output explicitly */
|
|
#define PWM_CMD_TEST 6 /* various crap */
|
|
|
|
struct pwm_cmd {
|
|
u32 magic;
|
|
u32 enmask; /* enable mask */
|
|
u32 offmsk; /* state when pwm is off */
|
|
u32 periodhi[MAX_PWMS][2];
|
|
u32 hilo_read[MAX_PWMS][2];
|
|
u32 enmask_read;
|
|
};
|
|
struct pwm_cmd_l{
|
|
u32 enmask;
|
|
u32 offmsk;
|
|
u32 hilo[MAX_PWMS][2];
|
|
};
|
|
|
|
|
|
struct cxt {
|
|
u32 cnt;
|
|
u32 next;
|
|
u32 enmask;
|
|
u32 stmask;
|
|
u32 setmsk;
|
|
u32 clrmsk;
|
|
u32 deltamin;
|
|
u32 *next_hi_lo;
|
|
};
|
|
|
|
|
|
/* the command is at the start of shared DPRAM */
|
|
#define PWM_CMD ((volatile struct pwm_cmd *)DPRAM_SHARED)
|