static void send_fw_version(void)
{
- /* Populate the buffer */
- struct version_info *const vi = (struct version_info*)EP0BUF;
+ /* Populate the buffer. */
+ struct version_info *const vi = (struct version_info *)EP0BUF;
vi->major = FX2LAFW_VERSION_MAJOR;
vi->minor = FX2LAFW_VERSION_MINOR;
- /* Send the message */
+ /* Send the message. */
EP0BCH = 0;
EP0BCL = sizeof(struct version_info);
}
vendor_command = cmd;
EP0BCL = 0;
return TRUE;
-
+ break;
case CMD_GET_FW_VERSION:
send_fw_version();
return TRUE;
+ break;
}
return FALSE;
if (vendor_command) {
switch (vendor_command) {
case CMD_START:
- if((EP0CS & bmEPBUSY) != 0)
+ if ((EP0CS & bmEPBUSY) != 0)
break;
- if(EP0BCL == 2) {
+ if (EP0BCL == 2) {
gpif_acquisition_start(
- (const struct cmd_start_acquisition*)EP0BUF);
+ (const struct cmd_start_acquisition *)EP0BUF);
}
/* Acknowledge the vendor command. */
vendor_command = 0;
break;
-
default:
/* Unimplemented command. */
vendor_command = 0;
#include <fx2macros.h>
#include <delay.h>
#include <gpif.h>
-
#include <fx2lafw.h>
#include <gpif-acquisition.h>
{
xdata volatile BYTE *pSTATE;
- /* Ensure GPIF is idle before reconfiguration */
- while(!(GPIFTRIG & 0x80));
-
- /* Set IFCONFIG to the correct clock source */
- if(cmd->flags & CMD_START_FLAGS_CLK_48MHZ) {
- IFCONFIG = bmIFCLKSRC |
- bm3048MHZ |
- bmIFCLKOE |
- bmASYNC |
- bmGSTATE |
- bmIFGPIF;
+ /* Ensure GPIF is idle before reconfiguration. */
+ while (!(GPIFTRIG & 0x80));
+
+ /* Set IFCONFIG to the correct clock source. */
+ if (cmd->flags & CMD_START_FLAGS_CLK_48MHZ) {
+ IFCONFIG = bmIFCLKSRC | bm3048MHZ | bmIFCLKOE | bmASYNC |
+ bmGSTATE | bmIFGPIF;
} else {
- IFCONFIG = bmIFCLKSRC |
- bmIFCLKOE |
- bmASYNC |
- bmGSTATE |
- bmIFGPIF;
+ IFCONFIG = bmIFCLKSRC | bmIFCLKOE | bmASYNC |
+ bmGSTATE | bmIFGPIF;
}
/* GPIF terminology: DP = decision point, NDP = non-decision-point */
- /* Populate WAVEDATA
+ /*
+ * Populate WAVEDATA.
*
* This is the basic algorithm implemented in our GPIF state machine:
*
* State 6: Unused.
*/
- /* Populate S0 */
+ /* Populate S0. */
pSTATE = &GPIF_WAVE_DATA;
- /* DELAY
+ /*
+ * DELAY
* Delay cmd->sample_delay clocks.
*/
pSTATE[0] = cmd->sample_delay;
- /* OPCODE
+ /*
+ * OPCODE
* SGL=0, GIN=0, INCAD=0, NEXT=0, DATA=1, DP=0
* Collect data in this state.
*/
pSTATE[8] = 0x02;
- /* OUTPUT
+ /*
+ * OUTPUT
* OE[0:3]=0, CTL[0:3]=0
*/
pSTATE[16] = 0x00;
- /* LOGIC FUNCTION
- * Not used
+ /*
+ * LOGIC FUNCTION
+ * Not used.
*/
pSTATE[24] = 0x00;
- /* Populate S1 - the decision point */
+ /* Populate S1 - the decision point. */
pSTATE = &GPIF_WAVE_DATA + 1;
- /* BRANCH
- * Branch to IDLE if condition is true, back to S0 otherwise
+ /*
+ * BRANCH
+ * Branch to IDLE if condition is true, back to S0 otherwise.
*/
pSTATE[0] = (7 << 3) | (0 << 0);
- /* OPCODE
+ /*
+ * OPCODE
* SGL=0, GIN=0, INCAD=0, NEXT=0, DATA=0, DP=1
*/
pSTATE[8] = (1 << 0);
- /* OUTPUT
+ /*
+ * OUTPUT
* OE[0:3]=0, CTL[0:3]=0
*/
pSTATE[16] = 0x00;
- /* LOGIC FUNCTION
+ /*
+ * LOGIC FUNCTION
* Evaluate if the FIFO full flag is set.
* LFUNC=0 (AND), TERMA=6 (FIFO Flag), TERMB=6 (FIFO Flag)
*/
pSTATE[24] = (6 << 3) | (6 << 0);
- /* Execute the whole GPIF waveform once */
+ /* Execute the whole GPIF waveform once. */
gpif_set_tc16(1);
/* Perform the initial GPIF read. */
gpif_fifo_read(GPIF_EP2);
- /* Update the status */
+ /* Update the status. */
gpif_acquiring = TRUE;
}
void gpif_poll(void)
{
- /* Detect if acquisition has completed */
- if(gpif_acquiring && (GPIFTRIG & 0x80))
- {
- /* Activate NAK-ALL to avoid race conditions */
+ /* Detect if acquisition has completed. */
+ if (gpif_acquiring && (GPIFTRIG & 0x80)) {
+ /* Activate NAK-ALL to avoid race conditions. */
FIFORESET = 0x80;
SYNCDELAY();
- /* Switch to manual mode */
+ /* Switch to manual mode. */
EP2FIFOCFG = 0;
SYNCDELAY();
- /* Reset EP2 */
+ /* Reset EP2. */
FIFORESET = 0x02;
SYNCDELAY();
- /* Return to auto mode */
+ /* Return to auto mode. */
EP2FIFOCFG = bmAUTOIN;
SYNCDELAY();
- /* Release NAK-ALL */
+ /* Release NAK-ALL. */
FIFORESET = 0x00;
SYNCDELAY();