4 #define DT9812_DIAGS_BOARD_INFO_ADDR 0xFBFF
5 #define DT9812_MAX_WRITE_CMD_PIPE_SIZE 32
6 #define DT9812_MAX_READ_CMD_PIPE_SIZE 32
9 * See Silican Laboratories C8051F020/1/2/3 manual
11 #define F020_SFR_P4 0x84
12 #define F020_SFR_P1 0x90
13 #define F020_SFR_P2 0xa0
14 #define F020_SFR_P3 0xb0
15 #define F020_SFR_AMX0CF 0xba
16 #define F020_SFR_AMX0SL 0xbb
17 #define F020_SFR_ADC0CF 0xbc
18 #define F020_SFR_ADC0L 0xbe
19 #define F020_SFR_ADC0H 0xbf
20 #define F020_SFR_DAC0L 0xd2
21 #define F020_SFR_DAC0H 0xd3
22 #define F020_SFR_DAC0CN 0xd4
23 #define F020_SFR_DAC1L 0xd5
24 #define F020_SFR_DAC1H 0xd6
25 #define F020_SFR_DAC1CN 0xd7
26 #define F020_SFR_ADC0CN 0xe8
28 #define F020_MASK_ADC0CF_AMP0GN0 0x01
29 #define F020_MASK_ADC0CF_AMP0GN1 0x02
30 #define F020_MASK_ADC0CF_AMP0GN2 0x04
32 #define F020_MASK_ADC0CN_AD0EN 0x80
33 #define F020_MASK_ADC0CN_AD0INT 0x20
34 #define F020_MASK_ADC0CN_AD0BUSY 0x10
36 #define F020_MASK_DACxCN_DACxEN 0x80
38 typedef enum { // A/D D/A DI DO CT
39 DT9812_DEVID_DT9812_10, // 8 2 8 8 1 +/- 10V
40 DT9812_DEVID_DT9812_2PT5, // 8 2 8 8 1 0-2.44V
42 DT9812_DEVID_DT9813, // 16 2 4 4 1 +/- 10V
43 DT9812_DEVID_DT9814 // 24 2 0 0 1 +/- 10V
48 DT9812_GAIN_0PT25 = 1,
58 DT9812_LEAST_USB_FIRMWARE_CMD_CODE = 0,
59 DT9812_W_FLASH_DATA = 0, // Write Flash memory
60 DT9812_R_FLASH_DATA = 1, // Read Flash memory (misc config info)
62 // Register read/write commands for processor
63 DT9812_R_SINGLE_BYTE_REG = 2, // Read a single byte of USB memory
64 DT9812_W_SINGLE_BYTE_REG = 3, // Write a single byte of USB memory
65 DT9812_R_MULTI_BYTE_REG = 4, // Multiple Reads of USB memory
66 DT9812_W_MULTI_BYTE_REG = 5, // Multiple Writes of USB memory
67 DT9812_RMW_SINGLE_BYTE_REG = 6, // Read, (AND) with mask, OR value,
68 // then write (single)
69 DT9812_RMW_MULTI_BYTE_REG = 7, // Read, (AND) with mask, OR value,
70 // then write (multiple)
72 // Register read/write commands for SMBus
73 DT9812_R_SINGLE_BYTE_SMBUS = 8, // Read a single byte of SMBus
74 DT9812_W_SINGLE_BYTE_SMBUS = 9, // Write a single byte of SMBus
75 DT9812_R_MULTI_BYTE_SMBUS = 10, // Multiple Reads of SMBus
76 DT9812_W_MULTI_BYTE_SMBUS = 11, // Multiple Writes of SMBus
78 // Register read/write commands for a device
79 DT9812_R_SINGLE_BYTE_DEV = 12, // Read a single byte of a device
80 DT9812_W_SINGLE_BYTE_DEV = 13, // Write a single byte of a device
81 DT9812_R_MULTI_BYTE_DEV = 14, // Multiple Reads of a device
82 DT9812_W_MULTI_BYTE_DEV = 15, // Multiple Writes of a device
84 DT9812_W_DAC_THRESHOLD = 16, // Not sure if we'll need this
86 DT9812_W_INT_ON_CHANGE_MASK = 17, // Set interrupt on change mask
88 DT9812_W_CGL = 18, // Write (or Clear) the CGL for the ADC
89 DT9812_R_MULTI_BYTE_USBMEM = 19, // Multiple Reads of USB memory
90 DT9812_W_MULTI_BYTE_USBMEM = 20, // Multiple Writes to USB memory
92 DT9812_START_SUBSYSTEM = 21, // Issue a start command to a
94 DT9812_STOP_SUBSYSTEM = 22, // Issue a stop command to a
97 DT9812_CALIBRATE_POT = 23, //calibrate the board using CAL_POT_CMD
98 DT9812_W_DAC_FIFO_SIZE = 24, // set the DAC FIFO size
99 DT9812_W_CGL_DAC = 25, // Write (or Clear) the CGL for the DAC
100 DT9812_R_SINGLE_VALUE_CMD = 26, // Read a single value from a subsystem
101 DT9812_W_SINGLE_VALUE_CMD = 27, // Write a single value to a subsystem
102 DT9812_MAX_USB_FIRMWARE_CMD_CODE // Valid DT9812_USB_FIRMWARE_CMD_CODE's
103 // will be less than this number
104 } dt9812_usb_firmware_cmd_t;
109 } dt9812_flash_data_t;
111 #define DT9812_MAX_NUM_MULTI_BYTE_RDS \
112 ((DT9812_MAX_WRITE_CMD_PIPE_SIZE - 4 - 1) / sizeof(u8))
116 u8 address[DT9812_MAX_NUM_MULTI_BYTE_RDS];
117 } dt9812_read_multi_t;
122 } dt9812_write_byte_t;
124 #define DT9812_MAX_NUM_MULTI_BYTE_WRTS \
125 ((DT9812_MAX_WRITE_CMD_PIPE_SIZE - 4 - 1) / sizeof(dt9812_write_byte_t))
129 dt9812_write_byte_t write[DT9812_MAX_NUM_MULTI_BYTE_WRTS];
130 } dt9812_write_multi_t;
138 #define DT9812_MAX_NUM_MULTI_BYTE_RMWS \
139 ((DT9812_MAX_WRITE_CMD_PIPE_SIZE - 4 - 1) / sizeof(dt9812_rmw_byte_t))
143 dt9812_rmw_byte_t rmw[DT9812_MAX_NUM_MULTI_BYTE_RMWS];
144 } dt9812_rmw_multi_t;
146 typedef struct dt9812_usb_cmd {
150 dt9812_flash_data_t flash_data_info;
151 dt9812_read_multi_t read_multi_info;
152 dt9812_write_multi_t write_multi_info;
153 dt9812_rmw_multi_t rmw_multi_info;
156 WRITE_BYTE_INFO WriteByteInfo;
157 READ_BYTE_INFO ReadByteInfo;
158 WRITE_MULTI_INFO WriteMultiInfo;
159 READ_MULTI_INFO ReadMultiInfo;
160 RMW_BYTE_INFO RMWByteInfo;
161 RMW_MULTI_INFO RMWMultiInfo;
162 DAC_THRESHOLD_INFO DacThresholdInfo;
163 INT_ON_CHANGE_MASK_INFO IntOnChangeMaskInfo;
165 SUBSYSTEM_INFO SubsystemInfo;
166 CAL_POT_CMD CalPotCmd;
167 WRITE_DEV_BYTE_INFO WriteDevByteInfo;
168 READ_DEV_BYTE_INFO ReadDevByteInfo;
169 WRITE_DEV_MULTI_INFO WriteDevMultiInfo;
170 READ_DEV_MULTI_INFO ReadDevMultiInfo;
171 READ_SINGLE_VALUE_INFO ReadSingleValueInfo;
172 WRITE_SINGLE_VALUE_INFO WriteSingleValueInfo;